天天看點

Linux筆記(管道符/作業控制,shell變量,環境變量配置檔案,常見問題)

一、管道符和作業控制

管道符:前面輸出的結果交給後面的指令

例如:find ./*.txt | wc -l             顯示目前檔案下以.txt.結尾的檔案有多少個

作業控制

ctrl + z  暫停目前

jobs   丢在背景的任務列出來

fg     背景的指令恢複到前台

bg     前台的指令丢到背景

&      指令後加&,直接把指令丢到背景

二、shell變量

系統的變量通常是大寫的英文字母

evn    檢視常用的系統變量

set    指令多了很多變量,包括使用者自定義的變量

unset  去除變量

變量名規則:字母,數字,下劃線,首位不能為數字,有特殊符号需要用單引号括起來。

echo &SSH_TTY    檢視自己連接配接那個tty

export    全局變量(向下的關系,他的子shell會生效,但是父shell不會。)

三、環境變量配置檔案

1、當你直接在機器login界面登陸、使用ssh登陸或者su切換使用者登陸時,.bash_profile 會被調用來初始化shell環境

2、當你不登陸系統而使用ssh直接在遠端執行指令,.bashrc 會被調用

3、當你已經登陸系統後,每打開一個新的Terminal時,.bashrc 都會被再次調用。

.bash_logout   使用者退出時要做的指令

echo $PS1   可以檢視目前目錄,指定的是指令行前的一段,可以指定格式。

修改的話直接用PS1= ''注意這裡要用單引号,如果需要永久生效的話,需要/etc/profile中輸入 export PS1="[\u@\h \W]"\$ ,如果目前使用者的話,需要在.bash_profile中輸入

四、問題解答

1. 設定環境變量 HISTSIZE , 使其能夠儲存10000條指令曆史。

答:HISTSIZE=10000   如果要永久有效需要vi  /etc/profile  将HISTSIZE=10000 再儲存退出。

2. 為什麼如果這樣設定PS1 (PS1="[\u@\h \W]\$ ")  顯示的結果和我們預想的不一樣,那要如何設定才能恢複原來預設的?

答:因為是雙引号括起來的,$為脫意字元有特殊意義, 改成PS1='[\u@\h \W]\$ '就能恢複預設的。

3. 想辦法把目前目錄下的檔案的檔案名中的小寫字母全部替換為大寫字母。

答: ls -a | tr 'a-z' 'A-Z'      

4. 使用sort以":"為分隔符,對/etc/passwd檔案的第5段排序。

答:cat /etc/passwd | sort -t: -k5

5. 使用cut以":"為分隔符,截圖/etc/passwd的第三段字元。

答:cat /etc/paswwd | cut -d ':' -f 3

6. 簡述這幾個檔案的作用: /etc/profile, /etc/bashrc, .bashrc, .bash_profile.

答:/etc/profile:此檔案為系統的每個使用者設定環境資訊,當使用者第一次登入時,該檔案被執行。

      /etc/bashrc:為每一個運作bash shell的使用者執行此檔案.當bash shell被打開時,該檔案被讀取。

     ~/.bashrc:該檔案包含專用于單使用者的bash shell的bash資訊,當登入時以及每次打開新的shell時,該檔案被讀取。

     ~/.bash_profile:每個使用者都可使用該檔案輸入專用于自己使用的shell資訊即可以設定使用者的特定程式和啟動環境。

7. export 的作用是什麼?

答:export是聲明變量的意思,讓該shell的子shell也知道該變量的值是多少.如果export後面不加任何變量名,則它會聲明所有的變量。

8. linux下自定義變量要符合什麼樣的規則呢?  

答:a.設定變量的格式為 “a=b”, 其中a為變量名,b為變量的内容,等号兩邊不能有空格;

       b.變量名隻能由英、數字以及下劃線組成,而且不能以數字開頭;

       c.當變量内容帶有特殊字元(如空格)時,需要加上單引号;

9. 如何把要運作的指令丢到背景跑?又如何把背景跑的程序給調到前台?

答:Ctrl+z 或是在指令最後加上&        fg +作業号

10.  列出目前目錄下以"test"開頭的檔案和目錄。

答:ls -d test*

11.  如何把一個指令的輸出内容不僅列印到螢幕上而且還可以重定向到一個檔案内?

答:echo xxxx |tee 1.txt  将xxxx列印到螢幕且輸入到1.txt

12. 假如有個指令很長,我們如何使用一個簡單的字元串代替這個複雜的指令呢?請舉例說明。

答:alias dns='vi /etc/resolv.conf'   再在指令行輸入dns,就進入到/etc/resolv.conf檔案裡了

13. 我如何實作這樣的功能,把一條指令丢到背景運作,而且把其正确輸出和錯誤輸出同時重定向到一個檔案内?

答:例子:cat 2.txt 3.txt>1.txt 2>&1 &  (2.txt為存在的檔案    3.txt為不存在的檔案)  1.txt裡面包含正确輸出和錯誤輸出

0、1和2分别表示标準輸入、标準輸出和标準錯誤資訊輸出,1一般為預設的。

14. 如何按照大小(假如按照10M)分隔一個大檔案,又如何按照行數(假如10000行)分隔?

答:split -b10000000 1.txt     

split -l 10 1.txt       wc -l *看所有檔案的行數

15. 做實驗,搞明白 ; && || 這三個符号的含義。

答:command1 ; command2  表示command1 和 command2為兩個單獨分開執行的指令,互不影響。

       command1 && command2  1假為假 ,若command1為假時,則整條語句是假,不用執行command2,若command1為真時,再去執行command2

       command1 ||   command2  1真為真,若command1為真時,則整條語句是真,不用執行command2,若command1為假,再去執行command2

16. 如果隻想讓某個使用者使用某個變量如何做?

答:例子僅在root下設定變量: echo "export myname=baozhen">>~/.bashrc   source ~/.bashrc(使配置生效)  echo $myname

17. 使用哪個指令會把系統當中所有的變量以及目前使用者定義的自定義變量列出來?

答:set

本文轉自 小新銳 51CTO部落格,原文連結:http://blog.51cto.com/13407306/1982611,如需轉載請自行聯系原作者

繼續閱讀