Io-Redirection

是否可以得出結論,我們可以在 Linux 中引用 4 種類型的輸出

  • November 24, 2018

如果我們不希望它們在執行命令後出現在 CLI 中,是否可以得出結論,我們可以在 Linux 中引用文件的 4 種類型的流輸出?

對文件的可能引用:

  1. 所有流輸出
  2. 只有標準錯誤
  3. 只有標準輸出(包括標準輸出的最終結果)。
  4. stdout 和 stderr(不包括 stdout 的最終結果)。

筆記:

數字 4 的範例可能是find / -type f -name php.ini 2>/dev/null. 據我了解,使用此命令,我們沒有得到標準錯誤,也沒有標準輸出(除了標準輸出的最終結果,在這種情況下是我們搜尋的文件,如果找到的話)。

有兩個輸出流連接到 Unix 系統上的每個程序:標準輸出(stdout,文件描述符 1)和標準錯誤(stderr,文件描述符 2)。這些可以相互獨立地重定向。標準輸入使用文件描述符 0。

  • 要將標準輸出重定向到文件file,請使用>file或更明確的1>file. 替換file/dev/null丟棄數據。
  • 要將標準錯誤重定向到文件file,請使用2>file.
  • 要將標準錯誤重定向到標準輸出的任何位置,請使用2>&1.
  • 要將標準輸出重定向到標準錯誤所在的位置,請使用1>&2.

沒有流或過程的“最終結果”概念。我想發送到標準輸出的任何內容都可能被視為程序的“結果”,除非它還將數據輸出到它自己打開的某個文件或有其他副作用(例如從目錄中取消連結文件,在這種情況下的rm,或處理多個網路連接,在sshd) 的情況下。一個程序還返回一個退出狀態(“成功”為零,“失敗”為非零),這可以被視為該程序的“結果”,但這不一定與程序的輸出流有關。

流也可以在附加模式下重定向,這意味著如果重定向到一個文件,該文件最初不會被截斷,並且流上的任何數據都將附加到文件的末尾。一個人通過使用>>file代替來做到這一點>file

在問題的註釋中,命令

find / -type f -name php.ini 2>/dev/null

給出。這僅重定向(丟棄)標準錯誤。標準輸出流根本不會被重定向,因此在控制台或終端中將完全可見。如果它是管道的中間部分,標準輸出流將被饋送到管道中下一個命令的標準輸入。

所以總而言之,我想說有兩個(不是四個)輸出流。這些可以以各種方式獨立重定向,包括丟棄它們的內容。

引用自:https://unix.stackexchange.com/questions/358022