可以理解為linux跟蹤開啟檔案,而分配的乙個數字,這個數字類似c語言操作檔案時候的控制代碼,通過控制代碼就可以實現檔案的讀寫操作。使用者可以自定義檔案描述符範圍:3-num (ulimit -n)
linux啟動後,會預設開啟3個檔案描述符,分別是:
以後開啟檔案,新增檔案繫結描述符可以一次增加
一條shell命令執行,都會繼承父程序的檔案描述符。因此,所有執行的shell命令,都會有預設3個檔案描述符。
對於任何一條linux命令執行的過程: file(key board) --standard input --> command --standard output--> file/device
--standard error--> file/device
command-line1 [1-n] > file或檔案操作符或裝置 -> 將一條命令執行結果(stdout,stderrr本來要列印到螢幕上面的)重定向到其它輸出裝置
ls test.sh test1.sh ----ls:test1.sh: 沒有這個檔案和目錄
ls test.sh test1.sh 1>suc.txt 2>err.txt
ls test.sh test1.sh 2>&- test.sh ---&[n]代表已經存在的檔案描述符,&1代表輸出,&2代表錯誤輸出,&-代表關閉與它繫結的描述符
ls test.sh test1.sh 2>/dev/null test.sh ---- /dev/null 即為空,黑洞:吞噬一切資訊
ls test.sh test1.sh 2>/dev/null 1>/dev/null
ls test.sh test1.sh /dev/null 2>&1 ---將錯誤輸出2繫結給正確輸出1,然後將正確輸出傳送給 /dev/null裝置 *******
ls test.sh test1.sh &>/dev/null ----&代表所有輸出
# shell遇到'>'操作符,會先判斷右邊檔案是否存在,如果存在先刪除,並建立新檔案
# ">>"操作符,判斷右邊檔案,如果不存在則建立。如存在則以新增方式開啟檔案
# 一條命令在執行前,會先檢查裝置輸出是否正確,如果輸出裝置錯誤,將不會進行命令執行
shell: ret=$?
if [ $ret -eq 0 ] ; then
...
-> $?是shell變數,表示最後一次執行命令的退出狀態,0為成功,非0為失敗
'' : 單引號中巢狀單引號可使用變數 'echo '$var' is ...'
linux Shell的重定向
在網上搜尋一圈,清楚明了的解釋還是 1 command file 不覆蓋,追加 debian69 algoandsturct ls l test debian69 algoandsturct cat test 總用量 384 drwxr xr x 12 4096 12月 25 14 41 algo ...
linux shell重定向總結
command line1 1 n file或檔案操作符或裝置 command line1 1 n file或檔案操作符或裝置 ls test.sh test1.sh 1 suc.txt 2 err.txt ls test.sh test1.sh 1 suc.txt 2 err.txt exec 3...
Linux Shell之IO重定向
一 io裝置 io是指資料的 端與資料的目的端,分別稱為標準輸入 標準輸出 及標準錯誤輸出。程式不必關心裝置的問題,無論是檔案 終端 磁帶機等。在linux預設情況下,會讀取標準輸入 寫入標準輸出,並將錯誤傳遞到標準錯誤輸出。預設情況下標準輸入 輸出 錯誤都是終端。通過下面可知 cat input ...