linux輸入輸出、重定向、管道


本篇講述linux系統的輸入輸出、管道和重定向。

1. liunx的輸入輸出

一個linux系統要想發揮作用,就要有輸入輸出,這樣才可以與外界交互。

類型 設備文件名 文件描述符 設備名稱 說明 備注
標准輸入 /dev/stdin 0 鍵盤 程序默認的輸入設備  
標准輸出 /dev/stdout 1 當前屏幕 程序默認的輸出設備  
標准錯誤輸出 /dev/stderr 2 當前屏幕 程序默認的錯誤信息輸出設備  

 

 

 

 

 

2. 輸入輸出的重定向

有些情況,比如我想把程序的日志輸出保存起來,以便后續查看。默認輸出是屏幕,而屏幕是有大小的,超了顯示的區域之前的日志就不可看了。這時就需要重新定義它的輸出位置,就有了重定向。
很容易理解,有輸出重定向,就有輸入重定向。那么輸入輸出的重定向怎么定義呢?請看下表:

類型 操作符 例子 說明
輸入重定向 < tac < 123.txt 把123.txt里的內容輸入到tac命令,不需要再從鍵盤接受字符
標准輸出重定向 > ls / > 123.log 把ls / 的輸出重定向到123.log文件中,123.log不存在則創建,123.log存在則內容覆蓋
標准錯誤輸出重定向 2> ls /error 2> 123.log 把ls /error的錯誤輸出重定向到123.log文件中,123.log不存在則創建,123.log存在則內容覆蓋
輸出重定向合並 &>或者2>&1 ls / /error &> 123.log 把ls / /error的標准輸出和標准錯誤輸出都重定向到123.log文件中,123.log不存在則創建,123.log存在則內容覆蓋
追加 >>   把上述>變成>>,文件存在則追加到末尾,避免上述文件存在被覆蓋的情況

 

 

 

 

 

 

  

 

補充說明一下:
合並重定向的2>&1這種方式,看下面的例子:

發現把2>&1放置在前面的話,錯誤輸出並沒有保存到456.log中,而還是打印在屏幕上。把2>&1放置在后面的話,錯誤輸出就保存到123.log中,而沒有打印在屏幕上。這是為什么呢?
解答:2>&1,它是把錯誤輸出重定向為標准輸出。位置不同邏輯順序就不同。
放置在前面的話,就先把2轉成1,而1默認是在屏幕上顯示的,然后再定義1保存到文件中,而這時2已經轉化為1在屏幕中輸出過了。
放置在后面的話,就先定義1保存到文件中,然后把2變成1,而此時1已經定義重定向到文件中了。

3. 管道

管道是linux中一個重要的概念,在linux中用“|”表示,他可以把前一個命令的輸出結果當成下一個命令的輸入,經過組合,可以方便的得出我們想要的結果。
比如,我想查找/tmp目錄下3分鍾之內創建的名字包含“abc”的文件或目錄,則可以用:

它就把find出來的結果當成grep的輸入了。

這里也補充說明一下:管道只能接受標准輸出,而不能接受標准錯誤輸出。如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM