所謂重定向,就是指把原本要輸出到螢幕中的資訊,重新定位到某個指定的檔案中。
當螢幕輸出的資訊很重要,並且希望儲存重要的資訊時;
後台執行中的程式,不希望他干擾螢幕正常的輸出結果時;
系統的例行命令希望可以儲存下來時;
一些執行命令我們已經知道他可能會出現錯誤資訊,不想看這些錯誤資訊時;
錯誤日誌與正確日誌需要輸出至不同的檔案中儲存時
標準輸入:檔案描述符為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 使用輸出重定向。第一種情況很...