資料流重定向

2022-08-30 13:42:14 字數 2880 閱讀 9733

標準輸出是指命令執行所回傳的正確的資訊,而標準錯誤輸出可以理解為命令執行失敗後,所回傳的錯誤資訊。

[root@shadow ~]# ll ~/rootfile

ls: cannot access /root/rootfile: no such file or directory

[root@shadow ~]# ll / > ~/rootfile

[root@shadow ~]# ll ~/rootfile

-rw-r--r-- 1 root root 1083 oct 15 16:13 /root/rootfile

本例中使用「>」將ll命令的輸出重定向到「~/rootfile」這個檔案中。同時,如果這個檔案本身不存在,系統則會自動建立這個檔案;如果這個檔案存在,系統則會先將這個檔案內容清空,然後將資料寫入。

而如果想要將資料累加而不想要將舊的資料刪除,那我們可以使用「>>」這個符號。這種情況下,如果檔案不存在,系統會主動建立這個檔案;如果檔案已存在,系統則會在檔案的最下面將相應的內容累加進去。

以上重定向資料的方法是指正確的資料(因為僅有》存在時,預設**為1),完整的資料輸出方式如下:

如下有乙個將正確與錯誤的資料分別存入不同檔案的例子:

[shadow@shadow ~]$ find /home -name .bashrc 

find: 『/home/arod』: permission denied

find: 『/home/alex』: permission denied

find: 『/home/agetest』: permission denied

/home/shadow/.bashrc

[shadow@shadow ~]$ find /home -name .bashrc > list_right 2> list_wrong

[shadow@shadow ~]$ cat list_right

/home/shadow/.bashrc

[shadow@shadow ~]$ cat list_wrong

find: 『/home/arod』: permission denied

find: 『/home/alex』: permission denied

find: 『/home/agetest』: permission denied

這個/dev/null可以吃掉任何導向這個裝置的資訊,例如,我們忽略上面的錯誤資訊:

[shadow@shadow ~]$ find /home -name .bashrc 2> /dev/null 

/home/shadow/.bashrc

這樣的情況下螢幕上就只會顯示正確的操作資訊,錯誤的資訊則被丟棄了。

如果需要將正確與錯誤資料寫入同乙個檔案,這個時候需要使用特殊寫法:

[shadow@shadow ~]$ find /home -name .bashrc > list 2> list	

# <==錯誤,兩條資料同時寫入同乙個檔案且沒有使用特殊的寫法,此時兩條資料可能會交叉寫入該檔案內,造成次序錯亂。

[shadow@shadow ~]$ cat list # <== 錯誤的次序

/home/shadow/.bashrc

: permission denied

find: 『/home/alex』: permission denied

find: 『/home/agetest』: permission denied

[shadow@shadow ~]$ find /home -name .bashrc

find: 『/home/arod』: permission denied

find: 『/home/alex』: permission denied

find: 『/home/agetest』: permission denied

/home/shadow/.bashrc

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

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

以上「2>&1」與「&>」都是正確的方法。

這兩個符號是用來重定向標準輸入的,即將原本需要由鍵盤輸入的資料改由檔案內容替代。例如:

# 鍵盤輸入

[root@shadow ~]# cat > catfile

hello

[root@shadow ~]# cat catfile

hello

# 重定向輸入

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

[root@shadow ~]# ll catfile .bashrc

-rw-r--r--. 1 root root 176 dec 29 2013 .bashrc

-rw-r--r-- 1 root root 176 oct 15 16:59 catfile # <==兩個檔案內容一樣

《這個符號代表結束輸入的意思,例如,如果我們使用cat直接將輸入的資訊輸出到catfile檔案中,且當鍵盤輸入eof時結束,我們可以這麼寫:

[root@shadow ~]# cat > catfile << "eof"

> hello

> world

> eof

[root@shadow ~]# cat catfile

hello

world

可見,使用《右側的控制字元,可以終止一次輸入,而不必使用[ctrl]+d來結束。

資料流重定向

重定向,將原本輸出到標準輸出的資料重定向到乙個檔案中,因為標準輸出 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。標準...