該博文以CentOS6.8_x86_64系統為基礎,Xshell 5遠程連接CentOS系統,以root身份登錄系統。
什么是I/O重定向?
所謂I/O重定向簡單來說就是一個過程,這個過程捕捉一個文件,或者命令,程序,腳本,甚至腳本中的代碼塊(codeblock)的輸出,然后把捕捉到的輸出,作為輸入發送給另外一個文件,命令,程序,或者腳本。
輸入輸出設備:
可用于輸入的設備:文件(鍵盤設備,文件系統上的常規文件,網卡等)
可用于輸出的設備:文件(顯示器,文件系統上的常規文件,網卡等)
程序的數據流有三種:
輸入的數據流:<– 標準輸入(stdin),鍵盤
輸出的數據流:–> 標準輸出(stdout),顯示器
錯誤的數據流:–> 錯誤輸出(stdorr),顯示器
fd:file description ;文件描述符
標準輸入 0
標準輸出 1
錯誤輸出 2
IO重定向:
輸出重定向:>、>>、2>、2>>、&>、&>>
>添加:覆蓋輸出
>>特性:追加輸出
a.關閉和開啟覆蓋輸出重定向:
①set -C :關閉覆蓋輸出重定向至已存在的文件(僅對當前shell進程有效)
(以cat /etc/inittab > /tmp/inittab.out1 為例)
②set +C :開啟覆蓋輸出重定向至已存在的文件(僅對當前shell進程有效)、
(以cat /etc/inittab > /tmp/inittab.out1為例)
b.>覆蓋輸出重定向的具體的用法
①cat /PATH/TO/SOMEFILE > /XXX/YYY
以cat /etc/inittab > /tmp/inittab.out為例。(cat /tmp/inittab.out 文件較大只顯示其中的一部分,即/etc/inittab文件的上半部分。 )
②cat /PATH/TO/SOMEFILE > /dev/(ttyX or pts/X) X為終端號
以cat /etc/inittab > /dev/tty1為例(不建議直接將輸出的信息發送到tty1上面)
在Xshell上面登錄的/pts/1終端,執行上面的命令
在CentOS6.8的tty1終端上面顯示出/etc/inittab的內容(內容顯示為inittab文件的前幾行)
③cat /PATH/TO/SOMEFILE > /dev/XXX 是一件非常危險的事情,輸出的數據可能直接將/dev/XXX某些數據直接擦除(由于該項操作比較危險,建議不要使用,所以本篇博文,不做演示)
④cat /PATH/TO/SOMEFILR > /XXX/YYY(/XXX/YYY是一個已經存在里面存在數據的文件,然后/XXX/YYY里面的數據會隨著第二次的輸入而改變)
首先將/etc/fstab輸出至/tmp/fstab.out,查看/tmp/fstab.out已經存在/etc/fstab的內容,然后將/etc/inittab輸出至/tmp/fstab.out,再查看/tmp/fstab.out中原來的內容已經被/etc/inittab的內容所取代。
⑤cat /PATH/TO/SOMEFILE >| /XXX/YYY(使用set -C 將覆蓋輸出重定向關閉輸出至已存在的文件,需要強制輸出至已存在的/XXX/YYY 文件)
以/etc/inittab > /tmp/inittab.out1為例
⑥cat /PATH/TO/SOMEFILE > /XXX/YYY (/PATH/TO/SOMEFILE是一個錯誤的地址或者一個不存在的地址)
以/etc/inittabb > /tmp/inittab.out2為例,當/etc/inittabb是一個錯誤的路徑時,覆蓋輸出至/tmp/inittab.out2,本設定應該沒有任何信息輸出,但輸出了一部分的信息,該信息不是標準輸出,是錯誤的輸出(stderr)
c.>>追加輸出重定向的具體的用法
追加輸出重定向的用法等同于覆蓋輸出重定向的用法,但是稍微有一些不同,本博文就簡單的去介紹一下追加輸出重定向。
以/etc/issue > /tmp/issue.out /etc/inittab >> /issue.out為例,將/etc/issue輸出至/issue.out中,將/etc/inittab追加輸出重定向至/issue.out中,可以發現/etc/issue和/etc/inittab兩個文件連接到一塊,可以發現追加輸出是將第一個追加到第二個的后面輸出。
結論:
覆蓋輸出重定向和追加輸出重定向時,將命令執行正確的結果輸出(覆蓋輸出或者追加輸出)到要輸出的/XXX/YYY中,當命令結果執行錯誤時,直接顯示到屏幕上面,即錯誤輸出(stderr)。
d.錯誤輸出流重定向 2>,2>>
cat /PATH/TO/SOMEFILE 2> /XXX/YYY
cat /PATH/TO/SOMEFILE 2>> /XXX/YYY
以/etc/issue 2> /tmp/error.out為例,當cat /etc/issue命令執行正確的時候,將cat命令執行的結果輸出到屏幕上面,當cat /etc/issuea(issuea文件不存在)命令執行錯誤的時候,將cat命令報錯的信息輸出到/tmp/error.out下面。
結論:
該結論和輸出重定向的結論相反,當命令執行正確的時,將命令執行的結果輸出到屏幕上面來,當命令執行錯誤的時候,將命令執行錯誤的提醒輸出到/XXX/YYY文件中。
e.合并正常輸出流和錯誤輸出流
cat /PATH/TO/SOMEFILE &> /XXX/YYY
以/etc/issue &> /tmp/inittab.out3 /etc/issaue &> /tmp/inittab.out3 為例,不管是正確的執行結果還是錯誤的執行結果都會輸出到/tmp/inittab.out3中
cat /PATH/TO/SOMEFILE &>> /XXX/YYY
以/etc/issue &> /tmp/inittab.out3 /etc/issue &>> /tmp/inittab.out3為例,不管是正確的執行結果還是錯誤的執行結果都會輸出到/tmp/inittab.out3中
cat /PATH/TO/SOMEFILE >> /XXX/YYY 2>&1
以cat /etc/inittab >> /tmp/inittab.out4 2>&1為例,不管是正確的執行結果還是錯誤的執行結果都會輸出到/tmp/inittab.out4中
結論:
無論是執行結果的正確與否,都會輸出到指定的文檔之中。
f.輸入輸出重定向
cat << EOF
將字符輸入給cat,當輸入EOF結尾之后,cat直接將輸入的字符輸出到屏幕上面。
cat > /PATH/TO/SOMEFILE << EOF
將字符輸入給cat,當輸入EOF結尾之后,cat直接將輸入的字符輸出重定向到/PATH/TO/SOMEFILE中。
原創文章,作者:sjsir,如若轉載,請注明出處:http://www.www58058.com/26029