| 指令 |
1> 1>> 2> 2>> < |
裝置或檔案 |
左邊一定是指令,至於右邊則可能是裝置或者是檔案!注意了!那個 1> 與 2> 之間並沒有空白字元!而相關的使用說明可以舉例如下:
| [test @test test]# ls -al > list.txt 將顯示的結果輸出到 list.txt 檔案中,若該檔案以存在則予以取代! [test @test test]# ls -al >> list.txt 將顯示的結果累加到 list.txt 檔案中,該檔案為累加的,舊資料保留! [test @test test]# ls -al 1> list.txt 2> list.err 將顯示的資料,正確的輸出到 list.txt 錯誤的資料輸出到 list.err [test @test test]# ls -al 1> list.txt 2>&1 將顯示的資料,不論正確或錯誤均輸出到 list.txt 當中! [test @test test]# ls -al 1> list.txt 2> /dev/null 將顯示的資料,正確的輸出到 list.txt 錯誤的資料則予以丟棄! 注意!錯誤與正確檔案輸出到同一個檔案中,則必須以上面的方法來寫! 不能寫成其他格式! |
這個觀念相當的重要,尤其是在 /etc/crontab 當中執行的時候,如果我們已經知道錯誤的訊息為何,又不想要讓錯誤的訊息一直填滿 root 的信箱,就必須以 2> 搭配 /dev/null 這個垃圾桶黑洞裝置,來將資料丟棄!這個相當的重要!
好了,對於『 > , >> 』這兩個東西有一定的概念之後,我們來深入的談一談『命令輸出重導向』的觀念吧!如前所述,基本上, Linux 執行的結果中,可以約略的分成『正確輸出』與『錯誤輸出』兩種方式。例如,當你以一般身份執行 find 這個指令時,例如執行『 find / -name testing 』時,由於你是一般身份,又有些資料夾是不允許一般身份者進入的,所以囉,當你使用 find 時,就會有錯誤訊息發生了!但同時如果有 testing 這個檔案在你可以進入的資料夾當中,那麼螢幕也會輸出到給你看!因此,就具有正確的與錯誤的輸出兩種囉!(分別稱為 Stdout 與 Stderror)例如下面為執行結果:裡面的『 find: /home/root: Permission denied 』就告訴你該資料夾你沒有權限進入,這就是錯誤的輸出了,那麼『 /home/test/tseting 』就是正確的輸出了!
[test @test test]# find / -name testing
find: /home/test1: Permission denied <==這是錯誤的輸出
find: /home/root: Permission denied <==這是錯誤的輸出
find: /home/masda: Permission denied <==這是錯誤的輸出
/home/test/testing <==這是『正確』的輸出
[test @test test]#好了,那麼假如我們想要將資料輸出到 list 這個檔案中呢?執行『 find / -name testing > list 』會有什麼結果?呵呵,你會發現 list 裡面存了剛剛那個『正確』的輸出資料,至於螢幕上還是會有錯誤的訊息出現呢!傷腦筋!如果想要將正確的與錯誤的資料分別存入不同的檔案中需要怎麼做?!呵呵!其實在資料的重導向方面,正確的寫法應該是『 1> 』與『 2> 』才對!但是如果只有 > 則預設是以 1> 來進行資料的!那個 1> 是輸出正確資料, 2> 則是錯誤資料輸出項目。也就是說:
好了,那麼上面的例子中,我們如何將資料輸出到不同的地方去呢?可以這麼寫:
- 1> :是將正確的資料輸出到指定的地方去
- 2> :是將錯誤的資料輸出到指定的地方去
[test @test test]# find / -name testing 1> list_right 2> list_error 這樣一來,剛剛執行的結果中,有 Permission 的那幾行錯誤資訊都會跑到 list_error 這個檔案中,至於正確的輸出資料則會存到 list_right 這個檔案中囉!這樣可以瞭解了嗎?如果有點混亂的話,去休息一下再來看看吧!!
| [test @test test]# find / -name testing 1> list_right 2> /dev/null |
很神奇呦! error message 就會『不見了!』呵呵!真高興!另外,如果我要將資料都寫到同一個檔案中呢?這個時候寫法需要用到特殊寫法,請注意底下的寫法呦!
| [test @test test]# find / -name testing 1> list 2> list <==錯誤寫法 [test @test tset]# find / -name testing 1> list 2>&1 <==正確寫法 |
請特別留意這一點呢!同時寫入同一個檔案需要使用 2>&1 才對呦!
| 1. 完全由鍵盤輸入資料: [root @test test]# mail -s "test" root <== -s 表示標題, root 為收件者 I am root! <==以下的資料都是由鍵盤輸入的 That's OK . <==要結束鍵盤的輸入時,需要在一行的最前面加上 . 即可! CC. <==是否需要有密件副本?不需要的話,直接按下 Enter ! EOF <==表示送出的提示字元而已! 2. 由檔案代替輸入 |
很有趣吧! ^_^ 這樣就可以將信寄出去囉!所以說,熟悉命令重導像的話,對您可是相當的有幫助的呦!
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/12137615/viewspace-615225/ ,如需转载,请注明出处,否则将追究法律责任。