shell會自動為我們開啟和關閉0、1、2這三個檔案描述符,我們不需要顯式地開啟或關閉它們。標準輸入是命令的輸入,預設指向鍵盤;標準輸出是命令的輸出,預設指向螢幕;標準錯誤是命令錯誤資訊的輸出,預設指向螢幕。
標準輸入是檔案描述符0。它是命令的輸入,預設是鍵盤,也可以是檔案或其他命令的輸出。
標準輸出是檔案描述符1。它是命令的輸出,預設是螢幕,也可以是檔案。
標準錯誤是檔案描述符2。這是命令發生錯誤時的輸出,預設是螢幕,同樣也可以是檔案。
為什麼會有乙個專門針對錯誤的特殊檔案?這是因為很多人喜歡把錯誤單獨儲存到乙個檔案中,特別是在處理大的資料檔案時,可能會產生很多錯誤。
如果沒有顯式地進行重定向,命令通過檔案描述符0從螢幕讀取輸入,通過檔案描述符1和2將輸出和錯誤資訊輸出到螢幕。但如果我們想從其他檔案(再次強調,i/o裝置在unix/linux中也是檔案)讀取輸入或產生輸出,就需要對0、1、2使用重定向了。其語法如下:
command < filename 把標準輸入重定向到filename檔案中
command 0
< filename 把標準輸入重定向到filename檔案中
command > filename 把標準輸出重定向到filename檔案中(覆蓋)
command 1
> fielname 把標準輸出重定向到filename檔案中(覆蓋)
command >> filename 把標準輸出重定向到filename檔案中(追加)
command 1
>> filename 把標準輸出重定向到filename檔案中(追加)
command 2
> filename 把標準錯誤重定向到filename檔案中(覆蓋)
command 2
>> filename 把標準輸出重定向到filename檔案中(追加)
command > filename 2
>
&1 把標準輸出和標準錯誤一起重定向到filename檔案中(覆蓋)
command >> filename 2
>
&1 把標準輸出和標準錯誤一起重定向到filename檔案中(追加)
command < filename > filename2 把標準輸入重定向到filename檔案中,把標準輸出重定向到filename2檔案中
command 0
< filename 1
> filename2 把標準輸入重定向到filename檔案中,把標準輸出重定向到filename2檔案中
重定向的使用有如下規律:
1)標準輸入0、輸出1、錯誤2需要分別重定向,乙個重定向只能改變它們中的乙個。
2)標準輸入0和標準輸出1可以省略。(當其出現重定向符號左側時)
3)檔案描述符在重定向符號左側時直接寫即可,在右側時前面加&。
4)檔案描述符與重定向符號之間不能有空格!
對重定向的一些解釋:
1、/dev/null
代表空裝置檔案,任何寫入都將被直接丟棄(但返回「成功」),任何讀取都將得到eof(檔案結束標誌)。
2、>
代表重定向到**,例如:echo "123" > /home/123.txt
,"> /dev/null"
等同於"1> /dev/null"
。
3、2 表示stderr標準錯誤,&
表示等同於的意思,2>&1
表示2的輸出重定向等同於1。
那麼1> /dev/null
表示標準輸出重定向到空裝置檔案,也就是不輸出任何資訊到終端,說白了就是不顯示任何資訊。
4、2>&1
表示標準錯誤輸出重定向等同於標準輸出,因為之前標準輸出已經重定向到了空裝置檔案,所以標準錯誤輸出也重定向到空裝置檔案。
標準輸入,標準輸出和標準錯誤
當我們使用檔案描述符進行操作時,需要操作標準輸入 標準輸出 標準錯誤,可以包含如下標頭檔案 include這個標頭檔案中定義了標準裝置 standard file descriptors.define stdin fileno 0 standard input.define stdout filen...
linux中的標準輸入 標準輸出 標準錯誤
在shell中執行命令時,每個程序都和三個開啟的檔案相聯絡,並使用檔案描述符來引用這些檔案。輸入檔案 標準輸入 0 預設是鍵盤輸入,也可以是檔案或其他命令的輸出 輸出檔案 標準輸出 1 預設是螢幕,也可以是檔案 錯誤輸出檔案 標準錯誤 2 預設是螢幕,也可以是檔案 linux系統中實際上有12個檔案...
標準輸入與標準輸出
輸入cat 命令時,他會從stdin 對通斷介面來說,標準輸入就是鍵盤 接受輸入,cat testfile 現在cat命令會用testfile檔案中的行為作為輸入,可以使用這種技術將資料輸入到任何能從stdin接受資料的shell命令 stdout 在終端介面上,標準輸出就是終端顯示器。ls l t...