本次內容
1.三種I/O設備
2.把I/O從定向入文件
3.命令tr
4.使用管道鏈接命令
5.tee
我們都知道程序是由:指令+數據
讀入數據:Input
輸出數據:output
而打開的文件都有一個fd: file
descriptor (文件描述符)
同時也有三種I/O設備:
標準輸入 0 默認是由接受鍵盤輸入
標準輸出 1 默認是輸出到終端窗口顯示屏
標準錯誤 2 默認是輸出到終端窗口顯示屏
I/O重定向:改變默認位置
標準輸出的不管是錯誤或默認輸出都可以重定向到文件之中它的格式為:
命令 操作符號 文件名
支持符號包括
> 把標準輸出重定向到文件中
2> 把錯誤重定向到文件中
&> 把所有(不管是正確還是標準輸出錯誤)的重定向到文件中
注意:
用重定向符號時> ,2> ,
&> 時原來的文件內容會被覆蓋
在原來基礎上,追加內容 >>
?2>: 覆蓋重定向錯誤輸出數據流
?2>>:
追加重定向錯誤輸出數據流
標準輸出和錯誤輸出各自定向至不同位置
OMMAND >
/path/to/file.out2> /path/to/error.out
合并標準輸出和錯誤輸出為同一個數據流進行重定向
?&>覆蓋重定向
?&>>
追加重定向
?COMMAND
> /path/to/file.out 2>&1 (順序很重要)
?COMMAND
>> /path/to/file.out 2>&1
注意:>>& 排序是錯誤的
標準輸出 <
tr轉換和刪除字符
?tr[OPTION]…
SET1 [SET2]
?選項:
-c–C –complement:取反(除了)
-d–delete:刪除所有屬于第一字符集的字符
-s 連續的壓縮
使用“<<終止詞”命令從鍵盤把多行重導向給STDIN
?
直到終止詞位置的所有文本都發送給STDIN
?有時被稱為就地文
管道
管道(使用符號“|”表示)用來連接命令
命令1 | 命令2 | 命令3 | …
表示用命令1的輸出作為命令2的輸入命令2的輸出作為命令3的輸入
注意:STDERR默認不能通過管道轉發,可利用2>&1 或|& 實現
將/home 里面的文件打包,但打包的數據不是記錄到文件,而是傳送到stdout,經過管道后,將tar -cvf-/home 傳送給后面的tar -xvf-, 后面的這個-則是取前一個命令的stdout,因此,就不需要使用臨時file了
?tar -cvf-/home | tar -xvf-
?命令1 | tee[-a ] 文件名| 命令2
把命令1的STDOUT保存在文件中,做為命令2的輸入
-a 追加
?使用:
?保存不同階段的輸出
?復雜管道的故障排除
?同時查看和記錄輸出
一道很有意思的題目,不用循環,可以用管道
計算1+2+3+..+99+100的總和
原創文章,作者:m25Chronos,如若轉載,請注明出處:http://www.www58058.com/82473