目標理解標準I/O通道理解檔案重定向理解管道議程理解標準I/O通道檔案重定向管道8.1 標準輸入和輸出1.Linux 提供3個輸入輸出通道程序:
⑴ 標準輸入→預設為鍵盤;
⑵ 標準輸出→預設為終端視窗;
⑶ 標準錯誤→預設為終端視窗;
當一個shell命令列啟動時通常會自動開啟三個標準檔案,即標準輸入檔案(stdin),通常對應終端的鍵盤;標準輸出檔案(stdout)和標準錯誤輸出檔案(stderr),後兩個檔案都對應終端的螢幕。程序將從標準輸入檔案中得到輸入資料,將正常輸出資料輸出到標準輸出檔案,而將錯誤資訊送到標準錯誤檔案中。
2.直接使用標準輸入\輸出檔案存在以下問題:輸入資料從終端輸入時,使用者費了半天勁輸入的資料只能用一次,下次再想利用這些資料時就得重新輸入。而且在終端上輸入時,若輸入有誤修改起來也不是很方便。
輸出到終端螢幕上的資訊只能看不能動。
8.2 使輸入和輸出重定向重定向,即把命令(或可執行程式)的標準輸入(或輸出)傳送到指定的檔案或命令。也就是說,輸入可以不來自鍵盤,而來自一個指定的檔案(或是某一個命令產生的螢幕輸出);輸出可以不來出現在螢幕,而新增到一個指定的檔案。
1. 標準的輸入、輸出和錯誤能夠被重新連線到交替的位置。⑴ shell 允許標準輸入輸出的操作方向被重定向到或來自一個檔案。
⑵ 管道允許將程式的標準輸入輸出連線到一起。
2. 管道與重定向比較。檔案重定向和管道都被用來操縱標準輸入輸出的方向。二者重要的不同是管道被用來發送一個程式的輸出,當作另一個程式的輸入來使用。
3.使操作改變方向的命令:> command > file :直接地將命令的標準輸出改到檔案;覆蓋輸出。
>> commond >>file :將命令的標準輸出追加到檔案;
< commond < file :命令接收檔案的輸出;
2> commond 2>file :從命令來的錯誤資訊,直接被送到檔案;覆蓋輸出。
2>> commond 2>>file :從命令來的錯誤資訊,直接被追加到檔案;
8.3輸出重定向輸出重定向比輸入重定向更重要,很多情況下都可以使用此功能。例如,如果某個命令的輸出很多,在螢幕上不能完全顯示,那麼將輸出重定向到一個檔案中,然後再用文字編輯器開啟這個檔案,就可以檢視輸出資訊;如果想儲存一個命令的輸出,也可以使用這種方法。還有,輸出重定向可以用於把一個命令的輸出當作另一個命令的輸入。
1. 用命令去學習重定向標輸出和錯誤,我們將使用find命令做練習。find /etc -name passwd
2. 這個命令將在/etc目錄和它們的替代目錄裡搜尋所有檔名為passwd的檔案。3. 標準輸出和標準出錯預設是被顯示在螢幕上的。4. 舉例說明$ find /etc -name passwd
/etc/passwd
find: /etc/default: permission denied
/etc / pam.d/ passwd
8.4重定向標準輸出1. 用>重定向標準標輸出。例如重定向標準輸出到一個檔案:
find /etc -name passwd > findresult
findresult檔案原有的內容會被清除。
2. 標準出錯仍舊被顯示在螢幕上。3. 舉例說明標準輸出重定向到一個檔案並且標準出錯顯示在終端。
$ find /etc -name passwd “1”(代表正確資訊,可省略)>findresult
find:/etc /default permission denied
$ cat findresult
/etc / passwd
/etc/ pam.d/ passwd
8.5 覆蓋或追加為了避免輸出重定向中指定檔案只能存放當前命令的輸出重定向的內容,shell提供了輸出重定向的一種追加手段。輸出追加重定向與輸出重定向的功能相似,區別僅在於輸出追加重定向的功能是把命令(或可執行程式)的輸出結果追加到指定檔案的最後,而該檔案原有內容不被破壞。
1. 如果用>重定向的目標檔案已經存在,那麼存在的檔案將被覆蓋。2. 要向一個已存在的檔案裡追加資料,用>>代替>。3. 舉例說明⑴ 重定向輸出並建立或覆蓋輸出檔案。
$ find /etc —name passwd > output
$ find /etc /default: permission denied
⑵ 重定向輸出並追加到 output檔案中。
$ find /etc —name passwd >> output
find: /etc/default: permission denied
⑶ 檢視output 檔案。
$ cat output
/etc /passwd
/etc /pam .d /passwd
/etc/passwd
/etc/pam. d /passwd
⑷ 重定向輸出並覆蓋output檔案。
$ find /etc —name passwd > output
find /etc/default: permission clenied
⑸ 檢視output檔案
$ cat output
/etc/ passwd
/etc/ pam . d / passwd
8.6 標準出錯重定向1. 系統錯誤與標準輸出使用的I/O管道不同。2. 可用2>重定向標準出錯。例如重定向標準出錯輸出到一個檔案:
find /etc -name passwd 2>(代表錯誤資訊)finderrors
標準輸出被顯示在螢幕上。
3. 可用2>>將標準出錯追加並儲存到檔案中。4. 舉例說明⑴ 重定向標準出錯到檔案。
$ find /etc -name passwd 2> finderrors
/etc /passwd
/etc/pam.d/passwd
⑵ 檢視finderrors檔案。
$ find cat finderrors
find /etc/default: permission denied
⑶ 重定向出錯到finderrors檔案。
$ find flmp -name passwd 2 >> finderrors
⑷ 檢視 finderrors檔案
$ cat finderrors
find: /etc/default: permission denied
find: /tmp/orbit-root: permission denied