首页 > 系统相关 >Linux 命令管道介绍

Linux 命令管道介绍

时间:2024-08-24 19:53:21浏览次数:10  
标签:grep etc passwd edenluo 命令 管道 com Linux root

今天给伙伴们分享一下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

相关文章

  • 驱动开发系列11 - Linux Graphics 图形栈概述(二)
    目录一:GPU和硬件        现代GPU功能概览:    硬件结构:     屏幕驱动:        屏幕连接器:    屏幕CRT控制器:        CPU与GPU通信:        现代主机通信总线介绍:    通信方法:       ......
  • linux: ipset命令
    一,ipset命令功能:1,ipset是一个用于管理IP地址集合的工具,主要用于‌Linux系统中高效处理大量IP地址。它提供了创建、添加、删除、查询和测试集合的操作 2,查看ipset的文件路径:[lhdop@blog~]$whereisipsetipset:/usr/sbin/ipset/usr/share/man/man8/ipset.8.gz查......
  • Tesla 开发者 API 指南:通过Http发送命令
    前言特斯拉提供两种与汽车通信的方式。一种是使用API通过互联网,另一种是使用BLE连接。特斯拉现在只能接受车辆命令SDK(vehiclecommandSDK)方式发送命令,该SDK使用Http-Proxy服务器将命令转发给车辆。除了验证oAuth令牌之外,特斯拉正在转向一种更安全的方式将命令传......
  • 进程间通信(管道,共享内存)包含原理剖析
    通信的本质因为进程具有独立性,我们要进行通信的成本一定不低,我们要先让不同的进程看到同一份资源,之后再进行通信。所以,通信的本质是:1.操作系统直接或间接给通信双方的进程提供内存空间2.要通信的进程,必须看到同一份资源!不同的通信类型的本质就是:上面所说的资源是OS中哪一个模......
  • 【Linux提权】check-system文件
    【此次省略一万字.........】成功突破边界!提权:看了sudo-l,发现一个shutdown命令可以,但是这名字应该是重启吧。。。先跑一跑linpeas.sh,试了一下跑出来的CVE,没有成功找一找具有root命令并且我们可以写权限的文件:find/-userroot-typef-perm-o=rw-ls2>/dev/null|grep......
  • <architecture>-linux-gnu-gcc
    ./configure--enable-win64yuminstalllibstdc++-*.i686yuminstallglibc-*.i686yuminstalllibgcc.i686sudodpkg--add-architecturei386sudoaptupdate安装相应的32位库,库名后面加上:i386,比如libc6:i386,libstdc++6:i386,libncurses5:i386sudodpkg--add-architec......
  • 嵌入式Linux项目-电子产品量产工具
     声明:项目来自韦东山老师百问网嵌入式专家-韦东山嵌入式专注于嵌入式课程及硬件研发(100ask.net)https://www.100ask.net/video/detail/p_5f04515ce4b036f1c0cf4254GIT下载代码,如下所示:$gitclonehttps://e.coding.net/weidongshan/01_all_series_quickstart.git1.项......
  • linux安装mysql5.7
    一安装前准备1、检查是否已经安装过mysql,执行命令rpm-qa|grepmysql如果已存在,则执行删除命令后边为Mysql目录rpm-e--nodepsmysql-xxxx 2、检查mysql用户组和用户是否存在,如果没有,则创建cat/etc/group|grepmysqlcat/etc/passwd|grepmysqlgroupaddmysql......
  • Linux 系统上非 root 用户在cmake时使用 pybind11
    Linux系统上非root用户在cmake时使用pybind11标签:linuxAI摘要:非root用户可以通过在Linux系统上使用pip安装pybind11,随后使用命令获取cmake路径,并在CMakeLists.txt中手动添加该路径以便于CMake找到pybind11。具体步骤包括安装pybind11、获取cmake目录并在CMakeLists.tx......
  • [Linux]快速入门
    基础知识介绍Linux是一个开源,免费的操作系统,特点是稳定,安全,处理多并发其他操作系统:windowsOSAndroidMacOSUnix主要发行版:Linux是一个操作系统的内核,可以理解为芯片,发行版就是基于芯片衍生的产品,可以理解为各品牌手机源码地址:https://www.kernel......