重定向作用
一個(gè)進(jìn)程默認(rèn)會(huì)打開標(biāo)準(zhǔn)輸入铃彰、標(biāo)準(zhǔn)輸出绍豁、錯(cuò)誤輸出三個(gè)文件描述符。
重定向可以讓我們的程序的標(biāo)準(zhǔn)輸出牙捉、錯(cuò)誤輸出的信息重定向文件里竹揍,那么這里還可以將文件的內(nèi)容代替鍵盤作為一種標(biāo)準(zhǔn)輸入的方式。
重定向符號(hào)
輸入重定向符號(hào)"
<
"輸出重定向符號(hào)"
>
"邪铲,">>
"芬位,"2>
","&>
"
輸入重定向功能
01 輸入重定向符號(hào)"<
"的作用:
會(huì)把文件的內(nèi)容當(dāng)做參數(shù)輸入到進(jìn)程带到,如下例子:
[root@omp120 home]# cat file.txt
hello
[root@omp120 home]# read a < file.txt
[root@omp120 home]# echo $a
hello
file.txt文件的內(nèi)容是hello昧碉,上述的例子就是把file.txt的內(nèi)容重定向到a
這個(gè)變量,并把a
變量打印出來阴孟。
輸出重定向功能
01 輸出重定向符號(hào)">
"的作用:
會(huì)把文件內(nèi)容清空,在把輸出內(nèi)容重定向到指定的文件里税迷,并且如果文件不存在則創(chuàng)建永丝,如下例子:
[root@lincoding tmp]# echo 123 > /tmp/test
[root@lincoding tmp]# cat /tmp/test
123
[root@lincoding tmp]# echo abc > /tmp/test
[root@lincoding tmp]# cat /tmp/test
abc
02 輸出重定向符號(hào)">>
"的作用:
會(huì)把輸出的內(nèi)容追加到指定的文件里,該文件不會(huì)被清空箭养,并且如果文件不存在則創(chuàng)建慕嚷,如下例子:
[root@lincoding tmp]# echo 123 >> /tmp/test
[root@lincoding tmp]# cat /tmp/test
123
[root@lincoding tmp]# echo abc >> /tmp/test
[root@lincoding tmp]# cat /tmp/test
123
abc
03 輸出重定向符號(hào)"2>
"的作用:
是把進(jìn)程錯(cuò)誤輸出的內(nèi)容重定向到指定的文件里,如下例子:
[root@lincoding home]# abc
-bash: abc: command not found
[root@lincoding home]# abc > error.txt
-bash: abc: command not found
[root@lincoding home]# cat error.txt
[root@lincoding home]#
[root@lincoding home]# abc 2> error.txt
[root@lincoding home]# cat error.txt
-bash: abc: command not found
以上的演示結(jié)果可以得知毕泌,abc不是Linux的命令喝检,執(zhí)行了會(huì)報(bào)錯(cuò)說abd命令未找到的錯(cuò)誤信息輸出,那么這個(gè)錯(cuò)誤信息需要用2>
重定向符才能把進(jìn)程錯(cuò)誤輸出的內(nèi)容重定向到指定的文件撼泛。
04 輸出重定向符號(hào)"&>
"的作用:
無論進(jìn)程輸出的信息是正確還是錯(cuò)誤的信息挠说,都會(huì)重定向到指定的文件里,如下例子:
[root@lincoding home]# abc &> file.txt
[root@lincoding home]# cat file.txt
-bash: abc: command not found
[root@lincoding home]# free -m &> file.txt
[root@lincoding home]# cat file.txt
total used free shared buffers cached
Mem: 980 918 62 0 71 547
-/+ buffers/cache: 299 681
Swap: 1983 0 1983
輸入重定向和輸出重定向組合使用
輸入和輸出也是可以組合使用的愿题,那么這個(gè)組合主要應(yīng)用于在Shell腳本當(dāng)中產(chǎn)生新的配置文件的場景损俭,如下Shell腳本例子:
#!/bin/bash
cat > /home/a.sh << EOF
echo "hello bash"
EOF
把cat
命令的輸出重定向到/root/a.sh
腳本文件,并且用輸入重定向把EOF為腳本結(jié)尾潘酗。那么通過執(zhí)行這個(gè)腳本杆兵,就會(huì)產(chǎn)生一個(gè)內(nèi)容為echo "hello bash"
文件名為a.sh
的腳本文件。
執(zhí)行結(jié)果:
[root@lincoding home]# ./test.sh
[root@lincoding home]# ls -l a.sh
-rw-r--r--. 1 root root 18 Sep 27 16:41 a.sh
[root@lincoding home]# chmod u+x a.sh
[root@lincoding home]# cat a.sh
echo "hello bash"
[root@lincoding home]# ./a.sh
hello bash
小結(jié)
以上的內(nèi)容就是關(guān)于輸入和輸出重定向的用法仔夺,那么大家要注意輸出重定向包括覆蓋和追加模式琐脏,無論是覆蓋還是追加模式,盡量不要用于我們的系統(tǒng)配置文件,那么在應(yīng)用之前大家要注意對系統(tǒng)文件進(jìn)行備份日裙。
輸入和輸出重定向吹艇,還可以組合使用,一般在Shell腳本當(dāng)中去產(chǎn)生新的配置文件的時(shí)候阅签,會(huì)用到它們的組合的方式掐暮。