0998 檔案描述符及重定向

2021-09-02 02:24:04 字數 2198 閱讀 2056

1、介紹

檔案描述符是與檔案輸入、輸出相關的整數。它們用來跟蹤已開啟的檔案。

最常見的檔案描述符是stdin、stdout和stderr。

我們甚至可以將某個檔案描述符的內容重定向到別乙個檔案描述符中。

下面給出一些對檔案描述符進行操作和重定向的例子。

在編寫指令碼時會頻繁使用標準輸入、標準輸出、標準錯誤。

通過內容把內容過濾將輸出重定向到檔案是我們平時裡的基本任務之一。

當命令輸出文字時,這些輸出文字可能是錯誤資訊,也可能是正常輸出資訊。

單靠檢視輸出的文字本身,我們沒法區別那些是正常,那些是錯誤。

不過我們可以通過檔案描述符解決這個問題,將那些與特定描述符關聯的文字提取出來。

檔案描述符是與某個開啟的檔案或資料流相關聯的整數。

檔案描述符0、1及2是系統預留的。

0-------stdin(標準輸入)

1-------stdout(標準輸出)

3-------stderr(標準錯誤)

2、將輸出文字重定向或儲存到乙個檔案中

echo "this is sample text 1">temp.txt

3、將檔案追加到目標檔案中,

echo "this is sample text 2">>temp.txt

4、什麼是標準錯誤以及如何對它重定向。當命令輸出錯誤是,stderr資訊就會被列印出來,如:

ls +

ls: cannot access +: no such file or directory

+是乙個非法引數,因此將返回錯誤資訊。

成功和不成功的命令

當乙個命令發生錯誤時,它會返回乙個非0的退出狀態;而當命成功完成時,它會返回數字0;

退出狀態可以從特殊變數$?中獲取,在命令中立即執行echo $?,就可以列印出退出狀態。

下面的命令會將stderr檔案列印到螢幕上,而不是檔案中。(因為沒有stdout的輸出,所以out.txt沒有內容);

ls + > out.txt

如果是如下這樣,就有輸出內容

ls >out.txt

下面的命令中,我們將stderr重定向到out.txt

ls + 2>out.txt

還可以把stderr單獨重定向到乙個檔案,將stdout重定向到另乙個檔案

cmd 2>stderr.txt 1>stdout.txt

5、還可以利用下面的這個更好的方法將stderr轉換成stdout,使得stderr和stdout都被重定向到乙個檔案中

cmd 2>&1 output.txt

6、如果你不想讓終端中充斥著有關stderr的繁枝末節,可以將stderr的輸出重定向到/dev/null,保證一切都會清除的乾乾淨淨。

7、下面的**中,tree命令接收到來自stdin的資料。它將stdout的乙份副本寫入檔案out.txt中。

同時將別乙份副本作為後續命令的stdin。命令cat -n將從stdin中接收到的每一行資料前加上行號並寫入stdout:

cat a* |tree out.txt |cat -n

cat: a1: permission denied

1a12a1

cat out.txt

a1a1

注意:cat: a1: permission denied並沒有在檔案內容中出現。這是因為這些資訊屬於stderr,而tree只能從stdin中讀取。

預設情況下,tree命令將檔案覆蓋,但它提供了乙個-a選項,用於追加內容。

cat a* | tee -a out.txt | cat -n

8、>和》前者是清內容,在寫入;後者是追加內容,當使用重定向操作符時,輸出內容不會列印在終端中,而是導向到檔案中。

----------------------------

>等同於1>

>>等同於1>>

---------------------------

/dev/null是黑洞

9、將檔案重定向到命令

cmd < file

10、《操作符用於從檔案中讀到stdin。

11、建立檔案描述符

exec 3 intut.txt

exec 3 output.txt

echo newline >&4

cat output.txt

建立乙個檔案描述符用於追加寫入

exec 5>>input.txt

cat input.txt

檔案描述符 輸出重定向

對於核心而言,所有開啟的檔案都是通過檔案描述符引用的。那麼檔案描述符又是什麼呢?通過上圖,我們可以清楚的認識到檔案描述符就是從0開始的小的非負整數,核心用以標識乙個特定程序正在訪問的檔案。當開啟乙個檔案或建立乙個檔案,核心向程序返回乙個檔案描述符。linux程序預設情況下會有三個預設開啟的檔案描述符...

檔案描述符與重定向

1 標準輸出和標準錯誤重定向 2 利用 操作符將檔案讀入stdin 3 自定義檔案描述符 4 tee命令 1 例如echo命令就是將指定的字串送到標準輸出,那麼我們就可以結合echo命令將指定字串傳送到指定的檔案 在這裡就是將檔案描述符stdout 1 的內容通過重定向操作符重定向到了test.tx...

Linux 檔案描述符,檔案重定向

檔案重定向 先來說說檔案 當我們開啟乙個檔案時,作業系統為了管理該檔案,會建立乙個資料結構來描述它,記錄他的各種資訊,這個資料結構就是file結構體,乙個file結構體就表示了乙個已經開啟的檔案。程序中使用open函式開啟某個檔案,前提是需要我們將程序與檔案聯絡起來。所以程序pcb中就有乙個 fil...