一般來說,如果你要執行乙個命令,這個命令可能會由檔案讀入資料,經過處理之後,再將資料輸出到螢幕上。
標準輸出與標準錯誤
簡單地說,標準輸出指的是命令執行所回傳的正確的資訊,而標準錯誤輸出可以理解為命令執行失敗後,所回傳的錯誤資訊。這兩個命令預設都是輸出到螢幕上來,所以螢幕當然是混亂的。那能不能通過某些機制將這兩條資料分開呢?當然可以。這就是資料流重定向的功能。
1>:以覆蓋的方法將正確的資料輸出到指定文檔案或裝置上。
1>>:以累加的方法將正確的資料輸出到指定文檔案或裝置上。
2>:以覆蓋的方法將錯誤的資料輸出到指定文檔案或裝置上。
2>>:以累加的方法將錯誤的資料輸出到指定文檔案或裝置上。
注意:「1>>」以及「2>>」之間是沒有空格的。
示例:將stdout和stderr分別存到不同的檔案中去。
find /home -name .bashrc >list_right 2
>list_error
命令執行完畢,正確的列印資訊就會輸出到list_right這個檔案,而錯誤的列印資訊就會輸出到list_error這個檔案中去了。
注意:如果list_right不存在,系統會自動建立。
想象一下,如果唔知道錯誤資訊會發生,所以想要直接將錯誤資訊丟棄掉呢?這個時候黑洞裝置/dev/null就很重要了。它可以吃掉任何導向這個裝置的資訊。
示例:將上述的例子修正一下。將錯誤的資料丟棄,螢幕上只顯示正確的資料。
find /home -name .bashrc 2
>
/dev/null
再想象一下,如果我要將正確的和錯誤的資訊都寫入到乙個檔案中去呢?這時候就要採用特殊的寫法了。
示例:將命令的資料全部寫入名為list的檔案中
find /home -name .
/bashrc >list 2
> list //錯誤
find /home -name .
/bashrc >list 2
>&1
//正確
find /home -name .
/bashrc &
>list //正確
第一行錯誤的原因是:由於兩條資料寫入同乙個檔案,又沒有使用特殊的語法,所以可能就會造成資料交叉寫入,造成次序的混亂。一般比較習慣於第二種寫法。
簡單的說法,就是將原本需要由鍵盤輸入的資料改由檔案內容而替代。
由於加入》在cat後,所以catfile會被主動建立,而內容就是鍵盤上輸入這這些字母了。
那能不能用純文字檔案代替鍵盤的輸入呢?
執行完上述命令,我們發現這兩個檔案大小幾乎一模一樣,幾乎像是使用cp複製的一般。
理解《之後,我們再來看一下《的使用
舉例來講,我們要用cat直接將輸入的資訊輸入到catfile檔案中去,並且在遇到「eof」的時候,表示輸入結束。
我們發現,最後輸入的eof並沒有輸入到catfile檔案中去,它只是代表著本次輸入的結束。
Linux資料流重定向
開篇 當在執行shell命令時,常見的就是輸出在螢幕上,但是我們有些時候需要儲存輸出結果或者丟棄輸出錯誤,就需要重定向了。什麼是資料流重定向 當我們執行乙個命令 命令不也是程式嘛 可能由檔案或者鍵盤讀入資料,經過處理之後,再將結果輸出到螢幕上。圖中,standard output與standard ...
Linux資料流重定向
在我們日常linux命令操作中,命令執行的輸入一般是鍵盤輸入,輸出一般是輸出到螢幕,但有時候,我們可能會去讀取檔案裡但資料作為輸入,或者將輸出儲存到檔案裡 比如日誌檔案 這個時候就需要用到資料流重定向。所謂資料流重定向,就是 1 將某個命令執行後應該要出現在螢幕上的資料傳輸到其它地方,例如檔案或者諸...
Linux 資料流重定向
1.三種資料流重定向 1 標準輸入 stdin 為0,使用0 或0 2 標準輸出 stdout 為1,使用1 或1 其中 1可以省略 3 標準錯誤輸出 stderr 為2,使用2 或2 2.標準輸出 stdout 重定向 我們知道linux中,cat命令可以將檔案內容輸出到螢幕。如下所示 我們可以使...