初學Linux之標準I/O和管道

標準輸入和輸出

程序是由指令+數據組成
程序的數據流有三種:

輸入數據流:<–標準輸入(stdin),一般默認是鍵盤
輸出數據流:–>標準輸出(stdout),一般默認到終端窗口
錯誤輸出流:–>標準錯誤(stderr),一般默認到終端窗口

標準輸入:0
標準輸出:1
錯誤輸出:2

I/O重定向:改變默認位置

輸出重定向將標準輸出(stdout)和標準錯誤(stderr)重定向到指定位置

格式: 命令 操作符號 文件名

支持的操作符號:
> :把標準輸出(stdout)重定向到文件,會覆蓋原文件內容
>> :把標準輸出(stdout)重定向到文件,會在原有內容基礎上,追加內容

說明:上面是講ll顯示的結果輸出重定向到文件file中,使用>時,file文件被覆蓋了,使用>>時,原文件file和重定向的內容都顯示了,是追加內容

2> :把標準錯誤(stderr)重定向到文件,會覆蓋原內容
2>>:把標準錯誤(stderr)重定向到文件,會在原內容基礎上,追加內容

說明:將命令執行的錯誤結果顯示在file文件中,使用2>時,覆蓋了原文件file輸出的,使用2>>時,原文 件內容和標準錯誤都顯示了,是追加內容

&>:把所有的輸出重定向到文件,不管對錯都輸出到指定位置,覆蓋輸出
&>>:把所有的輸出重定向到文件,不管對錯都輸出到指定位置,追加輸出

說明:使用&>或者&>>時,執行ll時,是標準輸出,lls是標準錯誤,但是不管是哪個的輸出都重定向到file 文件中,2>&1和&>,&>>效果一樣,2>&1是老版本使用,要在最后使用,才有效果。

command >/path/toshmefile 2>&1
command>>/path/to/somefile 2>&1
理解:A和B,將A輸出到B上,如果對了,就正常輸出到B上,如果錯誤了,內容還是輸出在B上

set -C:禁止將內容覆蓋已有的文件,但是可以追加強制覆蓋 :
set +C:允許覆蓋

合并多個程序的標準輸出
(command ;command)>file

說明:將ll和echo shell的標準輸出一起重定向到file文件中,此法只能用于標準輸出,
標準錯誤不能使用

tr:轉換和刪除字符

tr [option] .. SET1 [SET2]==>[]非必選

選項:
-c:取字符的補集==>取代所有不屬于第一字符集的字符
-d:刪除所有屬于第一個字符集的字符
-s:把連續重復的字符以單獨一個字符表示
-t:將第一個字符集對應字符轉換為第二字符集對應的字

管道使用符號|來連接命令
command1 |command2 |command3…
1.將命令1的標準輸出發送給命令2,作為命令2的標準輸入,命令2的標準輸出發給command3,作為command3 的標準輸入….
2.標準錯誤默認不能通過管道轉發,但是可以利用2>&1或者|&實現
3.最后一個命令會在當前shell 進程的子shell 進程中執行
4.可以組合多種工具

tee命令:

command1 |tee filename | command2
把command1的標準輸出保存在文件中,然后管道輸入給command2

特點:

1.保存不同階段的輸出
2. 復雜管道的故障排除
3.同時查看和記錄輸出

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/94770

(0)
范兒范兒
上一篇 2018-04-03
下一篇 2018-04-03

相關推薦

欧美性久久久久