2021-05-12 14:32:11
Linux基礎:檔案描述符與重定向
檔案描述符簡介:檔案描述符在形式上是一個非負整數,每一個檔案描述符會與一個開啟檔案相對應,核心利用檔案描述符來存取檔案,最廣為人知的檔案描述符有stdin(標準輸入),stdout(標準輸出),stderr(標準錯誤),系統分別事先為它們保留了三個檔案描述符0,1,2,我們也可以通過特殊命令給我們的的檔案指定檔案描述符。
重定向的意思:Linux中,IO重定向是將某一個檔案描述符的內容轉移到另一個指定的檔案描述符中,通常與檔案描述符有關。
最常用的我們可以將標準輸出的內容重定向到指定檔案中。通過重定向操作符(>和>>)可以將輸出傳送到檔案中,而不是終端。>和>>略有差異,儘管兩者都可以將文字重定向到檔案,但是前者會清空檔案,再寫入內容,後者會將內容追加到現有的檔案的尾部,預設情況下,重定向操作符針對的是標準輸出,所以>等同於1>,類似的>>等同與1>>。
1:標準輸出和標準錯誤重定向
2:利用<操作符將檔案讀入stdin
3:自定義檔案描述符
4:tee命令
1:例如echo命令就是將指定的字串送到標準輸出,那麼我們就可以結合echo命令將指定字串傳送到指定的檔案:
在這裡就是將檔案描述符stdout(1)的內容通過重定向操作符重定向到了test.txt檔案裡。
在處理錯誤時,來自stderr的輸出被傾倒入了檔案/dev/null中,/dev/null是一個特殊的裝置檔案,他會丟棄接收到的任何資料。也常被稱為黑洞,因為但是進入其中的資料都將一去不復返。同樣的我們可以將標準錯誤輸出也重定向到檔案中,以供儲存。
接下來這個命令會將stderr文字列印到螢幕上,而不是重定向到文字中,因為預設情況下重定向操作符針對的是標準輸出,而這裡stdout並沒有輸出,而是stderr輸出
在重定向操作符前指定stderr檔案描述符,就可以重定向stderr了
2: 從stdin讀取輸入的命令能以多種方式接收資料:
借助小於符號,我們可以像使用stdin那樣讀取檔案中資料: cmd<file; (cmd命令需要檔案資料)
還有使用管道時,經常將前一個命令的標準輸出重定向成下一個命令的標準輸入,cmd1 | cmd2。
3:使用exec命令建立一個用於讀取的檔案描述符(符號&表明後邊的數位是一個檔案描述符):
建立一個用於寫入的檔案描述符:
4:標準輸出既可以被重定向到檔案,也可以通過管道傳入其他程式,但不能同時進行,命令tee可以實現這個操作,tee命令從stdin讀取,將資料重定向到檔案中,然後還將資料重定向到標準輸出(stdout)中:cmd | tee file1 file2 | othercmd
例如ls命令列出和cat命令檢視檔案內容的結果均為標準輸出:
-a 指定以追加的方式儲存到檔案
本知識點需了解exec命令,以及對檔案的開啟模式,標準輸入輸出的初步了解。
相關文章