Linux下Shell重定向

2022-07-22 02:57:12 字數 2996 閱讀 3432

1. 標準輸入,標準輸出與標準錯誤輸出

linux下系統開啟3個檔案,標準輸入,標準輸出,標準錯誤輸出。

標準輸入:從鍵盤輸入資料,即從鍵盤讀入資料。

標準輸出:把資料輸出到終端上。

標準錯誤輸出:把標準錯誤輸出到終端上。

預設的標準輸入指的是鍵盤,預設的標準輸出與標準錯誤輸出指的是螢幕或者是終端。

系統為這三個檔案分配了檔案識別符號fd(file descripter).

在linux系統下,一切皆是檔案,對檔案的操作,一般要用到檔案識別符號。它們的檔案識別符號,分別為0,1,2.

2. 重定向

重定向分為輸入重定向與輸出重定向。

所謂的輸入重定向即輸入不從鍵盤讀入,而是從檔案輸入或其它。

所謂的輸出重定向即不輸出到終端上,而是輸出到檔案中去或其它。

""<"表示輸入重定向運算子,">"表示輸出重定向運算子。

"<<"這種輸入告訴shell,當前標準輸入來自命令列的一對分隔號的中間內容。

">>",用">"輸出時,如果檔案不存在會自動建立乙個檔案,如果第二次輸入時,會覆蓋前一次的輸入內容,而">>"表示把第二次的輸出內容追加到檔案中去,而不是覆蓋。

3. 下面看一下幾個例子

(1)輸入重定向

[root@localhost ~]# wcwc統計行數,單詞數, 字元數

其中wc的輸入來自 /etc/inittab

[root@localhost ~]# wc < 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是乙個垃圾箱,是乙個無底洞,表示的含義為不顯示。

即標準輸出與標準錯誤輸出不顯示。

以上兩個命令表示的含義是相同的。

4.exec繫結重定向

格式:

exec 檔案描述符[n] 《或》 file或檔案描述符或裝置

在上面講的輸入,輸出重定向 將輸入,輸出繫結檔案或裝置後。只對當前那條指令是有效的。如果需要在繫結之後,接下來的所有命令都支援的話。就需要用exec命令

例項:

[chengmo@centos5 shell]$exec6>&1

#將標準輸出與fd 6繫結

[chengmo@centos5 shell]$ls/proc/self/fd/

0  1  2  3  6

#出現檔案描述符6

[chengmo@centos5 shell]$exec1>suc.txt

#將接下來所有命令標準輸出,繫結到suc.txt檔案(輸出到該檔案)

[chengmo@centos5 shell]$ls-al

#執行命令,發現什麼都不返回了,因為標準輸出已經輸出到suc.txt檔案了

[chengmo@centos5 shell]$exec1>&6

#恢復標準輸出

[chengmo@centos5 shell]$exec6>&-

#關閉fd 6描述符

[chengmo@centos5 ~]$ls/proc/self/fd/

0  1  2  3

說明:使用前先將標準輸入儲存到檔案描述符6,這裡說明下,檔案描述符缺省會開啟0,1,2 還可以使用自定義描述符 。然後對標準輸出繫結到檔案,接下來所有輸出都會發生到檔案。 使用完後,恢復標準的輸出,關閉開啟檔案描述符6。

有趣事情:

可能有朋友會這樣用:exec 1>suc.txt ,接下來所有輸出都繫結到suc.txt 檔案,那麼怎麼樣恢復原來的呢? 試試你就會發現問題所在……

Linux下日誌重定向

最近由於專案的需要,需要將ipc中的日誌同步到sd卡中,以便後續ipc出現問題了進行分析。由於我們程式的架構是多程序的,為了將所有程序的日誌同步到sd卡中,程序間需要傳遞檔案描述符,然後將該描述符重定向即可。include include include include include includ...

Linux重定向與shell變數

4種執行bash的命令方法 先執行 父 的bash小,後執行的 子 bash大 2 bas 件名 父子bash 3 bash bas 件名 父子bash,bash bash 命令在第二個bash 子 中執行 4 chmod x bas 件名 將變為可執行檔案,將檔案變成可執行檔案 bas 件名 父子...

shell重定向輸入

這條命令的作用是將標準輸出1重定向到 dev null中。dev null代表linux的空裝置檔案,所有往這個檔案裡面寫入的內容都會丟失,俗稱 黑洞 那麼執行了 dev null之後,標準輸出就會不再存在,沒有任何地方能夠找到輸出的內容。錯誤輸出將會和標準輸出輸出到同乙個地方,linux在執行sh...