11-4 Shell 特殊操作
為了提高 Shell 的處理能力,一般 Shell 環境都會提供一些特殊操作的工具,而且在不同 Shell 環境之間,這些特殊工具大致上還是可以相容。 11-4-1 輸入/輸出轉向 當執行某一命令時,也許需要輸入某些資料,執行後可能會有結果輸出,或執行當中發生錯誤則需要輸出錯誤訊息告知使用者,Unix 系統都將這些輸入/輸出設定成標準化,如下(如同 C 語言): Ø 標準輸入(stdin,代號 0):鍵盤輸入。 Ø 標準輸出(stdout,代號 1):終端機輸出。 Ø 標準錯誤輸出(stderr,代號 2):終端機輸出。 如同 C 語言一般,可以透過設定檔將上述標準輸入/輸出轉移到其他硬體裝置上。有時候為了方便操作,也可直接將標準輸入/輸出轉向到其他檔案;亦即將鍵盤輸入或終端機輸出由另一個檔案來取代它的輸入與輸出。轉向方法如下: Ø 『<』:輸入轉向。將鍵盤輸入由另一個輸入(如檔案)取代。 Ø 『>』:輸出轉向。將輸出到終端機的資料(標準輸出或錯誤輸出)轉向到另一個位置(如檔案)上。 Ø 『 >>』:輸出附加轉向。將所輸出的資料附加(append)到另一個檔案之後。 以下用幾個範例來說明轉向的功能: (A) 【輸出轉向 – “>”】 『輸出轉向』是將原來終端機輸出轉向到另一個裝置(或檔案)上。如果所轉向的目的檔案不存在時,系統會自動建立新檔案並寫入資料;如該檔案存在的話,會寫入並覆蓋原資料(原資料將遺失掉)。範例操作如下:
(B) 【輸出附加轉向 – “>>”】 如果轉向目標是已存在的檔案,又希望保存原來資料的話,就必須利用『輸出附加轉向』,它會將新的資料寫在原資料的後面,而且不會覆蓋舊資料。操作範例如下:
(C) 【輸入轉向 – “<”】 『輸入轉向』是將原來由鍵盤輸入的資料,轉向由另一個週邊裝置取代,最簡單的輸入轉向是檔案輸入來取代鍵盤輸入,操作範例如下:
(D) 『終端機複製』 Unix 使用者時常利用 cat 命令將終端機上的顯示複製到某一檔案上,用來產生一個新檔案。這對於產生小檔案非常方便,範例如下:
11-4-2 管道輸入與輸出 『管道』(pipe,|)是用來連結兩個以上的命令,將前面命令執行的結果,轉向成後面命令的輸入(command | command)。譬如,$cat file_1 | sort,表示前面命令 cat file_1 的執行結果,經過管道轉向成後面 sort 命令的輸入,至於sort 命令的輸出結果就送給標準輸出,由終端機顯示出來。上述命令是由大到小排序顯示 file_1 的內容。管道的操作範例如下:
11-4-3 聚集命令輸入 所謂『命令行』(Command line)操作,表示每一行輸入一個命令,並且以交談方式繼續輸入下一個命令。在許多情況若需要同時輸入多個命令時,則可利用『分號』(;)將命令聚集在一起。範例如下:
上述範例中,首先個別輸入 echo、date 與 ls 三個命令,接著在同一命令行中輸入同樣命令,並利用『分號』(;)分隔這些命令,發現會得到相同的結果。聚集多個命令也可以利用『轉向』(>),將輸入轉向到另一個檔案,但必須利用『小括號』(( ))將這些命令包起來,範例如下:
11-4-4 程序中斷 當使用者下達一個命令之後,Shell 立即產生一個程序(Process)來執行該命令,且程序會在執行完該命令隨之消失。然而若一個程序執行很久無法完成時,可利用『Ctrl + c』(先按住 Ctrl 鍵再按 C 鍵)強迫中斷該程序。我們利用一個 sleep(沉睡)程序的產生與中斷作為範例來說明,操作如下:
沉睡命令 sleep n 表示 Shell 執行一些無意義的程式 n 秒。在執行當中將不會出現提示符號($),其中 n 秒也不會很準確。執行中可輸入 Ctrl + c 中斷該命令,其他命令一樣可以利用相同的方法來中斷。 11-4-5 背景執行 基本上,使用者與 Shell 之間是交談式(Interactive)的溝通,使用者下達命令之後,Shell 立即接受命令並執行它,執行當中 Shell 因無暇掃描鍵盤,所以沒有任何輸出到終端機上;此時使用者將無法繼續輸入命令,好像與系統斷了線失去聯絡一般,直到 Shell執行完命令之後,才會繼續掃描鍵盤,並將執行結果顯示到終端機上,如此所產生的程序稱之為『前景執行』(Foreground process)。如果期望命令執行當中,Shell 能繼續掃描鍵盤,並讓使用者繼續輸入命令的話(Shell 也可以繼續接收並處理命令),則必須將它設定成『背景程序』(Background process),其設定方法只要在命令的後面加入一個『&』記號即可。基本上,背景程序與前景程序的運作情況完全相同,執行完畢之後,都會由標準輸出顯示其結果。接下來利用 jobs(顯示執行工作)、ps(顯示程序狀態)、vi(文書編輯)與 kill(刪除程序)命令,來測試背景程序的運作,操作如下: Ø 產生一個背景程序:($ vi &)
Ø 觀察目前使用者所下的工作:
使用者可鍵入 jobs 命令,觀察到自己所下達的背景程式(或工作)。另一種方式是利用 ps(process status)命令觀察系統有哪些執行中的程序,再利用檢蒐命令,搜尋使用者自己所產生的那些程序中,是否有 vim 程序。接下來,利用 kill 命令來刪除所產生的程序,操作範例如下:
上述範例中,kill 命令是刪除執行中的程序,其中 -9 是最高等級,表示程序無論在何種狀態下,都會被無條件刪除。使用者僅允許刪除自己所產生的程序,刪除後可利用 ps 命令觀察是否程序還存在。 (A) 【背景程序輸出】 背景程序執行完畢之後,如果有輸出的話,會由標準輸出顯示出來(如沒有另外指定轉向輸出的話),操作範例如下:
|
翻轉工作室:粘添壽
Linux 伺服器系統管理 - CentOS:
翻轉電子書系列:
|