1、標準輸入和標準輸出
git
1.程序:指令+數據;
shell
數據:
centos
讀入數據:Input
ide
輸出數據:Output
centos7
2.打開的文件都有一個fd:file descriptor(文件描述符)
spa
3.Linux給程序提供的三種I/O設備:
3d
標準輸入:0,默認接受來自鍵盤的輸入;
orm
標準輸出:1,顯示器(默認輸出到終端窗口)
blog
標準錯誤輸出:2,顯示器(默認輸出到終端窗口)
進程
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
3、輸入重定向:<
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
4、多行標準輸入重定向
1.使用「<<終止詞」命令從鍵盤把重導向給標準輸入;
eg1:
eg2:用來發郵件
5、管道
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'
6、重定向到多個目標(tee)
tee命令:從標準輸入讀取並寫入標準輸出和文件
1.命令1 | tee 文件名 | 命令2
把命令1的標準輸出保存在文件名中,而後管道輸入給命令2;
2.使用:
2.1.保存不一樣階段的輸出;
2.2.同時查看和記錄輸出
eg:who | tee f1 | tr 'a-z' 'A-Z'