linux標准輸入輸出與重定向


原文:http://blog.sina.com.cn/s/blog_8333cf8f0100vzzl.html##1

1. 標准輸入輸出和錯誤

   linux下使用標准輸入文件stdin和標准輸出文件stdout,來表示每個命令的輸入和輸出,還使用一個標准錯誤輸出文件stderr用於輸出錯誤信息。這三個標准輸入輸出系統缺省與控制終端設備相聯系在一起。

因此,在標准情況下,每個命令通常從它的控制終端中獲取輸入,將輸出打印到控制終端的屏幕上。但是也可以重新定義程序的標准輸入文件stdin和標准輸出文件stdout,將它們重新定向。最基本的用法是將它們重新定義到一個文件上,從一個文件獲取輸入,輸出到另外的文件中等。標准輸入文件stdin,通常對應終端的鍵盤;標准輸出文件stdout和標准錯誤輸出文件stderr,這兩個文件都對應終端的屏幕。進程將從標准輸入文件中得到輸入數據,將正常輸出數據輸出到標准輸出文件,而將錯誤信息送到標准錯誤文件中。

2. 文件描述符

   文件描述符是從0開始的整數,指向與進程相關的特定數據流。當進程啟動時,通常打開三個文件描述符,分別對應三種標准的I/O:標准輸入(文件描述符0),標准輸出(文件描述符1),標准錯誤(文件描述符2)。

1)標准輸入(STDIN):它是命令的輸入,缺省和終端的鍵盤關聯

2)標准輸出(STDOUT):它是命令的輸出,缺省和終端的屏幕關聯

3)標准錯誤(STDERR):它是命令的錯誤信息輸出,缺省也和終端的屏幕關聯

4)如果進程打開了額外的文件進行輸入和輸出,則其被設置為下一個可用的文件描述符,從3到9

3. 文件重定向

   在執行命令時,命令的標准輸入、輸出和錯誤信息是和問價描述符0、1、2關聯的,而文件描述符0、1、2缺省和終端關聯。如果希望命令從文件中讀取標准輸入或則希望命令的標准輸出寫到文件而不是屏幕,就需要使用文件重定向。

4. 重定向標准輸出(輸出重定向)

 1)CMD > filename:把CMD命令的標准輸出重定向到一個文件中(如果文件存在,其內容將被覆蓋)

 2)CMD >> filename:把CMD命令的標准輸出重定向到一個文件中(追加文件尾部)

 3)> myfile      :創建一個空文件,如果文件存在則清空該文件

 4)舉例:ls -l | grep ^d >>files.out //把當前目錄下的子目錄的列表寫到文件files.out中

         >sql.log                    //清空sql.log

5. 重定向標准輸入(輸入重定向)

 1)CMD < filename:以filename文件作為CMD命令的標准輸入

 2)CMD << DELIMITER:從標准輸入中讀入輸入,知道遇到DELIMITER分解符。

 3)舉例:sort < grade.txt //對文件grade.txt進行排序(sort)

 4)CMD <filename實際上是和CMD 0<filename等效,CMD << filename和CMD 0 <<filename 等效

6. 重定向標准錯誤(錯誤信息重定向)

 1)CMD 2> filename:把CMD命令的標准錯誤重定向到一個文件中(如果文件存在,其內容將被覆蓋)

 2)CMD 2>> filename:把CMD命令的標准錯誤重定向到一個文件中(追加文件尾部)

 3)舉例:find / -name "*.tmp" -exec rm -rf {}; 2>/dev/null //把命令的錯誤信息輸出丟棄


免責聲明!

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



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