Bootstrap

Linux 中grep命令

一、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 #

;