一、标準輸入和标準輸出
1.程式:指令+資料;
資料:
讀入資料:Input
輸出資料:Output
2.打開的檔案都有一個fd:file descriptor(檔案描述符)
3.Linux給程式提供的三種I/O裝置:
标準輸入:0,預設接受來自鍵盤的輸入;
标準輸出:1,顯示器(預設輸出到終端視窗)
标準錯誤輸出:2,顯示器(預設輸出到終端視窗)
二、把标準輸出和标準錯誤輸出重定向到檔案
1.标準輸出和标準錯誤輸出可以被重定向到檔案:
格式:指令 操作符号 檔案名;
支援的操作符号:
>:把标準輸出重定向到檔案;
2>:把标準錯誤輸出重定向到檔案;
&>:把标準輸出和标準錯誤輸出重定向到檔案;
2.輸出重定向:COMMAND > NEW_POS,COMMAND >> NEW_POS;
>:覆寫重定向:檔案不存在,則會自動建立;檔案如果有内容,則會覆寫;
eg:ls > /testdir/is.log
>>:追加重定向,在原有内容基礎上,追加内容;新内容會追加至目标檔案尾部;
eg:uname -r >> /testdir/is.log
set -C:禁止将内容覆寫已有檔案,但可追加;強制覆寫:>|;
set +C:允許覆寫;
2>:覆寫重定向标錯誤輸出資料流;
eg:aaaaa 2> /testdir/is.log
2>>:追加重定向錯誤輸出資料流;
eg:bbbbb 2>> /testdir/is.log
标準輸出和錯誤輸出各自定向至不同位置:
COMMAND > /path/to/somfile 2> /path/to/err.out
eg:ls /boot /ddddd /testdir/f1 2> /testdir/f2
合并标準輸出和錯誤輸出為同一個資料流進行重定向:
&>:覆寫重定向;
&>>:追加重定向;
COMMAND &> /path/to/file.out;
eg:ls /boot /ddddd &> /testdir/all.log
COMMAND &>> /path/to/dile.out
eg:ls /boot /ddddd &>> /testdir/all.log
3.():合并多個程式的标準輸出
eg:(pwd;ls) > /testdir/all.log
三、輸入重定向:<
1.tr指令
tr:轉換或删除字元;
文法:tr [OPTION]...SET1 [SET2]
字元集1:指定要轉換或删除的原字元集。當執行轉換操作時,必須使用參數“字元集2”指定轉換的目标字元集。但執行删除操作時,不需要參數“字元集2”;
字元集2:指定要轉換成的目标字元集。
OPTION:
-c:取字元集的補集(也就是取反);
-d:删除所有屬于第一字元集的字集;
-s:把連續重複的字元以單獨一個字元表示;也可以用-s來轉換字元(等同于tr [a-z] [A-Z] < /etc/issue);
-t:将第一個字元集對應字元轉化為第二字元集對應的字元;
字元集表示方法:
[:lower:]:任意小寫字母;
[:upper:]:任意大寫字母;
[:alpha:]:任意大小寫字母(不區分大小寫);
[:alnum:]:任意數字和字母;
[:blank:]:水準空白字元;
[:space:]:水準或垂直空白字元;
[:punct:]:标點符号;
[:print:]:可列印字元;
[:cntrl:]:控制(非列印)字元;
[:graph:]:圖形字元;
[:xdigit:]:十六進制字元;
速記符含義八進制方式
\b Ctrl-H 倒退符\010
\f Ctrl-L 走行換頁\014
\n Ctrl-J 新行\012
\r Ctrl-M 回車\015
\t Ctrl-I tab鍵\011
eg1:tr 'abc' 'xyz':這裡不是将abc轉換成xyz,是對應轉換,a轉換成x,b轉換成y,c轉換成z;
eg2:tr 'abc' 'xy':a轉換成x,b轉換成y,c轉換成z;由于c沒有對應轉換項,會在xy後自動加個y來形成對應關系;
eg3:tr 'ab' 'xyz'::a轉換成x,b轉換成y,c轉換成z;由于沒有與z形成對應關系的項,它不會自動添加項;
eg4:tr 'a-z' 'A-Z' < /etc/issue;将檔案中的小寫字母轉換成大寫字母;
eg5:tr 'a-z' 'A-Z' < /etc/issue > f1;将檔案中的小寫字母轉換成大寫字母并重定向到f1檔案中;
eg5:tr -s
eg6:tr -d
【注意】這裡,凡是在file檔案中出現的'S','n','a','i','l'字元都會被删除!而不是緊緊删除出現的"Snail”字元串。
eg7:tr -c
四、多行标準輸入重定向
1.使用“<<終止詞”指令從鍵盤把重導向給标準輸入;
eg1:
eg2:用來發郵件
五、管道
1.管道(使用符号“|”表示)用來連接配接指令;
指令1 | 指令2 | 指令3 | ...
1.1.将指令1的标準輸出送給指令2的标準輸入,指令2的标準輸出送給指令3的标準輸入;
注:最後一個指令會在目前shell程序的子shell程序中執行;
eg1:ls | tr 'a-z' 'A-Z'
eg2:echo centos7 | passwd --stdin wu > /dev/null
1.2.标準錯誤輸出預設不能通過管道轉發,可利用2>&1或|&實作;
eg: ls aaaaa |& tr 'a-z' 'A-Z'
六、重定向到多個目标(tee)
tee指令:從标準輸入讀取并寫入标準輸出和檔案
1.指令1 | tee 檔案名 | 指令2
把指令1的标準輸出儲存在檔案名中,然後管道輸入給指令2;
2.使用:
2.1.儲存不同階段的輸出;
2.2.同時檢視和記錄輸出
eg:who | tee f1 | tr 'a-z' 'A-Z'
本文轉自wzcLINUXER 51CTO部落格,原文連結:http://blog.51cto.com/yacheng0316/1951921,如需轉載請自行聯系原作者