什么是重定向
將原本要輸出到屏幕的數(shù)據(jù)信息,重新定向到某個(gè)指定的文件中。
為何要使用重定向
1.當(dāng)屏幕輸出的信息很重要,而且希望保存重要的信息時(shí);
2.后臺(tái)執(zhí)行中的程序,不希望他干擾屏幕正常的輸出結(jié)果時(shí);
3.系統(tǒng)的例行命令,例如定時(shí)任務(wù)的執(zhí)行結(jié)果,希望可以存下來時(shí);
4.一些執(zhí)行命令,我們已經(jīng)知道他可能出現(xiàn)錯(cuò)誤信息,想將它直接丟掉時(shí);
5.錯(cuò)誤日志與正確日志需要分別輸出至不同的文件保存時(shí);
標(biāo)準(zhǔn)輸入,標(biāo)準(zhǔn)輸出,錯(cuò)誤輸出
當(dāng)運(yùn)行一個(gè)程序時(shí)通常會(huì)自動(dòng)打開三個(gè)標(biāo)準(zhǔn)文件,分別是標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出、錯(cuò)誤輸出

進(jìn)程將從標(biāo)準(zhǔn)輸入中得到數(shù)據(jù),將正常輸出打印至屏幕終端,將錯(cuò)誤的輸出信息也打印至屏幕終端
PS:進(jìn)程是使用文件描述符(file descriptors)來管理打開文件的

輸出、輸入重定向
輸出重定向
重定向就是用來改變標(biāo)準(zhǔn)輸出或者標(biāo)準(zhǔn)錯(cuò)誤輸出的一個(gè)指向
1> 標(biāo)準(zhǔn)輸出重定向(覆蓋)
1>>標(biāo)準(zhǔn)輸出重定向(追加)
2> 標(biāo)準(zhǔn)錯(cuò)誤輸出重定向(覆蓋)
2>>標(biāo)準(zhǔn)錯(cuò)誤輸出重定向(追加)
&>/dev/null 混合輸出(覆蓋)
&>>/tmp/t.log 混合輸出(追加)
案例1:標(biāo)準(zhǔn)輸出重定向(每次都會(huì)覆蓋文件之前的內(nèi)容)

[root@oldboy ~]# ifconfig ens32 > 1.txt
案例2:標(biāo)準(zhǔn)輸出重定向(在文件的尾部添加內(nèi)容)

[root@oldboy ~]# echo "123" >> 1.txt
案例3:錯(cuò)誤輸出重定向

將錯(cuò)誤輸出重定向至一個(gè)文件
[xc@oldboy ~]$ find /etc/ 2>1.txt
將正確輸出和標(biāo)準(zhǔn)輸出重定向至不同的文件文件
[xc@oldboy ~]$ find /etc/ >1.txt 2>2.txt
案例4:正確和錯(cuò)誤都輸入到相同的位置

將標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤輸出重定向到同一個(gè)文件,混合輸出
[xc@oldboy ~]$ find /etc/ &>1.txt
合并兩個(gè)文件至一個(gè)文件
[xc@oldboy ~]$ cat 1.txt 2.txt >3.txt
案例5:正確和錯(cuò)誤都輸入到相同文件

[xc@oldboy ~]$ find /etc/ >1.txt 2>&1
案例6:重定向到空設(shè)備/dev/null

[root@oldboy ~]# ls /root /error >1.txt 2>/dev/null
[root@oldboy ~]# ls /root /error >1.txt &>/dev/null
案例7:腳本中使用重定向
[root@oldboy ~]# vim ping2.sh
ping 10.0.0.200 -c 1 -W 1 >/dev/null
if [ $? -eq 0 ];then
echo "10.0.0.200 is up." >>up.txt
else
echo "10.0.0.200 is down." >>down.txt
fi
[root@oldboy ~]# chmod +x ping2.sh
[root@oldboy ~]# ./ping2.sh
輸入重定向
輸入重定向,即原本從鍵盤等上獲得的輸入信息,重定向由命令的輸出作為輸入。
案例1:從文件中讀入輸入
沒有改變輸入的方向,默認(rèn)鍵盤
[root@oldboy ~]# mail alice
Subject: hello
1111
2222
3333
. #結(jié)束
EOT
檢查是否收到郵件
[root@oldboy ~]# su - alice
[root@oldboyi ~]# mail
輸入重定向,來自于文件
[root@oldboyi ~]# mail -s "test01" alice < /etc/hosts
案例2
[root@oldboy ~]# grep "root" </etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
案例3:
[root@oldboy ~]# dd if=/dev/zero of=/file1.txt bs=1M count=20
[root@oldboy ~]# dd </dev/zero >/file2.txt bs=1M count=20
案例4:腳本中打印菜單的一種使用方法
[root@oldboy ~]# vim vm.sh
cat <<-EOF
+------------------- --- ---- --- ---- --- --- ---- --- --+ ||
| ====================== |
| 虛擬機(jī)基本管理 v5.0 |
| by xuliangwei |
| ====================== |
| 1. 安裝 KVM |
| 2. 安裝或重置 CentOS-6.9 |
| 3. 安裝或重置 CentOS-7.4 |
| 5. 安裝或重置 Windows-7 |
| 6. 刪除所有虛擬機(jī) |
| q. 退出管理程序 |
+------------------- --- ---- --- ---- --- --- ---- --- --+
EOF
進(jìn)程管理技術(shù)
1.管道操作符號(hào)“|”,主要用來連接左右兩個(gè)命令,將左側(cè)的命令的標(biāo)準(zhǔn)輸出,交給右側(cè)的標(biāo)準(zhǔn)輸入
PS:無法傳遞標(biāo)準(zhǔn)錯(cuò)誤輸出至后著命令

PS:管道命令符能進(jìn)一步掌握命令之間的搭配使用方法,進(jìn)一步提高命令輸出值的處理效率
2.管道中的tee技術(shù)

選項(xiàng):-a 追加
[root@oldboy ~]# ifconfig |grep "inet " |tee -a ip.txt |awk '{print $2}'
10.0.0.200
127.0.0.1
[root@oldboy ~]# cat ip.txt
inet 10.0.0.200 netmask 255.255.255.0 broadcast 10.0.0.255
inet 127.0.0.1 netmask 255.0.0.0
3.xargs 參數(shù)傳遞,主要讓一些不支持管道的命令可以使用管理技術(shù)
[root@oldboy ~]# which cat| xargs ls -l
-rwsr-xr-x. 1 xc root 54160 Oct 31 2018 /usr/bin/cat
[root@oldboy ~]# ls | xargs rm -fv
removed ‘1.txt’
removed ‘2.txt’