Linux的shell基礎教學(轉)
Linux的shell基礎教學(轉)[@more@] Linux的shell好比DOS的COMMAND.COM,在使用者和系統之間架起一座橋樑,讓使用者方便地作業系統。由於Linux是一個完全開放的平臺,有許多人都為它編寫了Shell程式。其中的BASH(Baurne Again SHell)容納了其他Shell程式的許多特徵,功能十分全面,所以我們以它為例來講解Shell的一些用法。
在開始講解Linux的一些用法之前,我們將先介紹一些命令,以便讀者在以後的文中做參考。
1.ls命令
格式:ls [選項] [檔案列表]
選項:無,顯示當前目錄的檔案,類似DOS下的dir/w命令;
-l,顯示檔案的詳細內容,有檔案型別、檔案許可權、連結或目錄計數、所有者、所有組、檔案大小、檔案日期和檔名。
-R,從指定目錄開始列出所有向下的目錄中的檔案,類似DOS下的dir/s命令。
2.who命令
格式:who
選項:無,顯示當前都有哪些使用者在使用Linux。
3.cat命令
格式:cat [檔案列表]
作用:顯示檔案列表中檔案的內容。
4.passwd命令
格式:passwd
作用:設定使用者口令。
5.pwd命令
格式:pwd
作用:顯示當前路徑。類似DOS下無引數的cd命令。
6.cd命令
格式:cd [路徑名]
作用:改變當前路徑,同DOS下的cd命令。
7.rm命令
格式:rm [檔案列表]
作用:刪除檔案列表中的檔案。同DOS下的del命令。
8.wc命令
格式:wc [選項] [檔名]
選項:無,顯示檔案的行數、詞數、字元數。
-w,只顯示檔案的詞數。
下面我們將開始講述Linux Shell的一些用法。
一、命令列編輯
在Linux下,當我們輸入一行命令但沒有按Enter鍵時發現輸入有誤,我們應該怎麼辦?Linux為我們提供了兩個特殊符號@和#。
@號的作用是將整行廢除。例如:
$wwho @
who
root tty1 Dec 3 10:22
cl tty2 Dec 3 11:57
cxp tty3 Dec 3 13:54
在這個例子中,命令的頭一個字元有誤,用@廢除這一行,然後重新輸入who命令。
#號的作用是將前一個字元廢除。例如:
$ww#hho##o
root tty1 Dec 3 10:22
cl tty2 Dec 3 11:57
cxp tty3 Dec 3 13:54
在這個例子中,第一個#用於廢除多寫的那個w,第二個#把o刪除,第三個#把多寫h的刪除,再補上o,就是who命令。
這樣看來Linux的操作十分麻煩,其實這兩項功能多用於那些老的鍵盤上。在現在的鍵盤上自然要方便的多了。你可以透過左右鍵、Del鍵、退格鍵來編輯命令列,就像在文字檔案中編輯一行文字一樣輕鬆,這可比DOS還要方便。
二、命令補全
當使用者輸入一個命令的一部分後,按Tab鍵,Shell將試圖補全這個命令。例如:
$pass< Tab>
Bash知道這是一個命令,並查詢以pass開頭的命令,當查到只有passwd符合條件時,Bash將把命令補全。如果查詢到多個以輸入字串開頭的命令,則會發出警告聲,在按一下Tab鍵,將顯示出以此字串開頭的命令。例如:
$pas< Tab>< Tab>
passwd paste
此時在原輸入字串的基礎上增加字元避免多義性後,再用Tab鍵即可補全命令。
Bash不僅能補全命令,還能補全做命令引數的檔名,如:
$ls -l /home/public/c< Tab>< Tab>
clfile cxpfile
$ls -l /home/public/cl< Tab>
-rw-r--r-- 2 cl user 21 Dec 3 12:37clfile
在這個例子中,按第一個Tab鍵,會有警告聲,第二個Tab鍵用於顯示在/home/public目錄下同以c開頭的檔案的名稱,然後新增字元l,在按Tab鍵,Bash將補全檔名,即clfile。
三、歷史表(history list)
因為使用者很有可能用到過去用過的命令,所以Bash將每次輸入的命令都記錄在歷史表中以便將來使用。歷史表可以容納下500條命令。這麼大的容量足夠我們使用的了。在退出登入時,Bash將歷史表的內容儲存到.bash_history檔案中,在登入時,又將.bash_history的內容寫入歷史表中,這樣一來就好像接著上一次登入一樣,我們可以使用history命令來顯示歷史表中的記錄。例如:
$history
210 who
211 passwd
212 cd public
213 cp /home/file/clfile .
214 cp /home/file/cxpfile .
215 ls -l /home/pubic
從例子中可以看出,每一個命令佔一行,被稱為一個事件(event),每一個事件的前一部分的數字被稱為事件號,後一部分則是命令。
如果我們想要執行歷史表中的命令,我們可以用歷史代替運算子(!)加上事件號來實現。例如:
$!210
who
root tty1 Dec 3 10:22
cl tty2 Dec 3 11:57
cxp tty3 Dec 3 13:54
在例子中,我們執行了歷史表中事件號為210的who命令。
如果想要執行最近一次的命令,可以如下輸入:
$!!
who
root tty1 Dec 3 10:22
cl tty2 Dec 3 11:57
cxp tty3 Dec 3 13:54
我們也可以用!和命令連用,來重複過去執行過的命令。這樣的優點是不必寫出命令的引數。如:
$!ls
ls -l /home/pubic
-rw-r--r-- 2 cl user 21 Dec 3 12:37clfile
-rw-rw-r-- 2 cxp user 27 Dec 3 12:33cxpfile
還有一種方法是在命令的任何位置查詢與指定輸入部分相同的命令。具體做法是用一對?把要查詢的字串括起來,例如:
$!?-l?
ls -l /home/pubic
-rw-r--r-- 2 cl user 21 Dec 3 12:37clfile
-rw-rw-r-- 2 cxp user 27 Dec 3 12:33cxpfile
在這條命令中,Bash在每個事件中搜尋有無-l這個字串,當搜尋到有-l字串的ls -l /home/pubic命令時,就執行它。
如果第二個問號後面再沒有其他的東西,則可省略第二個問號,因此上面的例子也可以寫成:
$!?-l
如果要重複命令,但又要做些改動,可以用s/old/new來實現,它的作用是將old部分的字串換成new部分的字串。例如:
$!?-l?:s/public/cl
ls -l /home/cl
drwxrw-r-- 1 cl user 1067 Apr 19 23:35mp
-rw-r--r-- 2 cl user 21 Dec 3 13:41clfile
這個例子是將ls -l /home/public命令中的public換成cl,然後執行。即執行ls -l /home/cl。
其實,上面這些命令還有一個很簡單的實現方法,即按向上鍵,在提示符後就會出現前一次的命令。因此,我們可以透過按上鍵在歷史表中從尾部向前查詢命令。當找到要執行的命令後,可以直接按Enter鍵執行,也可以用前面介紹的命令列編輯方法修改命令。而向下鍵的作用正好與向上鍵相反,是從前向後查詢歷史表。大家可以在實際運用中體會它們的用法。
四、路徑名擴充套件
我想大家對DOS中的*和?不陌生吧。在Linux下它們的用途完全相同。
*代表任意一個字串,例如:
$ls -l /home/public/c*
-rw-r--r-- 2 cl user 21 Dec 3 12:37clfile
-rw-rw-r-- 2 cxp user 27 Dec 3 12:33cxpfile
在這個例子中,Bash將*擴充套件後使c*變為clfile、cxpfile。
?代表任意一個字元,例如:
$cat /home/public/c?file
User name is CaoLei.
在這條命令中,Bash將?擴充套件後得到clfile,即執行cat /home/public/clfile命令。
同DOS一樣,Linux允許在一行中重複使用*和?,如:
$ls c*f*
clfile cxpfile
$ls c?pf?le
cxpfile
在Linux中,比DOS還多一種路徑名擴充套件方式,即用[]把要匹配的字元括起來,如:
$rm dirfle[12346789]
這行命令的作用是刪除名為dirfile1、dirfile2、…、dirfile4、dirfile6、…、dirfile9的這些檔案。我們也可以用一種 比較簡單的寫法來表示上面的命令:
$rm dirfile[1-46-9]
不僅可以用數字,還可以使用字母:
$rm dirfile[abcdefghijklmnopqrstuvwxyz]
$rm dirfile[a-z]
這兩條命令是同一個意思,它們都是把名為dirfilea、…、dirfilez的這些檔案刪除。
五、輸入/輸出重新定向
Linux命令一般從標準輸出裝置獲得資訊,經過命令程式處理後,再將結果送到標準輸出裝置上。鍵盤既是Linux的標準輸出裝置,顯示器既是Linux的標準輸入裝置。
有時,要從檔案中獲得資訊,或是將結果送到檔案中。因為每個命令不一定都帶有相應的引數,所以Bash提供了將命令的標準輸出和標準輸入重新定向的功能,這些功能可以透過相應的符號表示。
1.>和>>
>的功能是將命令的輸出送入檔案中。如果檔案不存在,則建立這個檔案;如果檔案存在,則覆蓋這個檔案,如:
$ls -l > dirfile
$cat dirfile
-rw-r--r-- 2 cl user 21 Dec 3 12:37clfile
-rw-rw-r-- 2 cxp user 27 Dec 3 12:33cxpfile
這個例子中,第一個命令前半部分是列出一個目錄的檔案清單,在一般情況下檔案清單顯示到螢幕上。但後半部分有>號,Bash將標準輸出定義為名為dirfilr的檔案,將顯示結果儲存到了這個檔案中。第二個命令用於察看dirfile檔案的內容,它的內容和直接使用ls -l的結果一樣。
>>的功能同>相似,不同的是:如果檔案存在,它並不是覆蓋檔案,而是將結果新增的檔案的後面。例如:
$ls -l >> dirfile
$cat dirfile
-rw-r--r-- 2 cl user 21 Dec 3 12:37clfile
-rw-rw-r-- 2 cxp user 27 Dec 3 12:33cxpfile
-rw-r--r-- 2 cl user 21 Dec 3 12:37clfile
-rw-rw-r-- 2 cxp user 27 Dec 3 12:33cxpfile
2.2>、2>>和&>
在Linux中標準輸出和錯誤輸出是不同的。在一般情況下,它們都把結果送到顯示器上,但當輸出重定向時,我們就可以看出它們是不同的了。
$ls mp > lserr
ls:mp: No such file or directory.
$cat lserr
$
在上面的命令中,沒有mp檔案或目錄,所以出現錯誤資訊,但錯誤資訊並未儲存到lserr檔案中,由此可見標準輸出和錯誤輸出是不同的。如果我們想把錯誤資訊儲存到檔案中,可以使用2>。
$ls mp 2> lserr
$cat lserr
ls:mp: No such file or directory.
2>>是將錯誤資訊新增到檔案尾部。但如果我們想把標準輸出和錯誤輸出都儲存到一個檔案時,該怎麼辦?我們可以使用&>。
3.<
它的作用正好與>相反,即把檔案中的內容送入命令中。如:
$wc < /etc/passwd
18 20 608 /etc/passwd
輸入/輸出重新定向是一種十分有用的功能,它可以是許多命令的功能增強,辦到一些這些命令原本辦不到的事。
六、管道
我相信各位在DOS中可以都用過這個功能,用豎槓字元|來將多個命令連結起來。用|前面的命令的輸出做|後面的命令的輸入,組合出十分有用的命令。這就是管道。透過下面的例子我們能瞭解它的用法。
$ls /bin | wc -w
87
七、作業(job)
Bash把每次執行的命令當做一個作業,併為它們分配了作業號,如果有管道,則將這些命令認為是一個作業。Bash可以用作業號來控制作業的執行、掛起、結束。需注意的是作業不等於程式。有關作業控制的符號和命令如下:
1.&
它用在命令列的最後,作用是將命令放到後臺繼續執行,立即返回Bash的提示符。
$ls -lR / &> lsfile &
[1]204
$
這行命令是將把/以下的所有目錄中的檔案送到lsfile,因為許可權問題所以會產生錯誤資訊,故用&>。在最後新增了&,所以不等這條命令結束就返回提示符。其中[]中的內容是作業號,後面的數字是程式號。
如果沒有在命令後面加&,要想在命令執行中使用提示符,可以用Ctrl+z先將命令掛起,等以後執行,如:
$cat > text
< Ctrl+z>
$
2.jobs命令
這個命令是用於顯示系統中所有的作業,如:
$cat > text
< Ctrl+z>
$jobs
[1]+ stopped cat > text
這個例子中,第一條命令是從鍵盤上讀取字元輸入到text檔案中。接著按Ctrl+z將它掛起,再用jobs命令察看作業。
3.fg、bg和kill命令
fg是將作業送到前臺執行。如:
$cat > text
< Ctrl+z>
$jobs
[1]+ stopped cat > text
$fg
cat > text
User name is Caolei.
< Ctrl+d>
$
在這個例子中,先用Ctrl+z將cat > text命令掛起,接著用jobs命令察看作業,因為作業號右邊有+號,所以它是預設作業,可以直接用fg命令把它送到前臺執行。然後,我們輸入了User name is Caolei.做text的內容,用Ctrl+d結束cat > text命令。
bg命令的作用是將作業送到後臺,用法同fg一樣。
kill命令是將作業立即結束,用法是kill %作業號。例如:
$cat > text
< Ctrl+z>
$jobs
[1]+ stopped cat > text
$bg
$jobs
[1]+ stopped(tty input) cat > text
$kill %1
上面的例子中,bg將作業1傳送到後臺執行(不是掛起),但因為cat > text需要從鍵盤上獲得輸入,放到後臺無法執行,故被自動掛起。
到此為止,我們總共介紹了Bash的七大功能。很好的利用它們,可以使我們更好地操作各種命令來完成我們的工作。
在開始講解Linux的一些用法之前,我們將先介紹一些命令,以便讀者在以後的文中做參考。
1.ls命令
格式:ls [選項] [檔案列表]
選項:無,顯示當前目錄的檔案,類似DOS下的dir/w命令;
-l,顯示檔案的詳細內容,有檔案型別、檔案許可權、連結或目錄計數、所有者、所有組、檔案大小、檔案日期和檔名。
-R,從指定目錄開始列出所有向下的目錄中的檔案,類似DOS下的dir/s命令。
2.who命令
格式:who
選項:無,顯示當前都有哪些使用者在使用Linux。
3.cat命令
格式:cat [檔案列表]
作用:顯示檔案列表中檔案的內容。
4.passwd命令
格式:passwd
作用:設定使用者口令。
5.pwd命令
格式:pwd
作用:顯示當前路徑。類似DOS下無引數的cd命令。
6.cd命令
格式:cd [路徑名]
作用:改變當前路徑,同DOS下的cd命令。
7.rm命令
格式:rm [檔案列表]
作用:刪除檔案列表中的檔案。同DOS下的del命令。
8.wc命令
格式:wc [選項] [檔名]
選項:無,顯示檔案的行數、詞數、字元數。
-w,只顯示檔案的詞數。
下面我們將開始講述Linux Shell的一些用法。
一、命令列編輯
在Linux下,當我們輸入一行命令但沒有按Enter鍵時發現輸入有誤,我們應該怎麼辦?Linux為我們提供了兩個特殊符號@和#。
@號的作用是將整行廢除。例如:
$wwho @
who
root tty1 Dec 3 10:22
cl tty2 Dec 3 11:57
cxp tty3 Dec 3 13:54
在這個例子中,命令的頭一個字元有誤,用@廢除這一行,然後重新輸入who命令。
#號的作用是將前一個字元廢除。例如:
$ww#hho##o
root tty1 Dec 3 10:22
cl tty2 Dec 3 11:57
cxp tty3 Dec 3 13:54
在這個例子中,第一個#用於廢除多寫的那個w,第二個#把o刪除,第三個#把多寫h的刪除,再補上o,就是who命令。
這樣看來Linux的操作十分麻煩,其實這兩項功能多用於那些老的鍵盤上。在現在的鍵盤上自然要方便的多了。你可以透過左右鍵、Del鍵、退格鍵來編輯命令列,就像在文字檔案中編輯一行文字一樣輕鬆,這可比DOS還要方便。
二、命令補全
當使用者輸入一個命令的一部分後,按Tab鍵,Shell將試圖補全這個命令。例如:
$pass< Tab>
Bash知道這是一個命令,並查詢以pass開頭的命令,當查到只有passwd符合條件時,Bash將把命令補全。如果查詢到多個以輸入字串開頭的命令,則會發出警告聲,在按一下Tab鍵,將顯示出以此字串開頭的命令。例如:
$pas< Tab>< Tab>
passwd paste
此時在原輸入字串的基礎上增加字元避免多義性後,再用Tab鍵即可補全命令。
Bash不僅能補全命令,還能補全做命令引數的檔名,如:
$ls -l /home/public/c< Tab>< Tab>
clfile cxpfile
$ls -l /home/public/cl< Tab>
-rw-r--r-- 2 cl user 21 Dec 3 12:37clfile
在這個例子中,按第一個Tab鍵,會有警告聲,第二個Tab鍵用於顯示在/home/public目錄下同以c開頭的檔案的名稱,然後新增字元l,在按Tab鍵,Bash將補全檔名,即clfile。
三、歷史表(history list)
因為使用者很有可能用到過去用過的命令,所以Bash將每次輸入的命令都記錄在歷史表中以便將來使用。歷史表可以容納下500條命令。這麼大的容量足夠我們使用的了。在退出登入時,Bash將歷史表的內容儲存到.bash_history檔案中,在登入時,又將.bash_history的內容寫入歷史表中,這樣一來就好像接著上一次登入一樣,我們可以使用history命令來顯示歷史表中的記錄。例如:
$history
210 who
211 passwd
212 cd public
213 cp /home/file/clfile .
214 cp /home/file/cxpfile .
215 ls -l /home/pubic
從例子中可以看出,每一個命令佔一行,被稱為一個事件(event),每一個事件的前一部分的數字被稱為事件號,後一部分則是命令。
如果我們想要執行歷史表中的命令,我們可以用歷史代替運算子(!)加上事件號來實現。例如:
$!210
who
root tty1 Dec 3 10:22
cl tty2 Dec 3 11:57
cxp tty3 Dec 3 13:54
在例子中,我們執行了歷史表中事件號為210的who命令。
如果想要執行最近一次的命令,可以如下輸入:
$!!
who
root tty1 Dec 3 10:22
cl tty2 Dec 3 11:57
cxp tty3 Dec 3 13:54
我們也可以用!和命令連用,來重複過去執行過的命令。這樣的優點是不必寫出命令的引數。如:
$!ls
ls -l /home/pubic
-rw-r--r-- 2 cl user 21 Dec 3 12:37clfile
-rw-rw-r-- 2 cxp user 27 Dec 3 12:33cxpfile
還有一種方法是在命令的任何位置查詢與指定輸入部分相同的命令。具體做法是用一對?把要查詢的字串括起來,例如:
$!?-l?
ls -l /home/pubic
-rw-r--r-- 2 cl user 21 Dec 3 12:37clfile
-rw-rw-r-- 2 cxp user 27 Dec 3 12:33cxpfile
在這條命令中,Bash在每個事件中搜尋有無-l這個字串,當搜尋到有-l字串的ls -l /home/pubic命令時,就執行它。
如果第二個問號後面再沒有其他的東西,則可省略第二個問號,因此上面的例子也可以寫成:
$!?-l
如果要重複命令,但又要做些改動,可以用s/old/new來實現,它的作用是將old部分的字串換成new部分的字串。例如:
$!?-l?:s/public/cl
ls -l /home/cl
drwxrw-r-- 1 cl user 1067 Apr 19 23:35mp
-rw-r--r-- 2 cl user 21 Dec 3 13:41clfile
這個例子是將ls -l /home/public命令中的public換成cl,然後執行。即執行ls -l /home/cl。
其實,上面這些命令還有一個很簡單的實現方法,即按向上鍵,在提示符後就會出現前一次的命令。因此,我們可以透過按上鍵在歷史表中從尾部向前查詢命令。當找到要執行的命令後,可以直接按Enter鍵執行,也可以用前面介紹的命令列編輯方法修改命令。而向下鍵的作用正好與向上鍵相反,是從前向後查詢歷史表。大家可以在實際運用中體會它們的用法。
四、路徑名擴充套件
我想大家對DOS中的*和?不陌生吧。在Linux下它們的用途完全相同。
*代表任意一個字串,例如:
$ls -l /home/public/c*
-rw-r--r-- 2 cl user 21 Dec 3 12:37clfile
-rw-rw-r-- 2 cxp user 27 Dec 3 12:33cxpfile
在這個例子中,Bash將*擴充套件後使c*變為clfile、cxpfile。
?代表任意一個字元,例如:
$cat /home/public/c?file
User name is CaoLei.
在這條命令中,Bash將?擴充套件後得到clfile,即執行cat /home/public/clfile命令。
同DOS一樣,Linux允許在一行中重複使用*和?,如:
$ls c*f*
clfile cxpfile
$ls c?pf?le
cxpfile
在Linux中,比DOS還多一種路徑名擴充套件方式,即用[]把要匹配的字元括起來,如:
$rm dirfle[12346789]
這行命令的作用是刪除名為dirfile1、dirfile2、…、dirfile4、dirfile6、…、dirfile9的這些檔案。我們也可以用一種 比較簡單的寫法來表示上面的命令:
$rm dirfile[1-46-9]
不僅可以用數字,還可以使用字母:
$rm dirfile[abcdefghijklmnopqrstuvwxyz]
$rm dirfile[a-z]
這兩條命令是同一個意思,它們都是把名為dirfilea、…、dirfilez的這些檔案刪除。
五、輸入/輸出重新定向
Linux命令一般從標準輸出裝置獲得資訊,經過命令程式處理後,再將結果送到標準輸出裝置上。鍵盤既是Linux的標準輸出裝置,顯示器既是Linux的標準輸入裝置。
有時,要從檔案中獲得資訊,或是將結果送到檔案中。因為每個命令不一定都帶有相應的引數,所以Bash提供了將命令的標準輸出和標準輸入重新定向的功能,這些功能可以透過相應的符號表示。
1.>和>>
>的功能是將命令的輸出送入檔案中。如果檔案不存在,則建立這個檔案;如果檔案存在,則覆蓋這個檔案,如:
$ls -l > dirfile
$cat dirfile
-rw-r--r-- 2 cl user 21 Dec 3 12:37clfile
-rw-rw-r-- 2 cxp user 27 Dec 3 12:33cxpfile
這個例子中,第一個命令前半部分是列出一個目錄的檔案清單,在一般情況下檔案清單顯示到螢幕上。但後半部分有>號,Bash將標準輸出定義為名為dirfilr的檔案,將顯示結果儲存到了這個檔案中。第二個命令用於察看dirfile檔案的內容,它的內容和直接使用ls -l的結果一樣。
>>的功能同>相似,不同的是:如果檔案存在,它並不是覆蓋檔案,而是將結果新增的檔案的後面。例如:
$ls -l >> dirfile
$cat dirfile
-rw-r--r-- 2 cl user 21 Dec 3 12:37clfile
-rw-rw-r-- 2 cxp user 27 Dec 3 12:33cxpfile
-rw-r--r-- 2 cl user 21 Dec 3 12:37clfile
-rw-rw-r-- 2 cxp user 27 Dec 3 12:33cxpfile
2.2>、2>>和&>
在Linux中標準輸出和錯誤輸出是不同的。在一般情況下,它們都把結果送到顯示器上,但當輸出重定向時,我們就可以看出它們是不同的了。
$ls mp > lserr
ls:mp: No such file or directory.
$cat lserr
$
在上面的命令中,沒有mp檔案或目錄,所以出現錯誤資訊,但錯誤資訊並未儲存到lserr檔案中,由此可見標準輸出和錯誤輸出是不同的。如果我們想把錯誤資訊儲存到檔案中,可以使用2>。
$ls mp 2> lserr
$cat lserr
ls:mp: No such file or directory.
2>>是將錯誤資訊新增到檔案尾部。但如果我們想把標準輸出和錯誤輸出都儲存到一個檔案時,該怎麼辦?我們可以使用&>。
3.<
它的作用正好與>相反,即把檔案中的內容送入命令中。如:
$wc < /etc/passwd
18 20 608 /etc/passwd
輸入/輸出重新定向是一種十分有用的功能,它可以是許多命令的功能增強,辦到一些這些命令原本辦不到的事。
六、管道
我相信各位在DOS中可以都用過這個功能,用豎槓字元|來將多個命令連結起來。用|前面的命令的輸出做|後面的命令的輸入,組合出十分有用的命令。這就是管道。透過下面的例子我們能瞭解它的用法。
$ls /bin | wc -w
87
七、作業(job)
Bash把每次執行的命令當做一個作業,併為它們分配了作業號,如果有管道,則將這些命令認為是一個作業。Bash可以用作業號來控制作業的執行、掛起、結束。需注意的是作業不等於程式。有關作業控制的符號和命令如下:
1.&
它用在命令列的最後,作用是將命令放到後臺繼續執行,立即返回Bash的提示符。
$ls -lR / &> lsfile &
[1]204
$
這行命令是將把/以下的所有目錄中的檔案送到lsfile,因為許可權問題所以會產生錯誤資訊,故用&>。在最後新增了&,所以不等這條命令結束就返回提示符。其中[]中的內容是作業號,後面的數字是程式號。
如果沒有在命令後面加&,要想在命令執行中使用提示符,可以用Ctrl+z先將命令掛起,等以後執行,如:
$cat > text
< Ctrl+z>
$
2.jobs命令
這個命令是用於顯示系統中所有的作業,如:
$cat > text
< Ctrl+z>
$jobs
[1]+ stopped cat > text
這個例子中,第一條命令是從鍵盤上讀取字元輸入到text檔案中。接著按Ctrl+z將它掛起,再用jobs命令察看作業。
3.fg、bg和kill命令
fg是將作業送到前臺執行。如:
$cat > text
< Ctrl+z>
$jobs
[1]+ stopped cat > text
$fg
cat > text
User name is Caolei.
< Ctrl+d>
$
在這個例子中,先用Ctrl+z將cat > text命令掛起,接著用jobs命令察看作業,因為作業號右邊有+號,所以它是預設作業,可以直接用fg命令把它送到前臺執行。然後,我們輸入了User name is Caolei.做text的內容,用Ctrl+d結束cat > text命令。
bg命令的作用是將作業送到後臺,用法同fg一樣。
kill命令是將作業立即結束,用法是kill %作業號。例如:
$cat > text
< Ctrl+z>
$jobs
[1]+ stopped cat > text
$bg
$jobs
[1]+ stopped(tty input) cat > text
$kill %1
上面的例子中,bg將作業1傳送到後臺執行(不是掛起),但因為cat > text需要從鍵盤上獲得輸入,放到後臺無法執行,故被自動掛起。
到此為止,我們總共介紹了Bash的七大功能。很好的利用它們,可以使我們更好地操作各種命令來完成我們的工作。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-952708/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux 的shell基礎教學Linux
- Linux學習(Shell基礎)Linux
- Linux學習-shell基礎02Linux
- shell基礎(轉)
- Linux shell 基礎Linux
- Shell Script(bash)--教學例(轉)
- 玩轉Linux – shell 程式設計基礎Linux程式設計
- 最基礎的Nginx教學Nginx
- Linux shell基礎3Linux
- Linux shell基礎1Linux
- Linux shell基礎2Linux
- Linux shell基礎(一)Linux
- Linux下Shell基礎知識深入淺出(轉)Linux
- 【Linux學習筆記29】shell指令碼基礎Linux筆記指令碼
- Linux程式設計-11.Shell Script(bash)--(2)教學例(轉)Linux程式設計
- Linux Bash Shell學習(八):shell程式設計基礎——string操作Linux程式設計
- korn shell基礎知識(轉)
- 『忘了再學』Shell基礎 — 20、Shell中的運算子
- Linux Bash Shell學習(七):shell程式設計基礎——執行Shell指令碼、functionLinux程式設計指令碼Function
- Shell 學習筆記 基礎筆記
- Linux基礎五(shell指令碼)Linux指令碼
- 『忘了再學』Shell基礎 — 2、Shell的作用與分類
- shell入門基礎必備(轉)
- shell基礎學習總結(一)
- shell基礎學習總結(二)
- shell基礎
- Linux必須掌握的shell指令碼基礎Linux指令碼
- Linux基礎之Shell與變數Linux變數
- Linux shell 指令碼基礎介紹Linux指令碼
- Linux 筆記分享四:Shell 基礎Linux筆記
- Linux shell基礎知識_8(下)Linux
- 『忘了再學』Shell基礎 — 24、Shell正規表示式的使用
- 『忘了再學』Shell基礎 — 30、sed命令的使用
- shell基礎教程二十四: shell基礎教程: Shell檔案包含
- Linux基礎入門(一)初識ShellLinux
- Linux基礎命令---enable開啟shell命令Linux
- 新手入門之——Linux學習基礎(轉)Linux
- shell 基礎命令