一、grep是对数据进行过滤查早关键字
源数据可以是
-
文件内容
grep hello /opt/hello.txt
,找出存在hello的那一行. -
命令的执行结果 ,这个需要结合管道符使用,
cat /etc/passwd | grep 'root'
测试样本文件
I teach linux.
I like python.
My qq is 222222222.
My name is zanshan.
Our school website is http://www.baidu.com。
Where is my girl friend.
Who is your boy friend.
My phone number is 111111111.
1、找出存在My字符的行
Linux是区分大小写的,需要注意
-n参数,显示存在该关键字的行号
grep -n 'root' /etc/passwd
-i grep忽略大小写
grep -i 'root' /etc/passwd
grep '关键字' 文件名
root@server:/opt # grep 'My' hello.txt
My qq is 222222222.
My name is zanshan.
My phone number is 111111111.
root@server:/opt #
root@server:/opt # grep -n 'My' hello.txt
5:My qq is 222222222.
7:My name is zanshan.
14:My phone number is 111111111.
root@server:/opt #
2、找出小写my的行
root@server:/opt # grep -n 'my' hello.txt
11:Where is my girl friend.
root@server:/opt #
3、比如,搜索系统中的文件,找出test相关的内容
root@server:/opt # grep -n 'test' /opt/1.txt
1:test is test
2:this is test file
root@server:/opt #
利用grep找出nginx软件,配置文件中,定义的网站监听端口
root@server:/opt # grep -n -i 'listen' /www/server/nginx/conf/nginx.conf
71: listen 888;
root@server:/opt #
二、管道符
1、管道符和grep结合用法最多
管道符,在linux中的表达符号是
| (快捷键shift + \)
管道符得标准定义
管道是一种通信机制,通常用于进程间的通信。
它表现出来的形式将==前面每一个进程的输出(stdout)直接作为下一个进程的输入(stdin)==。
2、利用管道符和grep,来查看系统用户的信息
2.1找出test用户的信息
/etc/passwd 是系统的用户信息存放文件
在这个文件中,是用户通过命令创建的用户,id号是从1000开始的,比如
useradd test
添加完之后,就会在这个文件中生成一行信息
# 查找用户是否存在的命令
root@server:/opt # id test1
id: ‘test1’: no such user
root@server:/opt #
root@server:/opt # id test
uid=1001(test) gid=1001(test) groups=1001(test)
通过grep找到用户,表示该用户存在或者直接id 用户名
root@server:/opt # grep 'test' /etc/passwd
test:x:1001:1001::/home/test:/bin/sh
2.2 管道符
# 管道符
命令1 | 命令2
命令1,拿到用户文件信息 | 交给grep再去过滤
root@server:/opt # cat /etc/passwd | grep 'test'
test:x:1001:1001::/home/test:/bin/sh
root@server:/opt #
# 管道符常见用法
检查进程
1.查看系统进程信息的命令
ps -ef # -e 显示所有的进程信息 -f 格式化显示出进程的id号,等其他信息
2.上述命令,找到了一堆进程,如何过滤出我们要的信息?
正确使用 grep 和管道符,去过滤机器上某个进程,判断某个进程是否存在
1.找出vim的进程
root@server:/opt # ps -ef|grep vim
root 759674 732239 0 11:00 pts/0 00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn --exclude-dir=.idea --exclude-dir=.tox --exclude-dir=.venv --exclude-dir=venv vim
root@server:/opt #
2.找出nginx的进程
root@server:/opt # ps -ef|grep nginx
root 49535 1 0 Nov05 ? 00:00:00 nginx: master process /www/server/nginx/sbin/nginx -c /www/server/nginx/conf/nginx.conf
www 340703 49535 0 Nov07 ? 00:00:00 nginx: worker process
www 340704 49535 0 Nov07 ? 00:01:06 nginx: worker process
检查端口
1.检查系统端口的命令,这个命令,和ps -ef 一样,是查看系统某资源信息
netstat -tunlp # 这个组合参数,是查看系统上,所有的端口信息
2. 过滤出,机器上,和ssh远程连接的端口信息,提示程序名叫ssdh,或者端口号是22
结合查看端口的命令+ 管道符+ grep,实现,高效的过滤
root@server:/opt # netstat -ntlp|grep ssh
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 801/sshd: /usr/sbin
tcp6 0 0 :::22 :::* LISTEN 801/sshd: /usr/sbin
root@server:/opt # netstat -ntlp|grep 'nginx'
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 49535/nginx: master
tcp 0 0 0.0.0.0:888 0.0.0.0:* LISTEN 49535/nginx: master
root@server:/opt #
3、wc命令:统计文件数量,通过管道符结合使用
# 例如统计用户数量
root@server:/opt # cat /etc/passwd | wc -l
37
root@server:/opt #