day10 管道符grep 和 find

day10 管道符grep 和 find

grep 命令

grep 是对于数据进行查找的关键词

源数据可以是

  • 文件内容 grep hello /opt/hello.txt,找出存在hello的那一行
  • 命令的执行结果 ,这个需要结合管道符使用,cat /etc/passwd | grep 'root'
测试数据

I teach linux.

I like python.

My qq is 877348180.

My name is chaoge.

Our school website is http://yuchaoit.cn。

Where is my girl friend.

Who is your boy friend.
My phone number is 15233334444.

1.找出存在My字符的行

linux是区分大小写的,注意

-n 参数,显示存在该关键字的行号

grep -n 'root' /etc/passwd

-i grep忽略大小写

grep -i 'root' /etc/passwd ,无论大小写,找出/etc/passwd文件中,包含的root信息

命令的格式
grep '关键词' 文件名

[root@linux-yzk ~]# vim greptest.txt
[root@linux-yzk ~]# 
[root@linux-yzk ~]# 
[root@linux-yzk ~]# grep 'My' greptest.txt 
My qq is 877348180.
My name is chaoge.
My phone number is 15233334444.:

加了行的参数 是n

[root@linux-yzk ~]# grep  -n  'My' greptest.txt 
5:My qq is 877348180.
7:My name is chaoge.
14:My phone number is 15233334444.:
[root@linux-yzk ~]# 

找出小写my的行

[root@linux-yzk ~]# grep -n 'my' greptest.txt 
11:Where is my girl friend.
[root@linux-yzk ~]# 

可以理解为在你所想要找的文本中找到你要的关键词

greo的忽略大小写参数 -i 结合-n显示行号

[root@localhost opt]# grep -n -i 'apple' t1.txt t2.txt t3.txt   
t1.txt:1:apple1
t1.txt:2:apple1
t1.txt:3:apple1
t1.txt:4:apple1
t1.txt:8:Apple1
t1.txt:9:apple1
t1.txt:10:Apple1
t2.txt:1:apple2
t3.txt:1:apple3


利用grep找出nginx的软件,配置中文,监听网站的端口号

[root@linux-yzk ~]# grep -n -i 'listen'  /etc/nginx/nginx.conf
39:        listen       80;
40:        listen       [::]:80;
59:#        listen       443 ssl http2;
60:#        listen       [::]:443 ssl http2;
[root@linux-yzk ~]# 

管道符

  • 管道符是和grep 结合最多的
管道符 在Linux 中表现的符号是 |

管道符的标准的定义

管道是一种通信机制,通常用于进程间的通信。

它表现出来的形式将==前面每一个进程的输出(stdout)直接作为下一个进程的输入(stdin)==。

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

1.找处yzk 的用户信息
用户信息在 /etc/passwd 下存放着

关于查找用户存在的信息或者说用户存在的命令

grep 'yzk' /etc/passwd

[root@linux-yzk ~]# grep 'yzk' /etc/passwd
yzk:x:1000:1000:yzk:/home/yzk:/bin/bash
[root@linux-yzk ~]# 


这里也可以用id的方法
id yzk 

[root@linux-yzk ~]# id yzk
uid=1000(yzk) gid=1000(yzk) 组=1000(yzk),10(wheel)
[root@linux-yzk ~]# \

用管道符的方法

命令1 | 命令2 

[root@linux-yzk ~]# cat /etc/passwd | grep 'yzk'
yzk:x:1000:1000:yzk:/home/yzk:/bin/bash
[root@linux-yzk ~]# 

管道符常用的用法

检查进程

1.检测系统进程的命令

ps -ef  e->显示所有的进程 -f ->格式化进程的id号,等其他的信息

2.上述命令,找到了一堆进程,如何过滤出我们要的信息呢?

学习如何,正确使用 grep 和管道符,去过滤机器上某个进程,判断某个进程是否存在

1.找出vim的进程

[root@linux-yzk ~]# ps -ef | grep 'vim'
root       8637   7890  0 18:54 pts/1    00:00:00 grep --color=auto vim
[root@linux-yzk ~]# 


2.找出nginx的进程
[root@linux-yzk ~]# ps -ef |grep 'nginx'
root       6875      1  0 16:21 ?        00:00:00 nginx: master process /usr/sbin/nginx
nginx      6876   6875  0 16:21 ?        00:00:00 nginx: worker process
nginx      6877   6875  0 16:21 ?        00:00:00 nginx: worker process
nginx      6878   6875  0 16:21 ?        00:00:00 nginx: worker process
nginx      6879   6875  0 16:21 ?        00:00:00 nginx: worker process
root       8639   7890  0 18:54 pts/1    00:00:00 grep --color=auto nginx
[root@linux-yzk ~]# 

  • 检查端口
1.需要学习,检查端口的命令,这个命令和ps一样,是检查系统某资源信息

netstat -tunlp 这个组合个ps -ef 一样

2. 过滤出,机器上,和ssh远程连接的端口信息,提示程序名叫ssdh,或者端口号是22

结合查看端口的命令+ 管道符+ grep,实现,高效的过滤

netstat -tunlp   | grep  'nginx'

统计文件的数量

统计系统中/var/log 目录下有多少的log文件

[root@linux-yzk ~]# find /var/log -type f -name '*.log' | wc -l
37
[root@linux-yzk ~]# 

统计用户的数量

/etc/passwd

cat -n /etc/passwd | wc -l
[root@linux-yzk ~]# cat -n /etc/passwd | wc -l
46

管道符,结合find命令搜索信息

1.
find / -name '*.txt'  # 这个命令找出的,每一个txt文件的名字吧,并且就是,一堆,一行一行的文本而已

2.我要判断出,这些文件,哪一个是包含了apple字符串内容的
一个个的去grep这些文件才行!!!


1.找出系统上所有的txt文本 

find / -type f '*.txt'


2.判断哪些文件中是包含了apple文本行的
find / -type f '*.txt' | grep 'apple' 


xrags

作用,简单来说,就是把其他的命令给它的数据。传递给它后面的命令作为参数

语法如下

命令1 | xargs 选项

选项

-i 用 {} 代替传递的数据

全系统搜索,包含数据的文件名

[root@linux-yzk ~]# find / -type f -name '*.txt' | xargs  -i grep 'yzk' {}
   ###MnaCdEYQlbocbhgFbQC4H1OP/GUUBHm2z+/Gi6r888Fjayyzkb6IZiAbGUSuuTDp
   ###S6loIgDdTe2PIV7k929KrH/V9NfWooRn4gVTcLEyzkF9CyPJJjvbkTqnpSgSPaK0

posted @ 2025-02-28 19:41  国家一级冲浪yzk  阅读(44)  评论(0)    收藏  举报