Linux / Unix示例中的輸入輸出重定向
什么是重定向?
重定向是Linux中的一項功能,因此在執(zhí)行命令時,您可以更改標(biāo)準(zhǔn)輸入/輸出設(shè)備。任何Linux命令的基本工作流程都是輸入并提供輸出。
- 標(biāo)準(zhǔn)輸入(stdin)設(shè)備是鍵盤。
- 標(biāo)準(zhǔn)輸出(標(biāo)準(zhǔn)輸出)設(shè)備是屏幕。
通過重定向,可以更改上述標(biāo)準(zhǔn)輸入/輸出。
在本教程中,我們將學(xué)習(xí) -
[TOC]
輸出重定向
的“> ”符號用于輸出(stdout)重定向。
例:
ls -al> listings
這里命令ls -al的輸出被重定向到文件“l(fā)isting”而不是你的屏幕。

注意:在將命令輸出重定向到文件時使用正確的文件名。如果存在具有相同名稱的現(xiàn)有文件,則重定向命令將刪除該文件的內(nèi)容,然后可能會被覆蓋?!?/p>
如果您不希望覆蓋文件但想要向現(xiàn)有文件添加更多內(nèi)容,則應(yīng)使用“>> ”運(yùn)算符。
您可以將標(biāo)準(zhǔn)輸出重定向到文件,還可以重定向到設(shè)備!
$ cat music.mp3> / dev / audio
cat命令讀取文件music.mp3并將輸出發(fā)送到作為音頻設(shè)備的/ dev / audio。如果PC中的聲音配置正確,此命令將播放music.mp3文件
輸入重定向
該“< ”符號用于輸入(STDIN)重定向
示例:Linux中的郵件程序可以幫助您從終端發(fā)送電子郵件。
您可以使用標(biāo)準(zhǔn)設(shè)備鍵盤鍵入電子郵件的內(nèi)容。但是,如果要將文件附加到電子郵件,則可以使用以下格式的輸入重定向運(yùn)算符。
Mail -s“Subject”to-address <Filename
這會將文件附加到電子郵件中,然后將其發(fā)送給收件人。
上面的例子很簡單。讓我們看看一些利用文件描述符的高級重定向技術(shù)。
文件描述符(FD)
在Linux / Unix中,一切都是文件。常規(guī)文件,目錄,甚至設(shè)備都是文件。每個文件都有一個名為文件描述符(FD)的關(guān)聯(lián)編號。
您的屏幕還有一個文件描述符。執(zhí)行程序時,輸出將被發(fā)送到屏幕的文件描述符,您可以在顯示器上看到程序輸出。如果輸出發(fā)送到打印機(jī)的文件描述符,則程序輸出將被打印。
錯誤重定向
無論何時在終端執(zhí)行程序/命令,總共打開3個文件,即標(biāo)準(zhǔn)輸入,標(biāo)準(zhǔn)輸出,標(biāo)準(zhǔn)錯誤。
運(yùn)行程序時,這些文件始終存在。如前所述,文件描述符與這些文件中的每一個相關(guān)聯(lián)。
| 文件 | 文件描述符 |
|---|---|
| 標(biāo)準(zhǔn)輸入STDIN | 0 |
| 標(biāo)準(zhǔn)輸出STDOUT | 1 |
| 標(biāo)準(zhǔn)錯誤STDERR | 2 |
默認(rèn)情況下,錯誤流顯示在屏幕上。錯誤重定向?qū)㈠e誤路由到屏幕以外的文件。
為什么錯誤重定向?
錯誤重定向是Unix / Linux的一個非常流行的功能。
頻繁的UNIX用戶會認(rèn)為許多命令會給你帶來大量錯誤。
- 例如,在搜索文件時,通常會獲得權(quán)限拒絕錯誤。這些錯誤通常無助于搜索特定文件的人。
- 在執(zhí)行shell腳本時,您通常不希望錯誤消息使正常的程序輸出變得混亂。
解決方案是將錯誤消息重定向到文件。
例1
$ myprogram 2> errorsfile
上面我們正在執(zhí)行一個名為myprogram的程序。
標(biāo)準(zhǔn)錯誤的文件描述符是2。
使用“2>”我們將錯誤輸出重定向到名為“errorfile”的文件
因此,程序輸出不會出錯。
例2
這是另一個使用find語句的例子 -
find . -name'my *'2> error.log
使用“查找”命令,我們正在搜索“?!?“name”以“my”開頭的文件的當(dāng)前目錄
示例3讓我們看一個更復(fù)雜的例子,
服務(wù)器管理員經(jīng)常列出目錄并將錯誤和標(biāo)準(zhǔn)輸出存儲到文件中,以后可以處理。這是命令。
ls Documents ABC> dirlist 2>&1
這里,
- 它將一個文件的輸出寫入另一個文件的輸入。2>&1表示STDERR重定向到STDOUT的目標(biāo)(這是文件dirlist)
- 我們將錯誤輸出重定向到標(biāo)準(zhǔn)輸出,而標(biāo)準(zhǔn)輸出又被重定向到文件轉(zhuǎn)向器。因此,輸出都寫入文件dirlist

總結(jié)
- Linux中的每個文件都有一個與之關(guān)聯(lián)的相應(yīng)文件描述符
- 鍵盤是標(biāo)準(zhǔn)輸入設(shè)備,而屏幕是標(biāo)準(zhǔn)輸出設(shè)備
- “>”是輸出重定向運(yùn)算符?!?gt;>”將輸出附加到現(xiàn)有文件
- “<”是輸入重定向運(yùn)算符
- “>&”將一個文件的輸出重定向到另一個文件。
- 您可以使用相應(yīng)的文件描述符2重定向錯誤。






