美文网首页
第十二天 重定向 管道

第十二天 重定向 管道

作者: 杨小倪 | 来源:发表于2019-08-10 17:03 被阅读0次

今日内容

  • 1 . 什么是重定向?
  • 2 . 为什么要使用重定向?
  • 3 . 学习重定向需要了解的标准输入、标准输出、错误输出
  • 4 . 重定向、追加重定向、案例演示
  • 5 . 进程管道技术

1.什么是重定向?

  • 重定向就是将原本要输出到屏幕的数据信息,重新定向到某个指定的文件中。

2.为什么要使用重定向

  • 1 . 当屏幕输出的信息很重要时,而且希望保存重要信息时
  • 2 . 后台执行中的程序,不希望他干扰屏幕正常的输出结果时
  • 3 . 系统的例行命令,例如定时任务的执行结果,希望可以保存下来时;
  • 4 . 一些执行命令,我们已经知道了他可能会出现错误信息,想将他直接丢弃时;
  • 5 . 错误的日志与正确的日志信息需要分别输出之不同的文件,进行保存之时;

重定向的一些符号

<  输出重定向
;cmd1;cmd2无论前者命令执行成功与否,后者命令都执行
&&   cmd&&cmd 前者命令执行成功,后者命令才会执行
|| cmd1|| cmd2 前者命令执行失败,后者命令才会执行
&  将程序放入后台执行(screen 将程序放入后台)

3.了解重定向的标准输入、标准输出、错误输出

当运行一个程序时通常会自动打开三个标准文件,分别是标准输入、标准输出、错误输出


image.png

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

image.png

以 cat 命令为例, cat 命令的功能是从命令行给出的文件中读取数据,并将这些数据直接送到标准输出。若使用如下命令:

#会把文件/etc/passwd的内容输出显示到屏幕上
[root@xuliangwei ~]# cat /etc/passwd
image.png

输出重定向

image.png
image.png
image.png
image.png
image.png
image.png

5.进程管道技术

1.什么是管道

管道操作符“|”,主要用来连接左右两个命令,将左侧的命令的标准输出,交给右侧命令的标准输入
PS:无法传递标准错误输出给后者

管道流程图

image.png

管道使用案例

案例一:将/etc/passwd中的用户按uid大小排序

[root@xuliangwei ~]# sort -t":" -k3 -n /etc/passwd
[root@xuliangwei ~]# sort -t":" -k3 -n /etc/passwd -r
[root@xuliangwei ~]# sort -t":" -k3 -n /etc/passwd |head

案例2: 统计当前/etc/passwd 中用户使用的 shell 类型

#思路:取出第七列(shell) | 排序(把相同归类)| 去重
[root@xuliangwei ~]# awk -F: '{print $7}' /etc/passwd
[root@xuliangwei ~]# awk -F: '{print $7}' /etc/passwd |sort
[root@xuliangwei ~]# awk -F: '{print $7}' /etc/passwd |sort |uniq
[root@xuliangwei ~]# awk -F: '{print $7}' /etc/passwd |sort |uniq -c

案例3: 统计网站的访问情况 top 20

#思路: 打印所有访问的连接 | 过滤访问网站的连接 | 打印用户的 IP | 排序 | 去重

[root@xuliangwei ~]# yum -y install httpd
[root@xuliangwei ~]# systemctl start httpd
[root@xuliangwei ~]# systemctl stop firewalld

[root@xuliangwei ~]# ss -an |grep :80 |awk -F":" '{print $8}' |sort |uniq -c
[root@xuliangwei ~]# ss -an |grep :80 |awk -F":" '{print $8}' |sort |uniq -c |sort -k1 -rn |head -n 20

PS: 管道命令符能让大家能进一步掌握命令之间的搭配使用方法,进一步提高命令输出值的处理效率。

管道中的tee技术

image.png
#选项: -a追加
[root@xuliangwei ~]# ip addr |grep 'inet ' |tee ip.txt |awk -F"/" '{print $1}' |awk '{print $2}'
127.0.0.1
10.0.0.100

[root@xuliangwei ~]# cat ip.txt
inet 127.0.0.1/8 scope host lo
inet 10.0.0.100/24 brd 192.168.69.255 scope global ens32

重定向与tee的区别

[root@xuliangwei ~]# date > date.txt    #直接将内容写入date.txt文件中
[root@xuliangwei ~]# date |tee date.txt #命令执行会输出至屏幕,但会同时保存一份至date.txt文件中

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

相关文章

网友评论

      本文标题:第十二天 重定向 管道

      本文链接:https://www.haomeiwen.com/subject/giyrjctx.html