什么是重定向
将原本要输出到屏幕的数据信息,重新定向到某个指定的文件中。
为何要使用重定向
1.当屏幕输出的信息很重要,而且希望保存重要的信息时;
2.后台执行中的程序,不希望他干扰屏幕正常的输出结果时;
3.系统的例行命令,例如定时任务的执行结果,希望可以存下来时;
4.一些执行命令,我们已经知道他可能出现错误信息,想将它直接丢掉时;
5.错误日志与正确日志需要分别输出至不同的文件保存时;
标准输入,标准输出,错误输出
当运行一个程序时通常会自动打开三个标准文件,分别是标准输入、标准输出、错误输出

image.png
进程将从标准输入中得到数据,将正常输出打印至屏幕终端,将错误的输出信息也打印至屏幕终端
PS:进程是使用文件描述符(file descriptors)来管理打开文件的

image.png
输出、输入重定向
输出重定向
重定向就是用来改变标准输出或者标准错误输出的一个指向
1> 标准输出重定向(覆盖)
1>>标准输出重定向(追加)
2> 标准错误输出重定向(覆盖)
2>>标准错误输出重定向(追加)
&>/dev/null 混合输出(覆盖)
&>>/tmp/t.log 混合输出(追加)
案例1:标准输出重定向(每次都会覆盖文件之前的内容)

image.png
[root@oldboy ~]# ifconfig ens32 > 1.txt
案例2:标准输出重定向(在文件的尾部添加内容)

image.png
[root@oldboy ~]# echo "123" >> 1.txt
案例3:错误输出重定向

image.png
将错误输出重定向至一个文件
[xc@oldboy ~]$ find /etc/ 2>1.txt
将正确输出和标准输出重定向至不同的文件文件
[xc@oldboy ~]$ find /etc/ >1.txt 2>2.txt
案例4:正确和错误都输入到相同的位置

image.png
将标准输出和标准错误输出重定向到同一个文件,混合输出
[xc@oldboy ~]$ find /etc/ &>1.txt
合并两个文件至一个文件
[xc@oldboy ~]$ cat 1.txt 2.txt >3.txt
案例5:正确和错误都输入到相同文件

image.png
[xc@oldboy ~]$ find /etc/ >1.txt 2>&1
案例6:重定向到空设备/dev/null

image.png
[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:从文件中读入输入
没有改变输入的方向,默认键盘
[root@oldboy ~]# mail alice
Subject: hello
1111
2222
3333
. #结束
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
+------------------- --- ---- --- ---- --- --- ---- --- --+ ||
| ====================== |
| 虚拟机基本管理 v5.0 |
| by xuliangwei |
| ====================== |
| 1. 安装 KVM |
| 2. 安装或重置 CentOS-6.9 |
| 3. 安装或重置 CentOS-7.4 |
| 5. 安装或重置 Windows-7 |
| 6. 删除所有虚拟机 |
| q. 退出管理程序 |
+------------------- --- ---- --- ---- --- --- ---- --- --+
EOF
进程管理技术
1.管道操作符号“|”,主要用来连接左右两个命令,将左侧的命令的标准输出,交给右侧的标准输入
PS:无法传递标准错误输出至后着命令

image.png
PS:管道命令符能进一步掌握命令之间的搭配使用方法,进一步提高命令输出值的处理效率
2.管道中的tee技术

image.png
选项:-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 参数传递,主要让一些不支持管道的命令可以使用管理技术
[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’