Linux管道符

linux · 浏览次数 : 0

小编点评

管道符(|)用于在Linux命令中将一个命令的输出作为另一个命令的输入。这在处理多个命令或处理大量数据时非常有用。 以下是一些常见的管道符用法: 1. 使用管道符将命令的输出传递给另一个命令: ``` command1 | command2 ``` 例如,要将`ls`命令的输出传递给`grep`命令以查找包含某个特定单词的文件名,可以使用以下命令: ``` ls | grep 'keyword' ``` 2. 使用管道符将多个命令的输出连接起来: ``` command1 | command2 | command3 ``` 例如,要将`ls`命令的输出传递给`grep`命令,然后将结果传递给`awk`命令以统计包含某个特定单词的文件数量,可以使用以下命令: ``` ls | grep 'keyword' | awk '{print $1}' ``` 3. 使用管道符将命令的输出重定向到另一个命令: ``` command1 > output.txt ``` 例如,要将`ls`命令的输出重定向到名为`output.txt`的文件中,可以使用以下命令: ``` ls > output.txt ``` 4. 使用管道符将命令的输出传递给`xargs`命令进行批量操作: ``` command1 | xargs command2 ``` 例如,要将`ls`命令的输出传递给`xargs`命令以批量重命名文件,可以使用以下命令: ``` ls | xargs rename .txt .log ``` 5. 使用管道符结合正则表达式进行模式匹配: ``` grep 'pattern' file.txt ``` 例如,要在`file.txt`中查找包含特定模式的行,可以使用以下命令: ``` grep 'keyword' file.txt ``` 6. 使用管道符结合`find`命令查找文件: ``` find /path/to/search -type f -name 'pattern' ``` 例如,要在`/home`目录及其子目录中查找所有以`.txt`结尾的文件,可以使用以下命令: ``` find /home -type f -name '*.txt' ``` 这些是管道符的基本用法,它们可以帮助您更有效地处理数据和执行任务。

正文

十五、管道符

管道符和grep命令结合的是最多的
管道符的标准定义:
管道是一种通信机制,常用语进程之间的通信。它表现出来的形式:将前一个的标准输出(stdout)作为后面命令的标准输入(stdin)

image-20231121234901537

利用grep和管道符来查看用户信息

用户信息存储在 /etc/passwd中
我们自己创建的用户的ID号从1000开始
zwj:x:1002:1003::/home/zwj:/bin/bash
通过grep命令可以确定用户是不是存在
grep username /etc/passwd

比方说我想要查找xuruizhao用户的信息
有两种方法
1、不用管道符
grep username /etc/passwd
2、用管道符
[root@bogon ~]# cat /etc/passwd | grep 'xuruizhao' 
xuruizhao:x:1001:1001::/home/xuruizhao:/bin/bash

管道符结合find命令搜索信息
找出系统中所有的.txt的文件,找到在/home目录下的文件
[root@bogon ~]# find / -name '*.txt'  ### 找到根目录下所有的txt文件
[root@bogon ~]# find / -name '*.txt' | grep '/home' ###  在、home目录下有哪些txt的文件
有一个问题:我们通过find命令找到的仅仅是一行行的文本,并不是把文件筛选出来了,也可以理解为是筛选出了文件名,并不是文件,我们不可以通过find命令找到的文件名去对对应的文件进行文件操作
[root@bogon opt]# find / -name '*.txt' | grep 'apple'  ## 这个命令是过滤出文件名中含有apple的.txt文件,并不是文件内容中含有apple的文件,因为我们不可以对通过find命令查找出的文件名对文件进行操作,我们只可以对find所找到的文本(文件名)进行操作
那么我们如何可以通过find命令去对文件的内容进行过滤,我们需要使用到xargs命令
grep的参数
1、-n  显示对应内容存在的行号
[root@localhost opt]# grep -n 'apple' ./a*
./a1:4:apple
./a2:1:apple
./a3:1:apple
2、-i  在查找内容时忽略大小写
[root@localhost opt]# grep -n -i  'apple' ./a*
./a1:2:APple
./a1:4:apple
./a2:1:apple
./a3:1:apple

【1】使用管道符来查看进程

ps -ef 是查看系统中所有的进程,我们可以将得到的所有的进程写入一个新文件中,再去通过grep和管道符进行筛选
如果系统中不存在这个进程,使用
ps -ef | grep 所需要查的进程  命令,如下图的结果,这并不是对应程序的进程,而是grep在使用时产生的临时进程,输出结果的第二个数字是进程的ID号,临时进程的ID号在每一次建立时是会不断发生变化的,由此可以判断出这是一个临时进程。
[root@localhost opt]# cat new.txt | grep -n 'root'
这样即可查看出想要查询的程序了

image-20231124090910790

【2】查看系统的端口

需要学习查看系统端口的命令,和ps -ef 一样,都是查看某一种系统资源的
netstat -tunlp ###  这个组合参数是查看系统上所有的端口信息
[root@localhost opt]# netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1490/master         
tcp        0      0 127.0.0.1:6010          0.0.0.0:*               LISTEN      1351/sshd: root@pts 
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      634/rpcbind         
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      1581/dnsmasq        
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1126/sshd           
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      1128/cupsd          
tcp6       0      0 ::1:25                  :::*                    LISTEN      1490/master         
tcp6       0      0 ::1:6010                :::*                    LISTEN      1351/sshd: root@pts 
tcp6       0      0 :::111                  :::*                    LISTEN      634/rpcbind         
tcp6       0      0 :::22                   :::*                    LISTEN      1126/sshd           
tcp6       0      0 ::1:631                 :::*                    LISTEN      1128/cupsd          
。。。。。

image-20231124095030306

【3】检查文件个数

比如检查/var/log 中log文件的个数

[root@localhost opt]# find /var/log -name '*.log' | wc -l 
40

判断出系统中用多少个txt文件
[root@localhost opt]# find /  -name '*.txt' | wc -l 
1207

统计系统的统计用户数量
[root@localhost opt]# cat /etc/passwd | wc -l
46

【4】、管道符和xargs结合使用

将前一个命令得到结果通过管道符传递给xargs命令进行二次加工,xargs的二次加工是真正意义上的二次加工,而不是对前一个命令得到的结果的文本进行处理,而是对文本所对行的文件进行处理。
xargs可以与find命令、ls命令等进行搭配使用。

-i 参数:可以使用{}来表示前一个命令得到的结果(文件)

1、通过xargs对文件进行批量备份

我们对/opt目录下的.txt文件进行备份
[root@bogon opt]# find /opt -name '*.txt' | xargs -i cp {} {}.apk
### 将find得到的结果传递给xargs 进行重命名操作,{}代表find得到的文件内容
[root@bogon opt]# ll
total 60
-rw-r--r--. 1 root root   159 Nov  9 14:52 1
-rw-r--r--. 1 root root     0 Nov 27 14:14 10.txt
-rw-r--r--. 1 root root     0 Nov 27 14:16 10.txt.apk
-rw-r--r--. 1 root root     0 Nov 27 14:14 1.txt
-rw-r--r--. 1 root root     0 Nov 27 14:16 1.txt.apk
-rw-r--r--. 1 root root     0 Nov 27 14:14 2.txt
-rw-r--r--. 1 root root     0 Nov 27 14:16 2.txt.apk
-rw-r--r--. 1 root root     0 Nov 27 14:14 3.txt
-rw-r--r--. 1 root root     0 Nov 27 14:16 3.txt.apk
-rw-r--r--. 1 root root     0 Nov 27 14:14 4.txt
-rw-r--r--. 1 root root     0 Nov 27 14:16 4.txt.apk
-rw-r--r--. 1 root root     0 Nov 27 14:14 5.txt
-rw-r--r--. 1 root root     0 Nov 27 14:16 5.txt.apk
-rw-r--r--. 1 root root     0 Nov 27 14:14 6.txt
-rw-r--r--. 1 root root     0 Nov 27 14:16 6.txt.apk
。。。

2、通过xargs对文件进行重命名

将/opt目录下的。txt文件改为.log文件
[root@bogon opt]# find /opt -name '*.txt' | xargs rename .txt .log {}
[root@bogon opt]# ll
total 8
-rw-r--r--. 1 root root   0 Nov 27 14:37 10.log
-rw-r--r--. 1 root root   0 Nov 27 14:37 1.log
-rw-r--r--. 1 root root   0 Nov 27 14:37 2.log
-rw-r--r--. 1 root root   0 Nov 27 14:37 3.log
-rw-r--r--. 1 root root   0 Nov 27 14:37 4.log
-rw-r--r--. 1 root root   0 Nov 27 14:37 5.log
-rw-r--r--. 1 root root   0 Nov 27 14:37 6.log
-rw-r--r--. 1 root root   0 Nov 27 14:37 7.log
-rw-r--r--. 1 root root   0 Nov 27 14:37 8.log
-rw-r--r--. 1 root root   0 Nov 27 14:37 9.log
-rw-r--r--. 1 root root  91 Nov 17 22:44 gushishi
drwxr-xr-x. 2 root root  51 Nov 27 14:38 he
-rw-r--r--. 1 root root 269 Nov  9 17:09 practice.tar.gz
drwxr-xr-x. 2 root root   6 Sep 10 16:18 rh
rename命令是重命名命令,
语法:rename 原字符串 新字符串 作用对象

3、查找系统中的txt文件中哪些存在apple内容

[root@bogon opt]# find /   -type f -name '*.txt' | xargs -i  grep -l 'apple' {}
grep的-l参数:显示出这个内容在哪一个文件中

【5】、grep命令

1、grep 关键字 filename

[root@bogon opt]# grep '有' gushi.txt 
借问酒家何处有

2、-n

显示行号
[root@bogon opt]# grep -n '有' gushi.txt ###  显示行号
5:借问酒家何处有
grep 不仅仅可以从文件中搜索数据,只要是文本他就可以进行搜索

3、grep从多个文件中搜索过滤

[root@bogon opt]# grep 'apple' ./*  ### grep是不可查目录的
./a:apple
./a1:apple
./a2:apple
./a3:apple
grep: ./abc: Is a directory
grep: ./he: Is a directory
grep: ./rh: Is a directory

4、 -i

[root@bogon opt]# grep -i 'apple' ./*
./a:apple
./a1:APple
./a2:apple
./a3:apple
grep: ./abc: Is a directory
grep: ./he: Is a directory
grep: ./rh: Is a directory

5、-R

递归查找
[root@bogon opt]# grep -Rn 'passwd' /var/log

6、-v参数

反向过滤
[root@bogon opt]# df -Th | grep -v tmp
Filesystem            Type      Size  Used Avail Use% Mounted on
/dev/mapper/rhel-root xfs        37G   20G   18G  52% /
/dev/mapper/rhel-home xfs        19G  162M   18G   1% /home
/dev/nvme0n2p2        xfs       495M   29M  466M   6% /mnt/xfs
/dev/sr0              iso9660    13G   13G     0 100% /mnt/cdrom
/dev/nvme0n2p1        ext4      189M   14K  175M   1% /mnt/ext
/dev/nvme0n1p1        xfs      1014M  198M  817M  20% /boot

7、grep和正则结合使用

*表示以什么开头
$表示以什么结尾
^$表示空行

与Linux管道符相似的内容:

Linux管道符

十五、管道符 管道符和grep命令结合的是最多的 管道符的标准定义: 管道是一种通信机制,常用语进程之间的通信。它表现出来的形式:将前一个的标准输出(stdout)作为后面命令的标准输入(stdin) 利用grep和管道符来查看用户信息 用户信息存储在 /etc/passwd中 我们自己创建的用户的

Linux:管道命令与文本处理三剑客(grep、sed、awk)

众所周知,bash命令执行的时候会输出信息,但有时这些信息必须要经过几次处理之后才能得到我们想要的格式,此时应该如何处置?这就牵涉到 管道命令(pipe) 了。管道命令使用的是|这个界定符号。每个管道后面接的第一个数据必定是命令,而且这个命令必须要能够接受标准输出的数据才行,这样的命令才可为管道命令。接下来我们选取grep、sed、awk这三个用于文本处理的管道命令来进行介绍。这三个命令可谓是Li

9k+ Star 简洁好用的开源 Linux 运维管理面板

运维管理面板通过可视化界面和直观的键鼠操作取代了繁琐的命令行操作,让服务器运维管理步骤更简单,并且降低了操作的门槛,是一款实用的软件工具。

Linux磁盘管理

磁盘管理 【1】、Linux常用的分区格式 在新增磁盘后要对其进行分区,分区后才可以去存储数据 MBR分区格式:比较古老的分区格式,只能划分4个主分区,如果四个分区划分完成后,硬盘空间还有剩余,那剩余的分区也不能够使用。后来新增加扩展分区(容器)功能,可在扩展分区内划分出更多的逻辑分区,最大支持2.

Linux软件包管理

软件包管理 【1】、Linux软件类型 开源软件 软件源代码开放,供用户免费学习,允许用户二次开发,用户使用放心,后期如果开发者不再进行维护,会有其他人进行维护 闭源软件 软件代码不公开发布,无法二次开发,后期开发者如果不进行维护损失很大 【2】、开源软件包类型 源码包 优点: 可以看到软件源代码,

linux进程管理

Linux进程管理 什么是程序:应用程序是用户选择安装的程序的总称,通常包括驱动程序的进程,看图软件、解压缩软件等通用软件的进程.也可以顾名思义地说:应用程序就是为使用者提供与电脑沟通所开发出来的程序软件 什么是进程: 狭义定义:进程就是一段程序的执行过程。 广义定义:进程是一个具有一定独立功能的程

[转帖]Linux内存管理 -- /proc/{pid}/smaps讲解

https://www.jianshu.com/p/8203457a11cc 本文包括如下三部分: 基本介绍与输出介绍 第一行基础信息讲解 详细信息讲解3.1 Size3.2 Rss3.3 Pss、Shared/Private_Clean/Dirty3.4 Referenced3.5 Anonymo

[转帖]服务器体系(SMP, NUMA, MPP)与共享存储器架构(UMA和NUMA)

《Linux内存管理:转换后备缓冲区(TLB)原理》 《内存管理:Linux Memory Management:MMU、段、分页、PAE、Cache、TLB》 《Memory Management Concepts overview(内存管理基本概念)》 《NUMA - Non Uniform M

[转帖]Linux内存管理——大部分人没有掌握的shmall和shmmax参数

https://zhuanlan.zhihu.com/p/551804053 内核中的 shmall 和 shmmax 参数 SHMMAX= 配置了最大的内存segment的大小 >这个设置的比SGA_MAX_SIZE大比较好。 SHMMIN= 最小的内存segment的大小 SHMMNI= 整个系

[转帖]Linux下进程管理知识(详细)总结

一、简介 本文主要详细介绍进程相关的命令的使用、进程管理及调度策略的知识。 二、常用的命令解析 1、ps命令 命令选项解析-a显示一个终端所有的进程-u显示进程的归属用户和内存占用情况-x显示没有控制终端的进程-l长格式显示更详细的信息-e显示所有进程-w宽行显示,可以使用多个w进行加宽显示 进程常