linux給程式提供三種i/o裝置:
標準輸入( stdin)-0 預設接受來自鍵盤的輸入;
標準輸出( stdout)-1 預設輸出到終端視窗;
標準錯誤( stderr)-2 預設輸出到終端視窗;
由於linux提供給我們的三種標準io裝置並不能滿足所有的情況,於是有了io重定向,將檔案輸出流定向至指定的檔案、終端;當前也可以接收來自於不同的檔案、終端的輸入。
2、輸出重定向
語法:包括標準輸出重定向和標準錯誤輸出重定向。
stdout和stderr可以被重定向到檔案:
命令 操作符號 檔名
支援的操作符號:
> 把stdout重定向到檔案;
2> 把stderr重定向到檔案;
&> 把所有輸出重定向到檔案;
2.1、輸出重定向分類:
:檔案內容會被覆蓋;set –c 禁止將內容覆蓋已有檔案,但可追加》| ;file 強制覆蓋set +c 允許覆蓋;
:原有內容基礎上,追加內容;
2>:覆蓋重定向錯誤輸出資料流;
2>>:追加重定向錯誤輸出資料流
2.2、標準輸出和錯誤輸出各自定向至不同位置;
command > /path/to/file.out 2> /path/to/error.out
2.3、合併標準輸出和錯誤輸出為同乙個資料流進行重定向
&> :覆蓋重定向
&>> :追加重定向
,2>&1 和 >> 2>&1:3、tr命令command > /path/to/file.out 2>&1 (順序很重要)
command >> /path/to/file.out 2>&1
():合併多個程式的stdout
( cal 2007 ; cal 2008 ) > all.txt
選項:tr:轉換和刪除字元;
tr [option]... set1 [set2];
tr命令支援的萬用字元:-c –c --complement:取字符集的補集;
-d --delete:刪除所有屬於第一字符集的字元;
-s --squeeze-repeats:把連續重複的字元以單獨乙個字元表示;
-t --truncate-set1:將第乙個字符集對應字元轉化為第二字符集對應的字元;
3.1、從檔案中匯入stdin[:alnum:]:字母和數字;
[:alpha:]:字母;
[:cntrl:]:控制(非列印)字元 ;
[:digit:]:數字 ;
[:graph:]:圖形字元;
[:lower:]:小寫字母 ;
[:print:]:可列印字元;
[:punct:]:標點符號;
[:space:]:空白字元;
[:upper:]:大寫字母;
[:xdigit:]:十六進製制字元;
(1)使用《來重定向標準輸入;可以是檔案可以是鍵盤輸入;
(2)某些命令能夠接受來自於檔案匯入的stdin;如cat /etc/passwd相當於 #cat < /etc/passwd;對於不能接受來自檔案的輸入重定向時,需要使用《指定輸入重定向。
tr 『a-z』 『a-z』< /etc/issue:該命令會把/etc/issue中的小寫字元都轉換成寫寫字元
tr –d abc < /etc/fstab 刪除fstab檔案中的所有abc中任意字元;
(3)預設接受來自鍵盤的標準輸入:
cat > file
abcdef
按ctrl+d離開,可以使用檔案來代替鍵盤的輸入
(4)接受來自鍵盤的標準輸入,並輸出重定向到乙個檔案中:
cat > filea < fileb
3.2、把多行傳送給stdin;
mail -s 「please call」 admin@magedu.com使用「 《終止詞」命令從鍵盤把多行重導向給stdin,直到 "終止詞" 位置的所有文字都傳送給stdin;有時被稱為就地文字( heretext)。
mail 命令就是預設接收標準輸入的;
please give me a call when you get in. we may need
to do some maintenance on server1.
details when you』re on-site
zhang4、管道end
輸入輸出重定向功能固然強大,但是無法解決將乙個命令的輸入結果直接定向到乙個命令中,作為乙個命令的執行結果,而是只能將輸入結果定向到當前終端或者是指定檔案中;於是就有了管道。
格式:
命令1 | 命令2 | 命令3 | …
說明:管道(使用符號「 |」表示)用來連線命令:
作用:
[root@centos7x ~]#ls /a |& tr 『a-z』 『a-z』將命令1的stdout傳送給命令2的stdin,命令2的stdout傳送到命令3的stdin;
stderr預設不能通過管道**,可利用2>&1 或 |& 實現;
最後乙個命令會在當前shell程序的子shell程序中執行;
用來組合多種工具的功能;ls | tr 'a-z' 'a-z'
ls: cannot access /a: no such file or directory
[root@centos7x ~]#ls /a | tr 『a-z』 『a-z』
ls: cannot access /a: no such file or directory
4.1、管道中常用的檢視命令:
less :一頁一頁地檢視輸入,看完即退出;預設接受標準鍵盤輸入。但是在管道中使用less的時候,會導致無法使用"b"鍵完成回翻。
ls -l /etc | less
mail: 通過電子郵件傳送輸入;預設接收標準鍵盤輸入;
echo 「test email」 | mail -s 「test」 user@example.com
lpr:把輸入傳送給印表機:
echo 「test print」 | lpr -p printer_name
4.2、管道中 - 符號
示例:將 /home 裡面的檔案打包,但打包的資料不是記錄到檔案,而是傳送到 stdout, 經過管道後,將 tar -cvf - /home 傳送給後面的 tar -xvf - , 後面的這個 - 則是取前乙個命令的stdout, 因此,就不需要使用臨時file了。
tar -cvf - /home | tar -xvf -
4.3、重定向到多個目標( tee)
格式:
命令1 | tee [-a ] 檔名 | 命令2
解釋:
把命令1的stdout儲存在檔案中,做為命令2的輸入;-a 追加。
功能:
儲存不同階段的輸出;
複雜管道的故障排除;
同時檢視和記錄輸出;
演示:
重定向和管道
重定向和管道 第 3 章 命令列簡介 程序 包括圖形應用程式,但不包括絕大多數守護程式 至少使用三個檔案描述符 標準輸入 標準輸出和標準錯誤輸出 它們相應的序號是 0 1 和 2。一般來說,這三個描述符與該程序啟動的終端相關聯,其中輸入為鍵盤。重定向和管道的目的是重定向這些描述符。本節中的例項將幫助...
管道和重定向
重定向輸出 ls l 1.txt 這條命令,把本應該在標準輸出 檔案描述符為1 裝置上顯示的內容重定向到了 1.txt 檔案中,而在標準輸出中不會有任務顯示 如果當前目錄下,1.txt檔案存在,則新內容會覆蓋1.txt裡的所有內容.不存在則會在當前目錄中新建乙個1.txt ls l 2.txt 這條...
管道和重定向
重定向 將標準輸出重定向到檔案 覆蓋 如 echo wudi outfile 將標準輸出重定向到檔案 追加到後面 如 echo jiaying outfile 2 將標準錯誤重定向到檔案 覆蓋 2 1 將標準輸出和標準錯誤結合 重定向標準輸入,如 grep root etc passwd 在pass...