關於資料流重定向

2022-03-26 20:19:07 字數 2525 閱讀 7165

要搞清楚資料流重定向,需要先搞清楚什麼是資料流,然後如何重定向,這一切都需要從命令的執行過程說起。

如上圖所示為命令的執行過程,可以看到,在linux中,資料流分三種:標準輸入(stdin)、標準輸出(stdout)和標準錯誤(stderr)

執行命令時,這個命令可能通過檔案讀入資料,處理後再將資料輸出到螢幕,譬如:

cat /etc/crontab /etc/notexist
cat會由/etc/cronbtab和/etc/notexist讀入資料,然後將資料輸出到螢幕上,不過,因為不存在/etc/notexist這個檔案,所以會顯示錯誤訊息,這個訊息也列印到螢幕上。

所謂的資料流重定向,就是將命令執行後應該要出現在螢幕上的資料,傳輸到其他地方,例如檔案或者裝置。而要把這些資料傳送到別的地方,則需要用到傳送命令。

我們知道,要將預設輸入到螢幕上的資料流重定向,需要傳送命令,主要分為三種:

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

2. 標準輸出(stdout):**為1,使用》或者》

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

總結來說,命令執行中重定向的方式如下:

命令1>

2>

2>>

裝置或檔案

其中》和1>是一樣的,因為標準輸出**是1,可以省略。

例如,將ls –l 根目錄的資料重定向到~/rootfile:

ls -l / > ~/rootfile
整個重定向的過程如下:

(1)當檔案(本例中的~/rootfile)不存在時,系統自動建立。

(2)如果檔案存在,則先把檔案的內容清空,然後寫入資料。

如果不想清空原來的資料,而是想在原來的基礎上累加,則需要使用》,如:

ls -l / >> ~/rootfile
例如,我們cat乙個不存在的檔案:

cat notexistfile

如果我們要把這個錯誤輸出,重定向,就可以這樣:

cat notexistfile 2> errorfile

除了重定向的是標準錯誤外,它的重定向過程和》是一樣的,當然如果想累加,就用2>>。

組合一下就行了,如:

cat /etc/crontab  /etc/notexist > rightfile 2> errorfile
特別的,如果要將資料輸入同乙個檔案,這個時候不能這麼寫:

cat /etc/crontab  /etc/notexist > errorfile 2> errorfile
這條指令並不會提示錯誤,但是因為有兩條資料流同時寫入乙個檔案,會導致交叉寫入,造成資料錯亂,讓檔案的資訊不可讀,這個時候需要用到2>&1,表示將標準錯誤重定向到標準輸出中去:

cat /etc/crontab  /etc/notexist > errorfile 2>&1
或者,使用更簡潔的符號&>,上面的語句等價於:

cat /etc/crontab  /etc/notexist &> errorfile
這個時候就需要用到/dev/null這個檔案了,它相當於乙個黑洞或者說垃圾桶,當重定向到這個檔案時,所有資訊都會消失不見:

cat /etc/crontab  /etc/notexist > /dev/null

2>&1

譬如,我們使用cat命令在鍵盤上輸入資料,然後寫入乙個檔案:

cat >catfile

this a

file

<== 輸完之後通過ctrl+d結束輸入

此時就有catfile產生,檔案內容就是剛輸入的內容,如果想通過其他檔案來代替鍵盤輸入,則可以:

cat > catfile2 < catfile
這就是《的用法,而《的用法有點不一樣,它表示「結束的輸入字元」,例如我們想用cat將輸入的訊息輸出到catfile中,且當輸入eof時,這次輸出結束:

cat > catfile <

>this is a new input

> eof

當輸入eof的時候就會自動結束輸入,而不必使用ctrl+d來結束,注意的是eof沒有寫入檔案。

1. 螢幕的輸出很重要,需要儲存到檔案中。

2. 後台執行的程式,不希望它干擾螢幕正常的輸出結果。

3. 一些系統的例行性命令如crontab的執行結果,希望它能儲存下來。

4. 一些執行命令,已經知道它可能的錯誤訊息,想通過」2> /dev/null」直接丟掉。

5. 錯誤訊息和正確訊息需要分別輸出。

《鳥哥的linux私房菜_基礎學習篇》(第二版)

(完)

資料流重定向

重定向,將原本輸出到標準輸出的資料重定向到乙個檔案中,因為標準輸出 dev stdout 本身也是乙個檔案,我們將命令輸出導向另乙個檔案自然也是沒有任何問題的。下面我們簡單的回顧一下我們前面經常用到的兩個重定向操作 echo hello shiyanlou redirect echo www.jly...

資料流重定向

管道預設是連線前乙個命令的輸出到下乙個命令的輸入 linux中提供三個標準輸入與輸出 檔案路徑 檔案作用 dev stdin 用於標準輸入 dev stdout 用於標準輸出 dev stderr 用於錯誤輸出 簡單的重定向 通過管道把檔案的輸出作為cat的輸出,並把cat的輸出作為檔案test的輸...

資料流重定向

linux在你登入時,便將預設的標準輸入 標準輸出 標準錯誤輸出安排成你的終端。i o重定向就是你通過與終端互動,或者在shell script裡設定,重新安排從 輸入或者輸出到 每個程式都應該有標準輸入 輸出 錯誤輸出 重定向的方法大抵有 管道等 先了解stdin stdout stderr。標準...