1、文件描述符
Linux系統預留可三個文件描述符:0、1和2,他們的意義如下所示:
0——標准輸入(stdin)
1——標准輸出(stdout)
2——標准錯誤(stderr)
標准輸出——stdout
假設:在當前目錄下,有且只有一個文件名稱為123.txt的文件,這時我們運行這個命令【ls 123.txt】,就會獲得一個標准輸出stdout的輸出結果:123.txt
錯誤輸出——stderr
按照上面的假設,我們運行另一條命令【ls abc.txt】,這樣我們就會獲得一個標准錯誤stderr的輸出結果“ls:無法訪問abc.txt:沒有那個文件或目錄”。
2、重定向
重定向的符號有兩個:>或>>,兩者的區別是:前者會先清空文件,然后再寫入內容,后者會將重定向的內容追加到現有文件的尾部。舉個例子:
(a)重定向標准輸出stdout
對比沒有添加重定向的操作,這條命令在使用之后並沒有將123.txt打印到屏幕。在緊接的cat操作后,可以發現本來應該被輸出的內容被記錄到stdout.txt中。
(b)重定向標准錯誤stderr
對比沒有添加重定向的操作,這條命令在使用之后並沒有將123.txt打印到屏幕。在緊接的cat操作后,可以發現本來應該被輸出的內容被記錄到stderr.txt中。
以上執行結果如下:
[root@node1 xiaoa]# ll
total 0
-rw-r--r--. 1 root root 0 Jun 5 14:21 123.txt
[root@node1 xiaoa]# ls 123.txt
123.txt
[root@node1 xiaoa]# ls abd.txt
ls: cannot access abd.txt: No such file or directory
[root@node1 xiaoa]# ls 123.txt 1> stdout.txt
[root@node1 xiaoa]# vi stdout.txt
[root@node1 xiaoa]# ls abc.txt 2> stderr.txt
[root@node1 xiaoa]# vi stderr.txt
[root@node1 xiaoa]# ll
total 8
-rw-r--r--. 1 root root 0 Jun 5 14:21 123.txt
-rw-r--r--. 1 root root 53 Jun 5 14:40 stderr.txt
-rw-r--r--. 1 root root 8 Jun 5 14:39 stdout.txt
(c)也可以將stderr和stdout重定向到同一個文件
#ls 123.txt &> output.txt
3、Linux特殊文件
/dev/null是一個特殊的設備文件,這個文件接收到任何數據都會被丟棄。因此,null這個設備通常也被稱為位桶(bit bucket)或黑洞。
所以,2>/dev/null的意思就是將標准錯誤stderr刪掉。
#ls abc.txt 2> /dev/null