今天给伙伴们分享一下Linux 命令管道,希望看了有所收获。
我是公众号「想吃西红柿」「云原生运维实战派」作者,对云原生运维感兴趣,也保持时刻学习,后续会分享工作中用到的运维技术,在运维的路上得到支持和共同进步!
如果伙伴们看了文档觉得有用,欢迎大家关注我的公众号,获取相关文档。爱运维,爱生活。
一、进程管道技术
- 管道操作符号 “|” 连接左右两个命令, 将左侧的命令的标准输出, 交给右侧命令的标准输入
- 格式: cmd1 | cmd2 […|cmdn]
1、匿名管道
[[email protected] ~]# ll /dev/ | less
[[email protected] ~]# ps aux | grep 'sshd'
[[email protected] ~]# rpm -qa | grep 'httpd' //查询所有安装的软件包,过滤包含httpd的包
[[email protected] ~]# yum list | grep 'httpd'
2、命名管道(了解)
创建命名管道文件:
[[email protected] ~]# mkfifo /tmp/tmpfifo
[[email protected] ~]# file /tmp/tmpfifo
/tmp/tmpfifo: fifo (named pipe)
把指令结果放入管道先:
[[email protected] ~]# rpm -qa > /tmp/tmpfifo
新建一个终端从命名管道内拿内容:
[[email protected] ~]# grep bash /tmp/tmpfifo
bash-4.1.2-14.el6.x86_64
把指令结果放入管道先:
[[email protected] ~]# cat /etc/passwd > /tmp/tmpfifo
新建一个终端从命名管道内拿内容:
[[email protected] ~]# grep root /tmp/tmpfifo
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
3、管道练习实例
1、案例1: 将/etc/passwd 中的用户按 UID 大小排序
[[email protected] ~]# sort -t":" -k3 -n /etc/passwd
[[email protected] ~]# sort -t":" -k3 -n /etc/passwd -r
[[email protected] ~]# sort -t":" -k3 -n /etc/passwd |head
-t: 用来指定分隔符 -k 指定列数 -n 以数值的方式排序
2、案例2: 统计出最占CPU的5个进程
[[email protected] ~]# ps aux --sort=-%cpu |head -6
-%cpu 是从大到小(倒序) +%cpu 从小到大(正序)
3、案例3:统计当前/etc/passwd中用户使用的shell类型(目前了解)
思路:取出第七列(shell) | 排序(把相同归类)| 去重
[[email protected] ~]# awk -F: '{print $7}' /etc/passwd
[[email protected] ~]# awk -F: '{print $7}' /etc/passwd |sort
[[email protected] ~]# awk -F: '{print $7}' /etc/passwd |sort |uniq
[[email protected] ~]# awk -F: '{print $7}' /etc/passwd |sort |uniq -c
131 /bin/bash
1 /bin/sync
1 /sbin/halt
63 /sbin/nologin
1 /sbin/shutdown
-F: 指定字段分隔符
$7 第七个字段
4、案例4: 统计网站的访问情况 top 20(目前了解)
思路:打印所有访问的连接 | 过滤访问网站的连接 | 打印用户的IP | 排序 | 去重
[[email protected] ~]# yum -y install httpd
[[email protected] ~]# systemctl start httpd
[[email protected] ~]# systemctl stop firewalld
[[email protected] ~]# ss -an |grep :80 |awk -F":" '{print $8}' |sort |uniq -c
4334 192.168.0.66
1338 192.168.10.11
1482 192.168.10.125
44 192.168.10.183
3035 192.168.10.213
375 192.168.10.35
362 192.168.10.39
[[email protected] ~]# ss -an |grep :80 |awk -F":" '{print $8}' |sort |uniq -c |sort -k1 -rn |head -n 20
5、案例5: 打印当前所有IP(目前了解)
[[email protected] ~]# ip addr |grep 'inet ' |awk '{print $2}' |awk -F"/" '{print $1}'
127.0.0.1
192.168.2.115
6、案例6:打印根分区已用空间的百分比(仅打印数字)(目前了解)
[[email protected] ~]# df -P |grep '/$' |awk '{print $5}' |awk -F"%" '{print $1}'
4、tee管道技术(了解)
-
Linux tee命令用于读取标准输入的数据,并将其内容输出成文件。
-
tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。
语法
[[email protected] ~]# tee [-ai][--help][--version][文件...]
参数:
- -a或–append 附加到既有文件的后面,而非覆盖它.
- -i或–ignore-interrupts 忽略中断信号。
- –help 在线帮助。
- –version 显示版本信息。
实例
[[email protected] ~]# date > date.txt
[[email protected] ~]# date |tee date.txt
使用指令"tee"将用户输入的数据同时保存到文件"file1"和"file2"中,输入如下命令:
[[email protected] ~]# tee file1 file2 #在两个文件中同时输入内容内容
以上命令执行后,将提示用户输入需要保存到文件的数据,如下所示:
My Linux #提示用户输入数据
My Linux #输出数据,进行输出反馈
此时,可以分别打开文件"file1"和"file2",查看其内容是否均是"My Linux"即可判断指令"tee"是否执行成功。
5、参数传递xargs(了解)
- 将参数列表转换成小块分段传递给其他命令
- 读入stdin的数据转换为参数添加至命令后面
- 让一些不支持管道的命令可以使用管道。
- 管道命令符能让大家能进一步掌握命令之间的搭配使用方法,进一步提高命令输出值的处理效率。
- xargs 是给命令传递参数的一个过滤器,可以将管道或标准输入的数据转换成参数,默认的命令是 echo
[[email protected] ~]# grep "/sbin/nologin" /etc/passwd | wc -l
33
[[email protected] ~]# head -5 /etc/passwd|tail -1
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
使用grep过滤输出信息
[[email protected] ~]# ls -l /etc |grep pass
-rw-r--r-- 1 root root 4653 Dec 2 15:54 passwd
-rw-r--r--. 1 root root 4606 Dec 2 15:54 passwd-
-rw-r--r--. 1 root root 1454 Sep 23 2014 passwd.OLD
//管道和标准输出以及标准错误输出, 使用普通用户执行如下命令
[[email protected] ~]# find /etc/ -name "p*"|grep passwd
[[email protected] ~]# find /etc/ -name "p*"|grep passwd > a
[[email protected] ~]# find /etc/ -name "p*"|grep passwd > b
[[email protected] ~]# find /etc/ -name "p*"|grep passwd &> ab
[[email protected] ~]# find . -name wing.txt | xargs -i cp {} /root/Desktop
加-i 参数直接用 {}就能代替管道之前的标准输出的内容
[[email protected] ~]# find . -name wing.txt | xargs -i cp {} /root/Desktop
防止被查找到的文件过多,导致内存溢出错误
i缺省使用{}作为占位符
[root@localhost ~]# echo "a b c d aa bb abc"|xargs -t touch
[[email protected] ~]# ls *a | xargs -i echo {}
通过-I指定占位符,自定义占位符
[[email protected] ~]# ls *a | xargs -I % echo %
[root@localhost ~]# echo "file1 file2 file3"|xargs -t -I % sh -c 'touch %;ls -l %'
二、命令管道实战练习
1、简述输出/输入重定向的意义。
2、使用 > ,>> , 2>,2>> , <, 练习重定向的使用。
3、简述管道的作用。
4、举例练习管道 | 和xargs的使用。
5、破解centos7/8密码
grub界面--> e --> vmlinuz那行最后添加 init=/bin/sh --> ctrl+x --> # mount -o remount,rw /
标签:grep,etc,passwd,edenluo,命令,管道,com,Linux,root From: https://blog.csdn.net/mohuanfenghuang/article/details/141442952如果有版帮助,帮忙免费的关注一下**公众号「想吃西红柿」「云原生运维实战派」**后续会有更多实用的运维技术分享给伙伴们,您的关注就是我最大的成就。