- 环境
- 虚拟机:VMware-10.0.7 build-2844087
- Linux系统:CentOS 6.8
- 远程工具:Xshell 6 (Build 0197)
Linux系统管理_Shell编程_04_Shell基础_管道符“|”
一、本篇摘要
- 本票主要内容
- 行提取命令 grep
- find命令跟grep命令的区别
- 管道符“|”
二、行提取命令 grep
- grep
- 格式:[root@localhost ~]# grep [选项] "搜索内容" 文件名
- 选项:
- -A:列出符合条件的行,并列出后续的n行
- -B:列出符合条件的行,并列出前面的n行
- -c:统计找到的符合条件的字符串的次数
- -i:忽略大小写
- -n:输出行号
- -v:反向查找
- -color=auto:搜索出的关键字用颜色显示
- 举例
-
举例1:查询登录用户并显示行号
[root@localhost sh]# grep -n "/bin/bash" /etc/passwd <--方法1
1:root:x:0:0:root:/root:/bin/bash
30:user1:x:500:500::/home/user1:/bin/bash
31:user2:x:501:501::/home/user2:/bin/bash
32:user3:x:502:502::/home/user3:/bin/bash
[root@localhost sh]# cat /etc/passwd | grep -n "/bin/bash" <--方法2
1:root:x:0:0:root:/root:/bin/bash
30:user1:x:500:500::/home/user1:/bin/bash
31:user2:x:501:501::/home/user2:/bin/bash
32:user3:x:502:502::/home/user3:/bin/bash
- 举例2:查询伪用户(即不能登录的用户)
[root@localhost sh]# grep -n -v "/bin/bash" /etc/passwd <--方法1
...
[root@localhost sh]# cat /etc/passwd | grep -n -v "/bin/bash" <--方法2
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:halt:x:7:0:halt:/sbin:/sbin/halt
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
11:operator:x:11:0:operator:/root:/sbin/nologin
12:games:x:12:100:games:/usr/games:/sbin/nologin
13:gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
14:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
15:nobody:x:99:99:Nobody:/:/sbin/nologin
16:dbus:x:81:81:System message bus:/:/sbin/nologin
17:rpc:x:32:32:Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin
18:vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
19:abrt:x:173:173::/etc/abrt:/sbin/nologin
20:rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
21:nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
22:haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
23:ntp:x:38:38::/etc/ntp:/sbin/nologin
24:saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
25:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
26:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
27:tcpdump:x:72:72::/:/sbin/nologin
28:oprofile:x:16:16:Special user account to be used by OProfile:/home/oprofile:/sbin/nologin
29:apache:x:48:48:Apache:/var/www:/sbin/nologin
- 举例3:查找包含“root”的行,并列出后面的3行
[root@localhost sh]# grep -A3 "root" /etc/passwd <--方法1
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
--
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
[root@localhost sh]# cat /etc/passwd | grep -A3 "root" <--方法2
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
--
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
三、grep 命令与 find 命令的区别
- 本票主要内容
- 行提取命令 grep
- find命令跟grep命令的区别
- 管道符“|”
- grep
- 格式:[root@localhost ~]# grep [选项] "搜索内容" 文件名
- 选项:
- -A:列出符合条件的行,并列出后续的n行
- -B:列出符合条件的行,并列出前面的n行
- -c:统计找到的符合条件的字符串的次数
- -i:忽略大小写
- -n:输出行号
- -v:反向查找
- -color=auto:搜索出的关键字用颜色显示
- 举例
举例1:查询登录用户并显示行号
- 区别
- find:针对的是文件
- 在系统中搜索符合条件的文件名
- 搜索文件名完全匹配
- 模糊查询使用通配符,也支持正则(不建议使用)
- grep:针对的是字符串
- 在文件中搜索符合条件的字符串
- 搜索字符串包含匹配
- 模糊查询使用正则匹配
- 举例1:创建两个文件test、test1,使用find搜索文件名test查看返回值
[root@localhost ~]# touch test test1 <--创建两个文件test、test1
[root@localhost ~]# ls
anaconda-ks.cfg install.log install.log.syslog sh test test1
[root@localhost ~]# find . -name "test" <--find查找test文件
./test
<--find是完全匹配,只能查到test文件本身
- 举例2:将字符串test、testfile分别写入test文件,使用grep查询test字符串,查看返回值
[root@localhost ~]# echo "test" > test <--写入数据
[root@localhost ~]# echo "testfile" >> test <--追加数据
[root@localhost ~]# cat test <--查看数据
test
testfile
[root@localhost ~]# grep "test" ./test <--查询test字符串
test
testfile <--grep查询字符串,只要数据行包括就会列出
四、 管道符“|”
- 管道符“|”
- 理解:第一条命令正确输出是第二条命令处理和操作的对象
- 举例:
- 举例1:分页显示 /etc/ 目录下所有内容
[root@localhost ~]# ls -l /etc/ | more 总用量 1828 drwxr-xr-x. 3 root root 4096 4月 23 09:13 abrt drwxr-xr-x. 4 root root 4096 4月 23 09:17 acpi -rw-r--r--. 1 root root 46 5月 21 06:03 adjtime -rw-r--r--. 1 root root 1512 1月 12 2010 aliases -rw-r--r--. 1 root root 12288 4月 23 09:25 aliases.db drwxr-xr-x. 2 root root 4096 4月 23 09:18 alsa drwxr-xr-x. 2 root root 4096 4月 23 09:18 alternatives -rw-------. 1 root root 541 11月 10 2015 anacrontab -rw-r--r--. 1 root root 148 1月 12 2016 asound.conf -rw-r--r--. 1 root root 1 2月 20 2015 at.deny drwxr-x---. 3 root root 4096 4月 23 09:18 audisp drwxr-x---. 3 root root 4096 4月 23 09:18 audit -rw-r--r--. 1 root root 13034 5月 11 2016 autofs.conf -rw-------. 1 root root 232 5月 11 2016 autofs_ldap_auth.conf -rw-r--r--. 1 root root 667 5月 11 2016 auto.master -rw-r--r--. 1 root root 524 5月 11 2016 auto.misc -rwxr-xr-x. 1 root root 1260 5月 11 2016 auto.net -rwxr-xr-x. 1 root root 687 5月 11 2016 auto.smb drwxr-xr-x. 2 root root 4096 4月 23 09:19 bash_completion.d -rw-r--r--. 1 root root 2681 10月 2 2013 bashrc drwxr-xr-x. 2 root root 4096 5月 11 2016 blkid drwxr-xr-x. 2 root root 4096 4月 23 09:09 bonobo-activation -rw-r--r--. 1 root root 1780 10月 16 2009 cas.conf -rw-r--r--. 1 root root 27 5月 19 2016 centos-release --MORE--
- 举例2:查看本地所有连接,提取包含已建立连接(ESTABLISHED)的行
[root@localhost ~]# netstat -an | grep "ESTABLISHED" tcp 0 64 192.168.234.200:22 192.168.234.1:49632 ESTABLISHED
- 举例3:统计网络连接数量
[root@localhost ~]# netstat -an | grep "ESTABLISHED" | wc -l 1
- 举例4:查找所有包含httpd的安装包
[root@localhost ~]# rpm -qa | grep httpd httpd-tools-2.2.15-53.el6.centos.x86_64 httpd-2.2.15-53.el6.centos.x86_64 httpd-devel-2.2.15-53.el6.centos.x86_64五、小结
- 知识点总结
- grep
- grep 和 find 区别
- 管道符 “|”



