通常情況,每個
unix
程式在啟動時都會開啟三個流,乙個用於輸入,乙個用於輸出,乙個用於列印診斷或錯誤訊息。它們分別被做:標準輸入
,標準輸出
,標準錯誤。
標準輸入是程式可以讀取其輸入的位置。預設情況下,程序從鍵盤讀取
stdin
。
標準輸出是程式寫入其輸出的位置。預設情況下,程序將
stdout
寫到終端螢幕上。
標準錯誤是程式寫入其錯誤訊息的位置。預設情況下,程序將
stderr
寫到終端螢幕上。
重定向
:
資料流重導向
(重定向
)就是將某個指令(命令
)執行後的執行返回值
,一般這些返回值就是你執行完後出現在螢幕上那些結果資料。如果不想讓他預設流向螢幕,可以把這些結果資料傳輸到其他的地方,例如檔案或者裝置
(例如印表機
,不過在
linux
裡面一切都一切都是檔案
,所以印表機這樣的裝置也是檔案)。
>
資料流重導向:輸出導向,會替換被導向的檔案內容
.
>>
資料流重導向:輸出導向,不會替換被導向的檔案內容,會累加資料
.
檔案描述符
:
posix
定義了stdin_fileno
、stdout_fileno
和stderr_fileno
來代替0、1
、2。這三個符號常量的定義位於標頭檔案
unistd.h
。標準輸入
(stdin)
:檔案描述符為
0 ,使用
<
或<<
;其實可以理解為這個箭頭指向**資料就往**跑
.這裡是輸入
(stdin).
命令就通過
<
來獲取資料
.等於資料是從左邊往命令裡面流.
標準輸出
(stdout)
:檔案描述符為
1 ,使用
>
或》 ;輸出的時候不能用
<
或者<<,
因為命令總是在前面
.這裡命令要輸出資料
.所以資料的**是命令
,資料就會隨著箭頭指向你給的方向.
標準錯誤輸出
(stderr)
:檔案描述符為
2 ,使用
2>
或2>>;
command >file 2>&1
首先
command >file 2>file
的意思是將命令所產生的標準輸出資訊
,和錯誤的輸出資訊送到
file
中;command>file 2>file
這樣的寫法
,stdout
和stderr
都直接送到
file
中, file
會被開啟兩次,這樣
stdout
和stderr
會互相覆蓋
,這樣寫相當使用了兩個同時去搶占
file
的管道.
定向了2
次。那如果使用
command >file 2>&1
這條命令就將
stdout
直接送向
file,stderr
繼承了第一次重定向
(fd1)
到管道後
,再被送往
file,
此時,file
只被開啟了一次
,也只使用了乙個管道
fd1,
它包括了
stdout
和stderr
的內容。
/dev/null
linux
下還有乙個非凡的檔案
/dev/null
,它就像乙個無底洞,所有重定向到它的資訊都會消失得無影無蹤。這一點非常有用,當我們不需要回顯程式的所有資訊時,就可以將輸出重定向到
/dev/null
。假如想要正常輸出和錯誤資訊都不顯示,則要把標準輸出和標準錯誤都重定向到
/dev/null
>/dev/null
表示將程式通過
printf
或者fprintf
列印到handle為1
的stdout
檔案的資訊,送到
/dev/null
空洞檔案。
例項:
crontab
排程,顯示標準和出錯資訊到乙個輸出檔案。
[hadoop@emr-worker-8 sdk-dataproc]$ crontab -l
0 6 * * * sh /home/hadoop/sdk-dataproc/sdk-ctl.sh >>/home/hadoop/sdk-dataproc/corn-err.txt 2>&1
linux標準輸入輸出與重定向
原文 1.標準輸入輸出和錯誤 linux下使用標準輸入檔案stdin和標準輸出檔案stdout,來表示每個命令的輸入和輸出,還使用乙個標準錯誤輸出檔案stderr用於輸出錯誤資訊。這三個標準輸入輸出系統預設與控制終端裝置相聯絡在一起。因此,在標準情況下,每個命令通常從它的控制終端中獲取輸入,將輸出列...
Linux重定向(輸入輸出重定向)
我們知道,linux 中標準的輸入裝置預設指的是鍵盤,標準的輸出裝置預設指的是顯示器。而本節所要介紹的輸入 輸出重定向,完全可以從字面意思去理解,也就是 通常是用檔案或命令的執行結果來代替鍵盤作為新的輸入裝置,而新的輸出裝置通常指的就是檔案。對於輸入重定向來說,其需要用到的符號以及作用如表 1 所示...
輸入輸出及重定向
重定向標準輸出 1.將命令的執行結果輸入到指定的檔案中,而不是直接顯示在螢幕中。2.是指在不修改原檔案的情況下追加到指定的檔案中。3.接檔案 是指無論是命令的標準正確輸入還是標準錯誤輸入都輸入到檔案中.4.接檔案 是指無論是命令的標準正確輸入還是標準錯誤輸入都追加到檔案中.注意 直接輸入檔案符 會覆...