輸入輸出重定向

2021-10-04 02:02:47 字數 2084 閱讀 4309

所謂重定向,就是指把原本要輸出到螢幕中的資訊,重新定位到某個指定的檔案中。

當螢幕輸出的資訊很重要,並且希望儲存重要的資訊時;

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

系統的例行命令希望可以儲存下來時;

一些執行命令我們已經知道他可能會出現錯誤資訊,不想看這些錯誤資訊時;

錯誤日誌與正確日誌需要輸出至不同的檔案中儲存時

標準輸入:檔案描述符為0 預設是鍵盤,也可以是其他檔案或命令的輸出

標準輸出:檔案描述符為1 預設輸出到螢幕

錯誤輸出:檔案描述符為2 預設輸出到螢幕

我們在執行乙個程式時,通常會開啟上面這三個標準檔案,所以當我們想將錯誤資訊和正確資訊分開儲存的時候,我們就可以使用1和2來將輸出的資訊分類重定向到某個檔案中去。

輸出裝置:

[root@oldboy ~]

# ll /dev/std*

lrwxrwxrwx. 1 root root 15 mar 17 17:10 /dev/stderr -> /proc/self/fd/2

lrwxrwxrwx. 1 root root 15 mar 17 17:10 /dev/stdin -> /proc/self/fd/0

lrwxrwxrwx. 1 root root 15 mar 17 17:10 /dev/stdout -> /proc/self/fd/1

1.> 標準覆蓋輸出重定向

2.>> 標準追加輸出重定向

3. 2> 標準錯誤覆蓋輸出重定向

4. 2>>標準錯誤追加輸出重定向

5. &>正確和錯誤的輸出都打入乙個檔案中

6. &>> 正確和錯誤的輸出都追加到乙個檔案中

7.1>>a 2&>1 與&>>意思相同

8. 1>a 2&>1與&>意思相同

$? 表示判斷上一條命令的執行結果 0表示ok 只要不是0就表示執行失敗。

;表示無論前面的命令執行是否成功,都會執行後面的命令,常用於兩條命令寫到同一行執行

()表示括號中的內容是乙個整體。

使用示例:

[root@oldboy ~]

# date ; ls >> /dev/null

# 系統會先執行date將結果輸出到螢幕中,然後把ls的結果重定向到/dev/null中去

wed mar 18 10:21:45 cst 2020

[root@oldboy ~]

# (date ; ls) >> /dev/null

# 表示把data和ls的命令執行結果都重定向到/dev/null中去

[root@oldboy ~]

#

<< 標準輸入重定向

把左邊命令的輸出作為右邊命令的輸入。

表示把在管道傳遞的過程中,把前面的命令的執行結果儲存下來,也可以把前面的命令的執行結果輸出到螢幕。需要注意的是,tee不會影響檔案最終的輸出結果。

tee和重定向的區別:

[root@oldboy ~]

# date > 1.txt

[root@oldboy ~]

# date | tee 1.txt

wed mar 18 11:02:39 cst 2020

從上面可以看出,重定向不會再螢幕中輸出結果,而tee會在螢幕輸出乙份,檔案中也會存在乙份。

tee缺省會覆蓋檔案中的資料,如果想追加的話,可以加上-a引數來實現。

可以讓不支援管道的命令來使用管道。

使用示例如下:

[root@oldboy ~]

# which cat | xargs ls -l

-rwxr-xr-x. 1 root root 54160 oct 31 2018 /usr/bin/cat

上面例子中,我們要知道,ls -l本來是不支援使用管道來進行引數傳遞的,這時候我們使用xargs就可以讓ls命令來支援管道,成功的把左邊的命令的執行結果作為引數傳遞給右邊的命令。

注: rm -rfls

表示先執行ls,然後再執行rm -rf

與 rm -rf $(ls)

相同。

輸入輸出重定向

使用標準輸入流,標準輸出流和標準錯誤流,這些標準流都被預分配給鍵盤和顯示器。在需要的時候,可以使用重定向臨時改變這些預設分配。重定向是這樣一種過程,我們借助它指定乙個用於替代某個 標準檔案的檔案。輸入重定向 可以將標準輸入從鍵盤重定向到任何文字檔案。輸入重定向運算子為小於號 意味著該命令從此給 派的...

輸入輸出重定向

1.標準輸入的控制 語法 命令 檔案將檔案做為命令的輸入。例如 mail s mail test wesongzhou hotmail.com file1 將檔案file1 當做信件的內容,主 題名稱為mail test,送給收信人。2.標準輸出的控制 語法 命令 檔案將命令的執行結果送至指定的檔案...

輸入輸出重定向

想象一下,當我們寫了個程式,開始是在命令列下執行的程式,後來用mfc之類的改寫為窗體程式,原先用printf輸出的trace都不可見了,但是我們又需要 輸出到檔案分析 怎麼辦?1 開始寫的時候你定義乙個mytrace的巨集 2 你可以把printf換成fprintf 3 使用輸出重定向。第一種情況很...