檔案描述符及其重定向的學習筆記

2021-07-04 10:22:23 字數 1362 閱讀 9400

linux將每個物件當做檔案處理。這包括輸入和輸出過程。linux用檔案描述符來標識每個檔案物件。檔案描述符是乙個非負整數,可以唯一標識會話中開啟的檔案。每個過程最多有9個檔案描述符。

1 標準檔案描述符

* 標準輸入stdin:0

stdin檔案描述符代表shell的標準輸入。對於終端來說,標準輸入是鍵盤。

* 標準輸出stdout:1

stdout檔案描述符代表標準的shell輸出。在終端上,標準輸出是終端顯示器。

* 標準錯誤stderr:2

shell通過特殊的檔案描述符來處理錯誤訊息。預設情況下,stderr檔案描述符和stdout檔案描述符指向同樣的地方。就是說,預設情形下,錯誤訊息輸出到顯示器上。

2 重定向錯誤

*只重定向錯誤 2>

#ls -al badfile 2> test4

*重定向錯誤和資料

#ls -al badfile  2> test6 1>test7

#ls -al badfile &> test7

3 指令碼中重定向輸出

*臨時重定向:檔案描述符之前加and符(&)

*永久重定向:用exec命令告訴shell在指令碼執行期間重定向某個特定檔案描述符。

4 指令碼中重定向輸入

用exec命令來將stdin重定向到linux檔案。

5 建立自己的重定向

你可以建立檔案描述符3~8,並將它們分配給要用到的任何檔案。

*建立輸出檔案描述符

例:exec 3>testout

* 重定向檔案描述符

exec 3>&1      #將檔案描述符3重定向到檔案描述符1

exec 1>testout #將stdout重定向到檔案

....

exec 1>&3      #恢復檔案描述符1

* 建立輸入檔案描述符

exec 6<&0      #將檔案描述符6重定向到檔案描述符0

exec 0 testfile

* 關閉檔案描述符

exec 3>&-

一旦關閉了檔案描述符,就不能在指令碼裡向它寫任何資料了,否則shell會生成錯誤訊息。

6 列出開啟的檔案描述符

/usr/sbin/lsof

7 阻止命令輸出

shell輸出到null檔案的任何資料都不會儲存。

ls -al > /dev/null    #阻止stdout輸出

ls -al 2> /dev/null  #阻止stderr輸出

cat /dev/null > testfile # 清空乙個檔案

參考文獻:《linux command line and shell scripting bible》 by richard blum

shell學習筆記 檔案描述符及重定向

0 stdin 標準輸入 1 stdout 標準輸出 2 stderr 標準錯誤 將輸出文字重定向或儲存到乙個檔案 echo this is a sample test 1 temp.txt cat temp.txt this is a sample test 1 echo this is a sa...

檔案描述符 輸出重定向

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

檔案描述符與重定向

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