Linux之輸入與輸出重定向
一、輸出重定向
首先在linux系統中,通常我們定義正確輸出的編號為1,錯誤輸出編號為2。
輸出重定向:
> ##重定向正確輸出
2> ##重定向錯誤輸出
&> ##重定向所有輸出
示例:
我們用普通使用者student執行查詢命令。
find /etc/ -name passwd
不使用輸出重定向符號,預設輸出到命令列介面:
find /etc -name passwd > file ##正確輸出到file檔案
很明顯,正確的輸出儲存到了file檔案中,而錯誤的輸出顯示到了命令列介面。
find /etc -name passwd 2>file1 ##錯誤輸出到file1檔案
示例:
這裡我們看到,錯誤的輸出儲存到了file1檔案中,而正確的輸出顯示到了命令列介面。
find /etc -name passwd &>file2 ##所有輸出都到file2檔案
示例;
所有的輸出都儲存在file2檔案中。
那麼,問題來了,>>符號會覆蓋檔案之前的內容,用什麼命令可以不覆蓋,只是儲存在檔案末尾呢?
>> ##追加正確輸出到檔案的最後
2>> ##追加錯誤輸出到檔案的最後
&>> ##追加所有輸出到檔案的最後
示例:
首先建立三個檔案,用來存放結果。
find /etc -name passwd >> file1 ##追加正確輸出到file1
可以看到,正確的輸出被追加到了檔案原內容的後面,而錯誤輸出顯示在了命令列介面。
find /etc -name passwd 2>> file2 ##追加錯誤輸出到file2
可以看到,錯誤的輸出被追加到了檔案原內容的後面,而正確輸出顯示在了命令列介面。
find /etc -name passwd &>> file3 ##追加所有輸出到file3
可以看到所有的輸出都被追加到了file3檔案的後面。
二、輸入重定向
輸入重定向;
是指不使用系統提供的標準輸入埠,而進行重新的指定。換言之,輸入重定向就是不使用標準輸入埠輸入檔案,而是使用指定的檔案作為標準輸入裝置。(重定向簡單理解就是使用 “<”符來修改標準輸入裝置)
還是通過一個例子來說明一下吧。
<<end
輸入
end ##以兩個end之間的內容用作輸入
剖析:更改密碼,通常我們需要先輸入一次密碼,然後在輸入一次密碼進行確認。我們使用了<<符號後,把兩個end之間的內容作為了兩次輸入密碼的輸入,而不是通過鍵盤輸入。這裡的end也不是固定的,大家可以更換為兩個任意相同的字元。
三、管道的應用
一個管道,是一個或多個命令的序列,由 | (管道符)分隔。管道將第一個命令的標準輸出連線到下一個命令的標準輸入。
注意:
管道只允許正確輸出通過
通過管道的輸出將會變成輸入,而變成輸入的這些輸出是會被第二條命令處理的
如果需要儲存輸出內容,那麼需要複製一份輸出,用到的命令是“tee”
在普通使用者下操作:
find /etc/ -name passwd | wc -l ##看到的結果為2,錯誤輸出不能通過管道
find /etc/ -name passwd 2>&1 | wc -l ##會看到19,編號為2的輸出會被“2>&1”轉換為編號1.
find /etc/ -name passwd 2>&1 | tee file | wc -l ##儲存一份輸出到file再統計行數。