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/passwdcat -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