咱們知道,Linux 中標準的輸入設備默認指的是鍵盤,標準的輸出設備默認指的是顯示器。而本節所要介紹的輸入、輸出重定向,徹底能夠從字面意思去理解,也就是:linux
一般是用文件或命令的執行結果來代替鍵盤做爲新的輸入設備,而新的輸出設備一般指的就是文件spa
對於輸入重定向來講,其須要用到的符號以及做用如表1 所示。.net
命令符號格式 | 做用 |
---|---|
命令 < 文件 | 將指定文件做爲命令的輸入設備 |
命令 << 分界符 | 表示從標準輸入設備(鍵盤)中讀入,直到遇到分界符才中止(讀入的數據不包括分界符),這裏的分界符其實就是自定義的字符串 |
命令 < 文件 1 > 文件 2 | 將文件 1 做爲命令的輸入設備,該命令的執行結果輸出到文件 2 中。 |
【例 1】
默認狀況下,cat 命令會接受標準輸入設備(鍵盤)的輸入,並顯示到控制檯,但若是用文件代替鍵盤做爲輸入設備,那麼該命令會以指定的文件做爲輸入設備,並將文件中的內容讀取並顯示到控制檯。
以 /etc/passwd 文件(存儲了系統中全部用戶的基本信息)爲例,執行以下命令:code
[root@localhost ~]# cat /etc/passwd #這裏省略輸出信息,讀者可自行查看 [root@localhost ~]# cat < /etc/passwd #輸出結果同上面命令相同
注意,雖然執行結果相同,但第一行表明是以鍵盤做爲輸入設備,而第二行代碼是以 /etc/passwd 文件做爲輸入設備。blog
【例 2】字符串
[root@localhost ~]# cat << 0 >c.biancheng.net >Linux >0 c.biancheng.net Linux
能夠看到,當指定了 0 做爲分界符以後,只要不輸入 0,就能夠一直輸入數據。get
【例 3】
首先,新建文本文件 a.tx,而後執行以下命令:io
[root@localhost ~]# cat a.txt [root@localhost ~]# cat < /etc/passwd > a.txt [root@localhost ~]# cat a.txt #輸出了和 /etc/passwd 文件內容相同的數據
能夠看到,經過重定向 /etc/passwd 做爲輸入設備,並輸出重定向到 a.txt,最終實現了將 /etc/passwd 文件中內容複製到 a.txt 中。table
相較於輸入重定向,咱們使用輸出重定向的頻率更高。而且,和輸入重定向不一樣的是,輸出重定向還能夠細分爲標準輸出重定向和錯誤輸出重定向兩種技術。
例如,使用 ls 命令分別查看兩個文件的屬性信息,但其中一個文件是不存在的,以下所示:class
[root@localhost ~]# touch demo1.txt [root@localhost ~]# ls -l demo1.txt -rw-rw-r--. 1 root root 0 Oct 12 15:02 demo1.txt [root@localhost ~]# ls -l demo2.txt <-- 不存在的文件 ls: cannot access demo2.txt: No such file or directory
上述命令中,demo1.txt 是存在的,所以正確輸出了該文件的一些屬性信息,這也是該命令執行的標準輸出信息;而 demo2.txt 是不存在的,所以執行 ls 命令以後顯示的報錯信息,是該命令的錯誤輸出信息。
再次強調,要想把本來輸出到屏幕上的數據轉而寫入到文件中,這兩種輸出信息就要區別對待。
在此基礎上,標準輸出重定向和錯誤輸出重定向又分別包含清空寫入和追加寫入兩種模式。所以,對於輸出重定向來講,其須要用到的符號以及做用如表 2 所示。
命令符號格式 | 做用 |
---|---|
命令 > 文件 | 將命令執行的標準輸出結果重定向輸出到指定的文件中,若是該文件已包含數據,會清空原有數據,再寫入新數據。 |
命令 2> 文件 | 將命令執行的錯誤輸出結果重定向到指定的文件中,若是該文件中已包含數據,會清空原有數據,再寫入新數據。 |
命令 >> 文件 | 將命令執行的標準輸出結果重定向輸出到指定的文件中,若是該文件已包含數據,新數據將寫入到原有內容的後面。 |
命令 2>> 文件 | 將命令執行的錯誤輸出結果重定向到指定的文件中,若是該文件中已包含數據,新數據將寫入到原有內容的後面。 |
命令 >> 文件 2>&1 或者 命令 &>> 文件 |
將標準輸出或者錯誤輸出寫入到指定文件,若是該文件中已包含數據,新數據將寫入到原有內容的後面。注意,第一種格式中,最後的 2>&1 是一體的,能夠認爲是固定寫法。 |
【例 4】新建一個包含有 "Linux" 字符串的文本文件 Linux.txt,以及空文本文件 demo.txt,而後執行以下命令:
[root@localhost ~]# cat Linux.txt > demo.txt [root@localhost ~]# cat demo.txt Linux [root@localhost ~]# cat Linux.txt > demo.txt [root@localhost ~]# cat demo.txt Linux <--這裏的 Linux 是清空原有的 Linux 以後,寫入的新的 Linux [root@localhost ~]# cat Linux.txt >> demo.txt [root@localhost ~]# cat demo.txt Linux Linux <--以追加的方式,新數據寫入到原有數據以後 [root@localhost ~]# cat b.txt > demo.txt cat: b.txt: No such file or directory <-- 錯誤輸出信息依然輸出到了顯示器中 [root@localhost ~]# cat b.txt 2> demo.txt [root@localhost ~]# cat demo.txt cat: b.txt: No such file or directory <--清空文件,再將錯誤輸出信息寫入到該文件中 [root@localhost ~]# cat b.txt 2>> demo.txt [root@localhost ~]# cat demo.txt cat: b.txt: No such file or directory cat: b.txt: No such file or directory <--追加寫入錯誤輸出信息