程序包含指令和數據,經常需要讀入數據和輸出數據
打開的文件都有一個fd:file descriptor(文件描述符)
用nano打開一個文件,查看其PID
0,1,2就是所謂的文件描述符。
在Linux里輸入輸出和錯誤都由這三個描述符來表示
標準輸入(STDIN) -0 默認接受來自鍵盤的輸入
標準輸出(STDOUT)-1 默認輸出到終端窗口
標準錯誤(STDERR)-2 默認輸出到終端窗口
我們可以把本來默認顯示到終端窗口的輸出內容輸出到自己指定的終端或文件中,這就是標準輸出的重定向
如果目標文件存在會覆蓋目標文件的內容,如果目標文件不存在,自動創建。如果我們想要保留原有文件內容,可以是用“>>”把重定向的內容追加到指定的文件中
有時候不小心輸入錯誤的命令,會在終端設備上輸出錯誤信息,這時如果我們用“>”符號,發現輸出的錯誤信息并沒有重定向到指定的文件中,如果我們想要把輸出的錯誤信息重定向,那么可以使用“2>”符號,這就叫做標準錯誤的重定向。與標準輸出重定向類似,這種輸出也會覆蓋源文件,如果想要把輸出的內容追加到指定文件中,需要使用“2>>”符號
為了防止誤操作導致有用的文件被覆蓋,我們可以使用set -C,禁止將內容覆蓋已有文件,但可追加強制覆蓋:“>|”,set +C: 允許覆蓋。只針對當前終端有效。
如果一條命令有一部分是正確的有一部分是錯誤的,無論正確的輸出結果還是錯誤的輸出結果,都想要重定向到新的文件中,那么我們需要使用“&>”或“>”和“2>&1”配合使用,如果想要追加,只需要把“>”改成“>>”即可。
也可以同時把兩條命令的標準輸出重定向到一個文件中,
():合并多個程序的STDOUT ( cal 2007 ; cal 2008 ) > all.txt
通過重定向,可以實現把不同文件中的內容合并到同一個文件中
標準輸入的重定向
有些命令需要輸入數據,一般需要我們手工通過鍵盤輸入數據,但也可以通過標準輸入的重定向把文件中的數據輸入到計算機中
利用標準輸入的重定向發送郵件
首先把郵件內容寫入到一個文件中
多行重定向
tr命令——轉換或刪除字符
tr – 轉換和刪除字符
tr [OPTION]… SET1 [SET2]
選項:-c或——complerment:取字符集的補集
-d或——delete:刪除所有屬于第一字符集的字符
-s或—squeeze-repeats:把連續重復的字符以單獨一個字符表示
-t或–truncate-set1:將第一個字符集對應字符轉化為第二字符集對應的字符
使用<來重定向標準輸入
某些命令能夠接受從文件中導入的STDIN: $ tr ‘a-z’ ‘A-Z’< /etc/issue
該命令會把/etc/issue中的小寫字符都轉換成寫寫字符并輸出
tr –d abc < /etc/fstab 刪除fstab文件中的所有abc中任意字符
管道(使用符號“|”表示)用來連接命令
命令1 | 命令2 | 命令3 | …
將命令1的STDOUT發送給命令2的STDIN,命令2的STDOUT發送到命令3的STDIN
STDERR默認不能通過管道轉發,可利用“2>&1”或“|&” 實現
最后一個命令會在當前shell進程的子shell進程中執行
用來組合多種工具的功能 ls | tr 'a-z' 'A-Z'
$命令1 | tee 文件名 | 命令2
把命令1的STDOUT保存在文件名中,然后管道輸入給命令2使用:
保存不同階段的輸出
復雜管道的故障排除
同時查看和記錄輸出
原創文章,作者:M20-16劉國新,如若轉載,請注明出處:http://www.www58058.com/28338