Linux下資料流重導向

2022-08-18 11:48:30 字數 2073 閱讀 7760

定義:指根據命令的輸出不列印在螢幕上而是直接輸入到其他裝置比如檔案或印表機或垃圾箱

格式:命令 command [option] 引數 > | >> | 1> | 2> | 2>> 檔案或列印裝置

1.

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

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

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

詳細分析:

>表示重導向輸出到**,比如

ls /tmp/man.config >

/tmp/test.txt ls結果本來應該在螢幕上輸出,但是使用了》 資訊知道輸出到test.txt檔案裡了,如果test.txt檔案不存在則會自動建立,當這個檔案存在的時候,那麼系統就會先將這個檔案內容清空,然後再將資料寫入!

>>

和》意思基本相同,但是,如果使用》如果test.txt已經存在,則輸出的內容講累加至test.txt已存在內容之後,不會將舊的資料刪除

那個 > 會等於 1> ,因為standard output **是 1 ,可以省略! 再者, 1 與 >

之間並沒有空格喔!是緊接在一起的!

2>指只輸出錯誤資訊,如果執行的命令既有錯誤資訊又有正確的輸出 則可以用2> 重導至其它檔案

如find -name /home/test > /tmp/test.txt 2>

/tmp/error.txt 正確資訊輸出至/tmp/test.txt 錯誤資訊輸出至error.txt

同時寫入同乙個檔案需要使用 2>&1

例:[root@linux ~]$ find /home -name testing > list

2>&1

<

將原本需要由鍵盤輸入的資料,經由檔案來讀入。

例:[root@linux ~]# cat > catfile

testing

cat file test

<==

這裡按下 [ctrl]+d 結束輸入來離開!

此時就會有 catfile 這個檔案產生,而且該檔案的內容就是剛剛輸入的內容喔。

那麼,我是否可以使用其它檔案來取代鍵盤輸入呢?可以啊!這樣做!

[root@linux ~]# cat > catfile <

somefile

我可以先編輯 somefile ,然後再以上述的指令來將資料輸出到

catfile 去呢!

<<

表示cat 直接將輸入的訊息輸出到 catfile 中, 且當輸入 eof 時,該次輸入就結束

[root@linux ~]# cat >

catfile <

> this is a test

testing

> ok now stop

> eof

<==

輸入這個,立刻就結束了!

利用<<

右側的控制字元,我們可以終止一次輸入, 而不必輸入 [crtl]+d 來結束哩!

資料流導向的作用

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

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

c.一些系統的例行命令(例如寫在

/etc/crontab

中的檔案)的執行結果,希望他可以存下來時;

d.一些執行命令,我們已經知道他可能的錯誤訊息,所以想以『2> /dev/null 』將他丟掉時;

e.錯誤訊息與正確訊息需要分別輸出時。

Linux資料流重導向

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

Linux之資料流重導向

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

BASH 資料流重導向

資料流重導向 即將本應在標準輸入輸出 std input output error output 的資料傳到別的地方去。例如將除錯資訊存入文件中,而非直接輸出到螢幕上。也可以用 tee 命令,即輸出到標準輸出,又寫入指定文件 也叫雙向導向。傳送字元如下所示 1.標準輸入 stdin 為0,使用 或 ...