重定向
1.什么是重定向
将原本要输出到屏幕的数据信息,重新定向到某个指定的文件中。
2.为何要使用重定向
1.当屏幕输出的信息很重要,而且希望保存重要的信息时;
2.后台执行中的程序,不希望他干扰屏幕正常的输出结果时;
3.系统的例行命令, 例如定时任务的执行结果,希望可以存下来时;
4.一些执行命令,我们已经知道他可能出现错误信息, 想将他直接丢弃时;
5.错误日志与正确日志需要分别输出至不同的文件保存时;
3.当运行一个程序时通常会自动打开三个标准文件,分别是标准输入、标准输出、错误输出
进程是使用文件描述符(file descriptors)来管理打开的文件
4.标准输入输出 错误\ 与重定向之间有什么关系?
重定向就是用来改变标准输出 或者标准错误输出的一个指向.
1> 标准输出重定向 (覆盖)
1>> 标准输出重定向 (追加)
2> 标准错误输出重定向 (覆盖)
2>> 标准错误输出重定向 (追加)
&> /dev/null 混合输出 (覆盖)
&>> /tmp/t.log 混合输出 (追加)
标准输出重定向(每次都会覆盖文件)
[root@renzhiqiang ~]# echo "123" > 1.txt
[root@renzhiqiang ~]# cat 1.txt
123
[root@renzhiqiang ~]# echo "12345" > 1.txt
[root@renzhiqiang ~]# cat 1.txt
12345
标准输出重定向(会往文件的尾部在添加内容)
[root@renzhiqiang ~]# echo "123456" >> 1.txt
[root@renzhiqiang ~]# cat 1.txt
12345
123456
[root@renzhiqiang ~]# echo "wq" >>1.txt
[root@renzhiqiang ~]# cat 1.txt
12345
123456
wq
错误输出重定向
[yu@renzhiqiang ~]su - yu
[yu@renzhiqiang ~]find /etc/
[yu@renzhiqiang ~]find /etc/ 2>> err.txt
[yu@renzhiqiang ~]cat err
[yu@renzhiqiang ~]cat err.txt
正确和错误都输入到相同位置
[yu@renzhiqiang ~]find /etc &> 1.txt
[yu@renzhiqiang ~]vim 1.txt
[root@renzhiqiang ~]# ls /root /error >ab
ls: cannot access /error: No such file or directory
[root@renzhiqiang ~]# ls /root /error >ab &> 2.txt
[root@renzhiqiang ~]# cat 2.txt
ls: cannot access /error: No such file or directory
/root:
1.txt
2.txt
ab
ip.ttx
重定向到空设备/dev/null
[root@renzhiqiang ~]# ll /root/ /error
ls: cannot access /error: No such file or directory
/root/:
total 112
-rw-r--r-- 1 root root 109260 Aug 9 14:38 1.txt
-rw-r--r-- 1 root root 81 Aug 9 14:46 2.txt
-rw-r--r-- 1 root root 0 Aug 9 14:46 ab
-rw-r--r-- 1 root root 0 Aug 9 14:22 ip.ttx
[root@renzhiqiang ~]# ll /root/ /error 2> /dev/null
/root/:
total 112
-rw-r--r-- 1 root root 109260 Aug 9 14:38 1.txt
-rw-r--r-- 1 root root 81 Aug 9 14:46 2.txt
-rw-r--r-- 1 root root 0 Aug 9 14:46 ab
-rw-r--r-- 1 root root 0 Aug 9 14:22 ip.ttx
脚本中的重定向
[root@renzhiqiang ~]# vim ping.sh
ping 10.0.0.200 -W 1 -c 1 &> /dev/null
if [ $? -eq 0 ];then
echo "10.0.0.200 up " >> up.txt
else
echo "10.0.0.200 down" >> down.txt
fi
"ping.sh" 7L, 146C written
[root@renzhiqiang ~]# bash ping.sh
[root@renzhiqiang ~]# ./ping.sh
-bash: ./ping.sh: Permission denied
[root@renzhiqiang ~]# ll ping.sh
-rw-r--r-- 1 root root 146 Aug 9 13:11 ping.sh
[root@renzhiqiang ~]# chmod a+x ping.sh
[root@renzhiqiang ~]# ll ping.sh
-rwxr-xr-x 1 root root 146 Aug 9 13:11 ping.sh
[root@renzhiqiang ~]# ./ping.sh
< 输入重定向
; cmd1 ; cmd2 无论前者命令成功还是失败,都执行后者命令
&& cmd1 && cmd2 前者命令执行成功,后者命令才会执行
|| cmd1 || cmd2 前者命令执行失败,后者命令才会执行
& 将程序放入后台执行 ( screen 将程序放入后台 )
[root@renzhiqiang ~]# lss ; ls
-bash: lss: command not found
1.txt 2.txt ab ip.ttx
[root@renzhiqiang ~]# ls && ls -l
1.txt 2.txt ab ip.ttx
total 112
-rw-r--r-- 1 root root 109260 Aug 9 14:38 1.txt
-rw-r--r-- 1 root root 81 Aug 9 14:46 2.txt
-rw-r--r-- 1 root root 0 Aug 9 14:46 ab
-rw-r--r-- 1 root root 0 Aug 9 14:22 ip.ttx
[root@renzhiqiang ~]# lls && ls -l
-bash: lls: command not found
[root@renzhiqiang ~]# lls || ls -l
-bash: lls: command not found
total 112
-rw-r--r-- 1 root root 109260 Aug 9 14:38 1.txt
-rw-r--r-- 1 root root 81 Aug 9 14:46 2.txt
-rw-r--r-- 1 root root 0 Aug 9 14:46 ab
-rw-r--r-- 1 root root 0 Aug 9 14:22 ip.ttx
进程管道
什么是管道
管道操作符号 "|" ,主要用来连接左右两个命令, 将左侧的命令的标准输出, 交给右侧命令的标准输入
PS: 无法传递标准错误输出至后者命令
将/etc/passwd 中的用户按 UID 大小排序
[root@renzhiqiang ~] awk -F ":" '{print $3}' /etc/passwd|sort -n
统计当前/etc/passwd 中用户使用的 shell 类型
[root@renzhiqiang ~] [root@renzhiqiang ~]awk -F ":" '{print $NF}' /etc/passwd|sort -n|uniq -c
打印根分区已用空间的百分比(仅打印数字)
[root@renzhiqiang ~] [root@renzhiqiang ~]df|grep "\/$"
[root@renzhiqiang ~] df|grep "\/$"| awk '{print $5}'
[root@renzhiqiang ~] df|grep "\/$"| awk '{print $5}'|awk -F "%" '{print $1}'
管道中的tee技术
[root@renzhiqiang ~] ip addr|grep "inet "
[root@renzhiqiang ~] ip addr|grep "inet "|awk -F "/" '{print $1}'|awk '{print $2}'
[root@renzhiqiang ~] ip addr|grep "inet "|tee ip.txt|awk -F "/" '{print $1}'|awk '{print $2}'
[root@renzhiqiang ~] cat ip.txt
重定向与 tee 他们在使用过程中有什么区别
[root@xuliangwei ~]# date > date.txt 直接将内容写入date.txt文件中
[root@xuliangwei ~]# date |tee date.txt
命令执行会输出至屏幕,但会同时保存一份date.txt文件中
[root@renzhiqiang ~]# date > date.txt
[root@renzhiqiang ~]# date |tee date.txt
Fri Aug 9 16:17:16 CST 2019
[root@renzhiqiang ~]# cat date.txt
Fri Aug 9 16:17:16 CST 2019
xargs参数传递,主要让一些不支持管道的命令可以使用管道技术
which cat|xargs ls- l
ls |xargs rm -fv
ls |xargs cp -rvt /tmp/ -或-> ls | xargs -I {} cp -rv {} /tmp/
ls |xargs mv -t /tmp/ -或-> ls | xargs -I {} mv {} /tmp
[root@renzhiqiang ~]# ls
1.txt 2.txt ab date.txt ip.ttx ip.txt
[root@renzhiqiang ~]# ls |xargs rm -f
[root@renzhiqiang ~]# ls
[root@renzhiqiang ~]#
网友评论