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...