Linux 檔案描述符和重定向

2021-06-27 21:44:58 字數 2646 閱讀 5064

1.預備知識

標準輸入(stdin)、標準輸出(stdout)和標準錯誤(stderr)是編寫指令碼的時候經常使用的,因為輸出的資訊可能是上述的一種。

檔案描述符 是與開啟的某個檔案或者資料流相關聯的整數。檔案描述符0,1,2是系統預留的。

2.例項

echo this is a sample. > temp.txt
可將文字輸出到temp.txt中,是通過截斷檔案的方式,也就是說在echo命令寫入前先將檔案中的內容清空。

echo this is a sample. >> temp.txt
上述命令是追加的方式。

說明重定向之前先了解一下什麼是成功和不成功的命令。

當乙個命令發生錯誤並退出的時候,它會返回乙個非0的值。成功後會返回0。可以通過$?檢視返回的值。

ls

2> out.txt

將錯誤輸出到檔案中。

你也可以這樣:

cmd

2> out.txt 1> temp.txt

將標準錯誤和標準輸出重定向到兩個檔案中。當然,還有更精簡的方式輸出到同乙個檔案中:

cmd

2>&1 out.txt

有時候你並不想儲存錯誤輸出,那就將它引向乙個「黑洞」(/dev/null)吧,就像錯誤輸出沒有產生過一樣。

這個時候,如果你既想把輸出儲存起來,同時又想檢視輸出,怎麼辦呢?

command | tee out.txt | cat -n
這個時候command 的結果會儲存在out.txt中,同時也會通過管道最為標準輸出向下傳遞。cat -n將結果加上行號輸出。

我們也可以使用stdin作為命令引數。只需要將-作為命令的檔名即可。

$ echo who is

this | tee -

who is

this

eho is

this

3.原理

預設的重定向操作符使用標準輸出。因此>等同於1>

4.補充

stdin讀取輸入的命令能以多種方式接受資料。

將檔案重定向到命令,借助重定向,我們可以像使用stdin那樣從檔案中讀取資料。

$ cmd < file
自定義檔案描述符:

建立乙個檔案描述符進行檔案讀取:

$ exec

3# 使用檔案描述符3開啟並讀取檔案

我們可以這樣使用它:

$ echo this

is a test > input.txt

$ exec 3

這就可以在命令中使用檔案描述符3了。

$ cat <&3

this

is a test

如果想再次讀取就不能使用3了,需要再次分配讀取。

建立檔案描述符用於寫入:

$ exec 4>output.txt

$ echo newline > &4

$ cat outline

newline

dev/stdin -> proc/self/fd/0 -> dev/pts/1

標準操作下的輸入輸出,指向了虛擬目錄下當前程序的終端中。

重定向

$ tail -f /var/log/message  > abc
然後掛起。ps檢視一下該程序的程序號是15551.

$ cat /proc/15551/fd/?
可以看到:

/proc/15551/fd/0

-> /dev/pts/1

/proc/15551/fd/1

-> /roor/test/abc #上述命令的重定向輸出檔案

/proc/15551/fd/2

-> /dev/pts/1

/proc/15551/fd/3

-> /var/log/message

/proc/15551/fd/4

-> inotify

重定向就是將鏈結指向執行的檔案。

管道將前面命令的標準輸出作為後面命令的標準輸入。

注意是標準輸出也就是說,在管道傳遞的時候標準錯誤輸出已經被過濾掉了。所以,前面命令的標準錯誤輸出都會列印在終端上.

有很多命令不直接支援標準輸入的形式作為輸入。

$ which find | ls -l
不能輸出find的資訊。使用如下的方式即可。

$ which find | xargs ls -l

linux 檔案描述符和重定向

檔案描述符系統自帶了3個,分別是 0 輸入 1 輸出,預設,省略 2 錯誤輸出重定向一般是 或者 bin bash ls 列印在console,內容如下 root localhost ccc test.sh ls 111.txt 這條命令的結果並沒有列印到控制台上,而是儲存到111.txt裡 ls ...

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

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

玩轉Linux檔案描述符和重定向

原文出處 linux下的檔案描述符是與檔案輸入 輸出相關聯的整數。它們用來跟蹤已開啟的檔案。最常見的檔案描述符是stdin stdout和stderr.我們可以將某個檔案描述符的內容重定向到另乙個檔案描述符中。下面給出一些對檔案描述符進行操作和重定向的例子。1.5.1 預備知識 我們在編寫指令碼時會...