BASH 資料流重導向

2022-04-13 08:06:12 字數 2162 閱讀 9210

資料流重導向:即將本應在標準輸入輸出(std input / output / error output)的資料傳到別的地方去。

例如將除錯資訊存入文件中,而非直接輸出到螢幕上。也可以用 tee 命令,即輸出到標準輸出,又寫入指定文件:也叫雙向導向。

傳送字元如下所示:

1.標準輸入(stdin):**為0,使用 < 或 <<

2.標準輸出(stdout):**為1,使用 > 或 >>   ; 或者 1> 或 1>>,系統預設為1,所以只寫》或》系統預設為標準(正確)輸出。

3.標準錯誤輸出(stderr):**為2,使用 2> 或 2>>

>:以覆蓋的方式將(正確的資料)輸出到指定的文件或裝置上。文件原先的資料被本次資料覆蓋

>>:以累加的方式將(正確的資料)輸出到指定的文件或裝置上。文件原先資料保留,本次資料接在原先資料之後。

舉例:

1.標準輸出重導向

[root@www ~]# ll / <==此時螢幕會顯示出檔名資訊

[root@www ~]# ll / > ~/rootfile <==螢幕幵無任何資訊,資訊輸入到rootfile裡面去了,

<==若該檔案不存在就建立之,否則系統先將該檔案中資料清空,再寫入新資料,也即覆蓋。

2.若將正確和錯誤的資訊分別寫入不同的文件

將 stdout 與 stderr 分別存入不同的檔案去

[dmtsai@www ~]$ find /home -name .bashrc > list_right 2> list_error <==list_right 中存放正確輸出的資訊: (1)>;list_error中存放錯誤輸出的資訊: 2>
3.將指令的資料全部寫入名為 list 的檔案中

[dmtsai@www ~]$ find /home -name .bashrc > list 2> list <==錯誤

[dmtsai@www ~]$ find /home -name .bashrc > list 2>&1<==正確

[dmtsai@www ~]$ find /home -name .bashrc &> list<==正確

這其中設計到輸出順序問題。

4.standard input:< 與 << :將原本需要有鍵盤輸入的資料,該有檔案的內容來代替。

範例六:利用 cat 指令來建立乙個檔案的簡單流程

[root@www ~]# cat > catfile

testing

cat file test

<==這裡按下 [ctrl]+d 來離開

[root@www ~]# cat catfile

testing

cat file test

由於加入 > 在 cat 後,所以那個 catfile 會被主動的建立,而內容就是剛剛鍵盤上面輸入的那兩行資料

了。 唔!那我能利用純文字檔案取代鍵盤的輸入,也就是說,用某個檔案的內容來取代鍵盤的敲擊

呢? 可以的!如下所示:

範例七:用 stdin 取代鍵盤的輸入以建立新檔案的簡單流程

[root@www ~]# cat > catfile < ~/.bashrc

[root@www ~]# ll catfile ~/.bashrc

-rw-r--r-- 1 root root 194 sep 26 13:36 /root/.bashrc

<< 與 < 的區別:

< : 的結束識別符號是eof,標準文件結束符。

<< : 可以自己指定輸入結束的標誌,如下所示:

資料流重導向應用的場合:

 螢幕輸出的資訊很重要,而且我們需要將他存下來的時候;

 背景執行中的程式,不希望他干擾螢幕正常的輸出結果時;

 一些系統的例行命令 (例如寫在 /etc/crontab 中的檔案) 的執行結果,希望他可以存下來時;

 一些執行命令的可能已知錯諢訊息時,想以『 2> /dev/null 』將他丟掉時;

 錯誤訊息不正確訊息需要分別輸出時。

參考《鳥哥》

Linux資料流重導向

當我們使用linux的時候,每下達1個命令,通常都會有對應的資訊輸出在螢幕上,這些輸出的資料就是資料流,而linux資料流重導向,就是把這些資料輸出到不同的地方了。而資料流通常分為正確的資料跟錯誤的資料,如果我們要把正確的資料導向到我們要的檔案裡面去,可以使 覆蓋 新增 來處理。malt malt ...

Linux之資料流重導向

其實一開始繞進檔案描述符這個大坑裡去了,越挖越深,什麼系統檔案表,記憶體索引節點,vfs等等都一下子冒了出來,而我暫時還沒那麼多精力搞定所有,於是只能遮蔽底層的一些細節,暫且當作黑盒子,來日再挖。1 linux系統中,一切資源都被視為檔案,包括放在磁碟上的各種文件,甚至各種裝置。檔案是linux組織...

1 5 資料流重導向(redirect)

當我們執行乙個指令時,此指令可能由檔案讀取資料,經處理之後,輸出到螢幕上,此外,若指令執行失敗,則會傳回錯誤指示。在這個過程中,輸出操作被稱為 standend output,簡稱stdout。輸出 為1,使用符號 或 表示。輸出錯誤操作被稱為 standend error output,簡稱std...