Io-Redirection
是否可以得出結論,我們可以在 Linux 中引用 4 種類型的輸出?
如果我們不希望它們在執行命令後出現在 CLI 中,是否可以得出結論,我們可以在 Linux 中引用文件的 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
給出。這僅重定向(丟棄)標準錯誤。標準輸出流根本不會被重定向,因此在控制台或終端中將完全可見。如果它是管道的中間部分,標準輸出流將被饋送到管道中下一個命令的標準輸入。
所以總而言之,我想說有兩個(不是四個)輸出流。這些可以以各種方式獨立重定向,包括丟棄它們的內容。