Linux標準I O和重定向

2021-08-20 06:36:41 字數 1088 閱讀 4225

執行乙個shell命令時,通常會自動開啟三個標準檔案,即標準輸入檔案(stdin),檔案描述符為0,通常對應終端的鍵盤;標準輸出檔案(stdout),檔案描述符為1和標準錯誤輸出檔案(stderr),檔案描述符為2,這兩個檔案都對應終端的螢幕。

標準i/o和重定向

$ ls,命令列讀取執行鍵盤敲擊的文字流「ls\n」,得到結果a.txt。這時結果會輸出到螢幕上,顯示出來。如果你不想讓文字流流到螢幕,而是流到另乙個檔案,可以採用重新定向的機制。例如:

$ ls >b.txt,執行後螢幕上並沒有顯示結果,而在b.txt檔案中可以看到輸出的結果。這種重定向每次會重寫覆蓋b.txt中的內容,如果你不想覆蓋已有的內容,而是將結果新增到檔案的末尾,就使用$ ls >> b.txt命令。

上面這些命令都是將標準輸出重定向到某個地方,但是如果出現標準錯誤,結果仍然會流到螢幕上。例如,cd到乙個不存在的目錄,如果使用cd test > c.txt命令,螢幕上會顯示標準錯誤。那麼怎樣將標準錯誤也重定向到某一地方呢,可以使用下面命令。

cd test >& c.txt,執行後錯誤資訊就會被匯入到c.txt檔案中。

易混淆的地方

2>1,表示將標準錯誤重定向到檔案1中,2>&1,表示將標準錯誤重定向到標準輸出中。這兩個符號放到命令結束處。假如你啟動某個go程式,希望將執行的結果都儲存在nohup.out檔案中。

$ go run main.go 2>&1 | tee -a nohup.out,其中tee命令用於將資料重定向到檔案,另一方面還可以提供乙份重定向資料的副本作為後續命令的stdin,簡單的說就是把資料重定向到給定檔案和螢幕上。

注意:此命令存在快取機制,每1024個位元組將輸出一次,若從管道接收輸入資料,緩衝區滿,才將資料轉存到指定的檔案中。

參考文章

linux文字流和標準輸入、標準輸出、標準錯誤與重定向介紹

linux指令碼之》/dev/null 2>&1,以及2>1 vs 2>&1

c c 標準IO重定向

這個對oj上做題很有用。oj基本都是用標準輸入輸出 usaco除外 但如果你在除錯的時候也都是從控制台輸入,那就太浪費寶貴的時間了。我們可以重定向標準輸入,除錯的時候從檔案讀,提交時從標準輸入讀。在c語言中,方法比較簡單。使用函式freopen freopen data.in r stdin fre...

Linux 基本I O重定向

在我們設定定時任務的時候經常會使用標準輸出和標準錯誤輸出。這個在linux是乙個非常重要的概念,而且這個很有用。程式應該有資料庫的 端 資料的目的端,以及報告問題的地方,它們被稱為標準輸入 標準輸出以及標準錯誤輸出。程式啟動的時候,預設情況下,標準輸出 輸入都會已經開啟,且已準備好供其使用。我們使用...

Linux 基本I O重定向

在我們設定定時任務的時候經常會使用標準輸出和標準錯誤輸出。這個在linux是乙個非常重要的概念,而且這個很有用。程式應該有資料庫的 端 資料的目的端,以及報告問題的地方,它們被稱為標準輸入 標準輸出以及標準錯誤輸出。程式啟動的時候,預設情況下,標準輸出 輸入都會已經開啟,且已準備好供其使用。我們使用...