1. 程式人生 > >Linux之輸入與輸出重定向

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再統計行數。

在這裡插入圖片描述