一、I/O設備
Linux中,對系統進行操作時,就需要I/O設備與系統產生交互,同時會產生三種數據,標準輸入(0)、標準輸出(1)、標準錯誤(2)。其中標準輸入(stdin)默認接受來自鍵盤的輸入,標準輸出(stdout)和標準錯誤(stderr)默認向終端窗口輸出,改變默認輸出和出入的位置,就是I/O重定向。
二、輸出重定向到文件
>:把標準輸出重定向到文件中
2>:把標準錯誤重定向到文件中
&>:把所有輸出重定向到文件中,或:COMMAND > /path/to/file.out 2> &1(注意命令順序)
“>”會使原來的文件中所有的內容被覆蓋,使用“set -C”可以禁止覆蓋已有的文件,如果想強制覆蓋,可以使用“>|”選項。使用“set +C”可以解鎖禁止覆蓋。
>>:在原有的內容上追加重定向的標準輸出內容
2>:重定向標準錯誤輸出流覆蓋原文件
2>>:重定向標準錯誤輸出流追加至原文件
&>>:標準輸出和錯誤輸出追加到文件中,或:COMMAND >> /path/to/file.out 2>> &1 (注意命令順序)
把同一個命令的標準輸出和錯誤輸出分別定向到不同的文件:
COMMAND > /path/to/file.out 2> /path/to/error.out
當需要合并多個程序的輸出時,使用括號“()”
三、tr命令的使用
tr用于從標準輸入中轉換和刪除字符,格式為:tr [OPTION]… SET1 [SET2],其中SET1用于查詢匹配字符,SET2用于替換和刪除字符。常用的選項有:
-c –complerment:取字符集的補集
-d –delete:刪除所有屬于SET1字符集的字符
-s –squeeze-repeats:把連續重復的的字符以單獨一個字符表示
-t –turncate-set1:將第一個字符集對應的字符轉化為第二個字符集對應的字符
四、重定向到輸入
重定向輸入“<”可以將鍵盤以外的設備輸入到命令中,使用某些可以能夠接受文件導入的標準輸入,例如:
tr 'a-z' 'A-Z' < /etc/issue 把/etc/issue中的小寫字符轉換為大寫字符
tr -d abc < /etc/fstab 刪除/etc/fstab中的abc
cat > file.txt 把鍵盤輸入的內容寫到文件中,按“ctrl+d”結束輸入
cat > filea < fileb 把fileb中的內容覆蓋到filea中
使用“<<終止詞”可以把多行命令從鍵盤導向STDIN,直到“終止詞”位置的所有文本都發送到STDIN。終止詞所在行不能出現除本身以外的任何字符,包括空格,否則本行的終止符失效。
五、管道
管道可以把一個進程的標準輸出流與另一個進程的標準輸入流連接起來。bash中用“|”在兩個命令之間創建管道。例如:
less:逐頁查看輸入
ls -l /etc |less
mail:通過電子郵件發送輸入
echo "test email" | mail -s "text" stu28
把test email中的內容以郵件的形式發送給用戶stu28
lpr:把輸入發送給打印機
$ echo "test print" | lpr -P printer_name
六、tee命令
功能說明:讀取標準輸入的數據,并將其內容輸出成文件。
語法:tee [OPTION]… [FILE]…
補充說明:tee命令會從標準輸入設備讀取數據,將其內容輸出到標準輸出設備,同時保存成為文件。
常用參數:
-a –append:附加到已有文件的后面,而不是覆蓋原文件。
-i –ignore-interrupts:忽略中斷信號
–help:在線幫助
–version:顯示版本信息。
命令1 | tee 文件名 | 命令2:把命令1的STUDOUT保存在文件中,然后管道輸入給命令2
使用:
保存不同階段的輸出
復雜管道的故障排除
同時查看和記錄輸出
原創文章,作者:zhanghuanyu,如若轉載,請注明出處:http://www.www58058.com/27286