操作系統(tǒng):centos8
我們?cè)趕hell終端輸入命令,一般來說,輸出結(jié)果也會(huì)顯示在shell終端。如果我們使用輸出重定向符把輸出結(jié)果直接保存在文件中,而不是顯示在終端,這就是輸出重定向。
同理,我們使用輸入重定向符,直接以文件來作為命令的輸入,這就是輸入重定向。
我們先學(xué)一下以下三個(gè)概念:
- 標(biāo)準(zhǔn)輸入(STDIN,文件描述符為0):默認(rèn)從鍵盤輸入,為0時(shí)表示是從其他文件或命令的輸出。
- 標(biāo)準(zhǔn)輸出(STDOUT,文件描述符為1):默認(rèn)輸出到屏幕,為1時(shí)表示是文件。
- 錯(cuò)誤輸出(STDERR,文件描述符為2):默認(rèn)輸出到屏幕,為2時(shí)表示是文件。
ps:對(duì)于標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出來說,0和1不用寫,只有需要把錯(cuò)誤輸出重定向到文件時(shí)才需要寫2 。
1、輸出重定向
對(duì)于輸出重定向符有這些情況:
| 符號(hào) | 作用 |
|---|---|
| 命令 > 文件 | 將標(biāo)準(zhǔn)輸出重定向到一個(gè)文件中(清空原有文件的數(shù)據(jù)) |
| 命令 >> 文件 | 將標(biāo)準(zhǔn)輸出重定向到一個(gè)文件中(追加到原有內(nèi)容的后面) |
| 命令 2> 文件 | 將錯(cuò)誤輸出重定向到一個(gè)文件中(清空原有文件的數(shù)據(jù)) |
| 命令 2>> 文件 | 將錯(cuò)誤輸出重定向到一個(gè)文件中(追加到原有內(nèi)容的后面) |
| 命令 >> 文件 2>&1 | 將標(biāo)準(zhǔn)輸出與錯(cuò)誤輸出共同寫入到文件中(追加到原有內(nèi)容后面) |
下面是一些輸出重定向的例子:
(1) 將man命令的幫助文檔寫入到 ./test 文件中:
$ man man > ./test
(2) 向 ./test 文件中添加一行字:
$ echo "hello world" >> ./test
(3) 將 ls /hello 命令的錯(cuò)誤輸出到 ./test 文件中:
$ ls /hello 2> ./test
(4) 將 type echo hello 命令的標(biāo)準(zhǔn)輸出和錯(cuò)誤輸出共同寫入到 ./test 文件中:
$ type echo hello > ./test 2>&1
$ cat ./test
echo 是 shell 內(nèi)建
bash: type: hello: 未找到
(5) 丟棄結(jié)果:
如果你既不想把命令的輸出結(jié)果保存到文件,也不想把命令的輸出結(jié)果顯示到屏幕上,干擾命令的執(zhí)行,那么可以把命令的所有結(jié)果重定向到 /dev/null 文件中。
$ ls -a &> /dev/null
2、輸入重定向
對(duì)于輸入重定向有這些情況:
| 符號(hào) | 作用 |
|---|---|
| 命令 < 文件 | 將文件作為命令的標(biāo)準(zhǔn)輸入 |
| 命令 < 文件1 > 文件2 | 將文件1作為命令的標(biāo)準(zhǔn)輸入并將標(biāo)準(zhǔn)輸出到文件2 |
下面是一些輸入重定向的例子:
(1) 統(tǒng)計(jì) ./test 文件的行數(shù):
$ wc -l ./test
2 ./test
$ wc -l < ./test
2
(2) 統(tǒng)計(jì)./test 文件的行數(shù),并輸出到 ./test2 文件中:
$ wc -l < ./test > ./test2
$ cat ./test2
2