標準io和管道

標準I/O和管道

##一,標準輸入和輸出##
程序:指令+數據

讀入數據:Input

輸出數據:Output

打開的文件都有一個fd: file descriptor (文件描述符)

Linux給程序提供三種I/O設備

標準輸入(STDIN)-0 默認接受來自鍵盤的輸入

標準輸出(STDOUT)-1 默認輸出到終端窗口

標準錯誤(STDERR)-2 默認輸出到終端窗口

I/O重定向:改變默認位置
##二,把輸出和錯誤重新定向到文件 ##
STDOUT和STDERR可以被重定向到文件

命令 操作符號 文件名

支持的操作符號包括:

> 把STDOUT重定向到文件

2> 把STDERR重定向到文件

&> 把所有輸出重定向到文件

> 文件內容會被覆蓋

set -C 禁止將內容覆蓋已有文件,但可追加

>| file 強制覆蓋

set +C 允許覆蓋

>> 原有內容基礎上,追加內容

##三,把輸出和錯誤重新定向到文件 ##

2> 覆蓋重定向錯誤輸出數據流

2>> 追加重定向錯誤輸出數據流

標準輸出和錯誤輸出各自定向至不同位置

COMMAND > /path/to/file.out 2> /path/to/error.out

合併標準輸出和錯誤輸出爲同一個數據流進行重定向

&> 覆蓋重定向

&>> 追加重定向

COMMAND > /path/to/file.out 2>&1 (順序很重要)

COMMAND >> /path/to/file.out 2>&1

():合併多個程序的STDOUT

( cal 2007 ; cal 2008 ) > all.txt

#三,tr命令 #

tr 轉換和刪除字符

tr [OPTION]... SET1 [SET2]

選項:

-c –C --complement:取字符集的補集

-d --delete:刪除所有屬於第一字符集的字符

-s --squeeze-repeats:把連續重複的字符以單獨一個字符表示

-t --truncate-set1:將第一個字符集對應字符轉化爲第二字符集對應的字符

[:alnum:]:字母和數字 [:alpha:]:字母 [:cntrl:]:控制(非打印)字符

[:digit:]:數字 [:graph:]:圖形字符 [:lower:]:小寫字母 [:print:]:可打印字符

[:punct:]:標點符號 [:space:]:空白字符 [:upper:]:大寫字母

[:xdigit:]:十六進制字符

四,從文件中導入STDIN

使用 < 來重定向標準輸入

某些命令能夠接受從文件中導入的STDIN

tr ‘a-z’ ‘A-Z’< /etc/issue

該命令會把/etc/issue中的小寫字符都轉換成大寫字符

tr –d abc < /etc/fstab

刪除fstab文件中的所有abc中任意字符

cat > file

mage

wangxiaochun

按ctrl+d離開,可以使用文件來代替鍵盤的輸入

cat < file1 > file2

cat < file1 >> file1

把多行發送給STDIN

使用“<<終止詞”命令從鍵盤把多行重導向給STDIN

直到 終止詞 位置的所有文本都發送給STDIN

有時被稱爲就地文本(heretext)

五,管道

管道(使用符號“|”表示)用來連接命令

命令1 | 命令2 | 命令3 | …

將命令1的STDOUT發送給命令2的STDIN,命令2的STDOUT發送到命令3的STDIN

STDERR默認不能通過管道轉發,可利用2>&1 或 |& 實現

最後一個命令會在當前shell進程的子shell進程中執行

組合多種工具的功能

ls | tr ‘a-z’ ‘A-Z’

less :一頁一頁地查看輸入

ls -l /etc | less

mail: 通過電子郵件發送輸入

echo "test email" | mail -s "test" [email protected]

六,管道中 - 符號

示例

將 /home 裏面的文件打包,但打包的數據不是記錄到文件,而是傳送到 stdout,
經過管道後,將 tar -cvf - /home 傳送給後面的 tar -xvf - , 後面的這個 - 則是取
前一個命令的 stdout, 因此,就不需要使用臨時file了

tar -cvf - /home | tar -xvf -

七,重定向到多個目標(tee)

命令1 | tee [-a ] 文件名 | 命令2

把命令1的STDOUT保存在文件中,做爲命令2的輸入

-a 追加

使用

保存不同階段的輸出

複雜管道的故障排除

同時查看和記錄輸出

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章