1. 標準輸入,標準輸出與標準錯誤輸出ide
Linux下系統打開3個文件,標準輸入,標準輸出,標準錯誤輸出。idea
標準輸入:從鍵盤輸入數據,即從鍵盤讀入數據。.net
標準輸出:把數據輸出到終端上。命令行
標準錯誤輸出:把標準錯誤輸出到終端上。blog
默認的標準輸入指的是鍵盤,默認的標準輸出與標準錯誤輸出指的是屏幕或者是終端。進程
系統爲這三個文件分配了文件標識符fd(file descripter).ip
在Linux系統下,一切皆是文件,對文件的操做,通常要用到文件標識符。它們的文件標識符,分別爲0,1,2.it
2. 重定向原理
重定向分爲輸入重定向與輸出重定向。file
所謂的輸入重定向即輸入不從鍵盤讀入,而是從文件輸入或其它。
所謂的輸出重定向即不輸出到終端上,而是輸出到文件中去或其它。
""<"表示輸入重定向運算符,">"表示輸出重定向t運算符。
"<<"這種輸入告訴Shell,當前標準輸入來自命令行的一對分隔號的中間內容。
">>",用">"輸出時,若是文件不存在會自動創建一個文件,若是第二次輸入時,會覆蓋前一次的輸入內容,而">>"表示把第二次的輸出內容追加到文件中去,而不是覆蓋。
3. 下面看一下幾個例子
(1)輸入重定向
[root@localhost ~]# wc</etc/inittab
53 229 1666
wc統計行數,單詞數, 字符數
其中wc的輸入來自 /etc/inittab
[root@localhost ~]# wc <<aa
> 1
> 11
> 111
> aa
3 3 9
wc統計分隔符aa之間的內容。
(2)輸出重定向
[root@localhost ~]# ps -ef >a.txt //把進程的信息輸出重定向到a.txt文件中去
[root@localhost ~]# ps -ef> >a.txt //進程信息追加到a.txt的文件中去
其實,所謂的輸入輸出重定向就是不從鍵盤輸入和屏輸出。
4. Linux下輸出重定向的典型分析
(1) a.out > outfile 2>&1
(2) a.out 2> &1 >outfile
分析:
0表明標準輸入,1表明標準輸出,2表明標準錯誤輸出。其中1(即>=1>)能夠省略,默認爲標準輸出。
(1)首先把a.out重定向到outfile文件中去。而後把 2>&1把標準錯誤輸出重定向到標準輸出中去。此時的標準輸出已經重定向了,至關於把標準輸出與標準錯誤輸出都一塊兒重定向到outfile中去。 &1表明的是標準輸出的文件描述符。1通常放在左邊表示標準輸出重定向到什麼位置,而1放在右邊是重定向到標準輸出中,因此用&區分一下,表示標準輸出的文件描述符。2>1表示把標準錯誤重定向到文件1中去,2>&1則表示標準錯誤重定向到標準輸出中去。
(2)首先把標準錯誤輸出重定向到標準輸出中,此時標準輸出還在終端。所以標準錯誤也在終端。而後標準輸出到outfile中去了。而標準錯誤仍是在終端。
所以,(1)表示標準輸出與標準錯誤都到outfile中去了。
(2)表示標準輸出到outfile,但標準錯誤輸出仍然在終端。
ls 1>/dev/null 2>/dev/null
ls >/dev/null 2>&1
/dev/null是一個垃圾箱,是一個無底洞,表示的含義爲不顯示。
即標準輸出與標準錯誤輸出不顯示。
以上兩個命令表示的含義是相同的。
以上是關於Linux下的重定向問題,必定要深入理解原理。
原文地址:http://blog.csdn.net/jfkidear/article/details/7823486