linux 管理的一個最重要并且有趣的話題是 i/o 重定向。此功能在指令行中使你能夠将指令的輸入輸出取自或送到檔案中,或者可以使用管道将多個指令連接配接在一起以形成所謂的“指令管道”。
我們運作的所有指令基本上産生兩種輸出:
指令結果 - 程式産生的資料,以及
程式狀态和錯誤消息,用來通知使用者程式的執行細節。
在 linux 和其他類 unix 系統中,有三個預設檔案(名稱如下),這些檔案也由 shell 使用檔案描述符号辨別:
stdin 或 0 - 它連接配接鍵盤,大多數程式從此檔案讀取輸入。
stdout 或 1 - 它連接配接螢幕,并且所有程式将其結果發送到此檔案
stderr 或 2 - 程式将狀态/錯誤消息發送到此檔案,它也連接配接到螢幕上。
是以,i/o 重定向允許你更改指令的輸入源以及将輸出和錯誤消息發送到其他地方。這可以通過 <code><</code> 和<code>></code> 重定向操作符來實作。
<a target="_blank"></a>
<code>$ top -bn 5 >top.log</code>
其中标志的含義:
<code>-b</code> - 讓 <code>top</code> 以批處理模式運作,以便你可以将其輸出重定向到一個檔案或另一個指令。
<code>-n</code> - 指定指令終止前的疊代次數。
<code>$ cat top.log</code>
要将指令輸出附加在檔案後面,請使用 <code>>></code> 操作符。
<code>$ top -bn 5 >>top.log</code>
注意: 也可以使用檔案描述符數字,上面的重定向指令等同于:
<code>$ top -bn 5 1>top.log</code>
要重定向指令的标準錯誤,你需要明确指定檔案描述符 <code>2</code>,以便讓 shell 了解你正在嘗試做什麼。
<code>$ ls -l /root/</code>
你可以重定向标準錯誤到檔案中:
<code>$ ls -l /root/ 2>ls-error.log</code>
<code>$ cat ls-error.log</code>
重定向标準錯誤到檔案中
為了将标準錯誤附加在檔案後,使用下面的指令:
<code>$ ls -l /root/ 2>>ls-error.log</code>
還可以将指令的所有輸出(包括标準輸出和标準錯誤)捕獲到單個檔案中。這可以用兩種可能的方式,通過指定檔案描述符來完成:
1、 第一種是相對較舊的方法,其工作方式如下:
<code>$ ls -l /root/ >ls-error.log 2>&1</code>
2、 第二種并且更直接的方法是:
<code>$ ls -l /root/ &>ls-error.log</code>
你也可以這樣将标準輸出和标準錯誤附加到單個檔案後:
<code>$ ls -l /root/ &>>ls-error.log</code>
大多數(如果不是全部)指令從标準輸入獲得其輸入,并且标準輸入預設連接配接到鍵盤。
要從鍵盤以外的檔案重定向标準輸入,請使用 <code><</code> 操作符,如下所示:
<code>$ cat <domains.list</code>
重定向檔案到标準輸入中
<code>$ sort <domains.list >sort.output</code>
要将一個指令的輸出重定向為另一個指令的輸入,你可以使用管道,這是用于建構複雜操作指令的有力方法。
<code>$ ls -lt | head -n 5</code>
選項的意思是:
<code>-l</code> - 啟用長清單格式
<code>-n</code> - 指定要顯示的标題行數
在這裡,我們将簡要回顧一下建構指令管道的兩個重要指令,它們是:
<code>$ echo /home/aaronkilik/test/ /home/aaronkilik/tmp | xargs -n 1 cp -v /home/aaronkilik/bin/sys_info.sh</code>
複制檔案到多個目錄
選項含義:
<code>cp</code> - 複制檔案
有關更多的使用選項和資訊,請閱讀 <code>xargs</code> 手冊頁:
<code>$ man xargs</code>
<code>tee</code> 指令從标準輸入讀取,并寫入到标準輸出和檔案中。我們可以示範 <code>tee</code> 如何工作:
<code>$ echo "testing how tee command works" | tee file1</code>
tee 指令示例
原文釋出時間為:2017-01-19
本文來自雲栖社群合作夥伴“linux中國”