一、文件描述符 文件描述符是一個非負的整數,Linux 中每個運行中的程式(進程),都有一些與之關聯的文件描述符,你可以使用文件描述符來訪問打開的文件或設備。在標準 I/O 庫中,與文件描述符對應的是流。當一個程式開始運行時,它一般會有 3 個已經打開的文件描述符,分別對應三個文件流: 顯然,還有其 ...
一、文件描述符
文件描述符是一個非負的整數,Linux 中每個運行中的程式(進程),都有一些與之關聯的文件描述符,你可以使用文件描述符來訪問打開的文件或設備。在標準 I/O 庫中,與文件描述符對應的是流。當一個程式開始運行時,它一般會有 3 個已經打開的文件描述符,分別對應三個文件流:
文件描述符 | 流 |
0 | 標準輸入流(stdin) |
1 | 標準輸出流(stdout) |
2 | 標準錯誤流(stderr) |
顯然,還有其他的文件描述符,這裡暫時不做討論。一般情況下,一個程式打開時,會去讀取標準輸入,將結果寫入標準輸出,將錯誤結果寫入標準錯誤輸出(預設的標準輸入、標準輸出和標準錯誤輸出都是終端):
如圖上圖所示,cat 命令後面沒有接參數,則預設讀取標準輸入,將結果輸出到標準輸出。很多情況下,我們不希望從標準輸入獲取程式輸入,也不想將程式結果寫入標準輸出,將錯誤結果寫入到標準錯誤輸出,這時就可以使用重定向來完成相應的需求。
二、輸出重定向
輸出重定向使用 > 或 >> 操作符。其中 > 操作符表示覆蓋輸出;>> 操作符表示將輸出內容附加到文件尾。
2.1 將標準輸出重定向到文件
command > file command >> file
使用 command > file 命令,可以將 command 的標準輸出修改為 file,若當前目錄下沒有 file 文件,則會創建該文件;若已經存在 file 文件,則會覆蓋 file 文件,file 文件原本的數據將會丟失。
使用 command >> file 命令,可以將 command 的標準輸出修改為 file,若當目錄下沒有 file 文件,則創建該文件;若已經存在 file 文件,則將程式結果附加到文件尾。
同樣的,以 cat 命令為例:
cat > newfile My name is tongye How are you ^D # Ctrl + D,結束輸入 cat >> newfile I am fine ^D
結果如下:
2.2 將標準錯誤輸出重定向到文件
command 2> file command 2>> file
使用 2> 或 2>> 來對標準錯誤輸出進行重定向。
2.3 將標準輸出和標準錯誤輸出重定向到不同文件
command > file1 2> file2
該命令將標準輸出和標準錯誤輸出分別重定向到不同文件。
2.4 將標準輸出和標準錯誤輸出重定向到同一文件
command > file 2>&1
該命令將標準輸出和標準錯誤輸出重定向到同一個文件。
三、輸入重定向
使用 < 操作符進行輸入重定向:
command < file
該命令可以將 command 的標準輸入改為從文件 file 輸入。