Linux下定義了三種I/O設備:
標準輸入(STDIN):用0表示,默認的標準輸入設備是鍵盤;
標準輸出(STDOUT):用1表示,默認的標準輸出設備是當前終端;
標準錯誤(STDERR):用2表示,默認的標準錯誤輸出設備是當前終端;
1 標準輸出重定向
(1)將標準輸出重定向到其他終端
/dev/pts/1代表偽終端1,在偽終端1執行hostname命令(查看主機名),并將其重定向至偽終端2。
(2)將標準輸出重定向到文件
cal命令用于查看日歷,cal 2017 > /app/cal.log 將2017年的日歷重定向到app目錄下的cal.log文件。
總結: hostname與cal 2017 都是可正確執行的命令,若不重定向,會產生標準輸出,即將兩命令執行的結果輸出到當前終端,所以a、b中實際上都省略了1,即寫成hostname 1> /dev/pts2或cal 2017 1> /app/cal.log 也可以,因為1代表標準輸出,>是重定向符號。
2 標準錯誤重定向
在根目錄下不存在err文件或目錄,所以ls /err的結果是標準錯誤:
若不重定向,會將其結果輸出至當前終端,如(1)所示;ls /err 1>/app/err.log 中的1>表示將標準輸出重定向至/app/err.log,但是ls /err執行的結果只有標準錯誤,沒有標準輸出,由于未對標準錯誤重定向,所以仍然將標準錯誤重定向至當前終端,如(2)所示;
ls /err 2>/app/err.log中的2表示標準錯誤,該命令實現了將標準錯誤重定向至/app/log文件,所以沒有在當前終端打印錯誤提示,而是將錯誤提示保存到/app/log文件中,如(3)所示。
3 既有標準輸出, 又有標準錯誤,將二者重定向至同一文件
ls /boot的執行結果是正確的,若不重定向,會將其結果輸出至當前終端,如(1)所示;
ls /err的執行結果是錯誤的,若不重定向,也會將其結果輸出至當前終端,如(2)所示;
(1)ls /boot /err > /app/all.log 2>&1中的2>&1表示將標準錯誤轉化為標準輸出,然后>將轉化后所得的標準輸出重定向到/app下的all1.log文件,如(1)所示;
(ls /boot /err 2>&1) > /app/all1.log 與ls /boot /err > /app/all.log 2>&1等價,如(2)所示。
(2)ls /boot /err 2> /app/all3.log 1>&2 中的1>&2表示將標準輸出轉化為標準錯誤,然后2>將轉化后所得的標準錯誤重定向到/app下的all3.log文件,如(1)所示;
(ls /boot /err 1>&2) 2> /app/all4.log與ls /boot /err 2> /app/all3.log 1>&2等價,如(2)所示。
(3) ls /boot /err &> /app/all5.log中的&>表示將標準輸出和標準錯誤合并為同一個數據流后再進行重定向,如(1)所示;
ls /boot /err >& /app/all5.log /app/all5.log與 ls /boot /err &> /app/all5.log等價,如(2)所示。
4 標準輸入重定向
cat命令用于查看文本文件,既有標準輸入又有標準輸出。輸入cat并回車后光標會移至下一行等待接收來自鍵盤的標準輸入,并將其輸出至標準輸出設備即當前終端。圖中黃色線條標識部分即cat的標準輸出。
cat /etc/issue命令用于查看/etc/issue文件的內容,其中定義了系統登錄成功后的提示信息。用/etc/issue文件代替鍵盤做標準輸入,即cat從/etc/issue接收標準輸入,然后輸出至標準輸出即當前終端。
用/etc/issue文件代替鍵盤做標準輸入,即cat從/etc/issue接收標準輸入,然后將標準輸出重定向到/app/issue文件,所以 cat < /etc/issue > /app/issue執行完后當前終端不顯示任何內容,用 cat /app/issue 可查看重定向到該文件下的內容。
原創文章,作者:以夢為馬,如若轉載,請注明出處:http://www.www58058.com/83461