1、显示当前系统上root、fedora或user1用户的默认shell;
PS:第一眼看到问题可能会有点头疼,那就把问题拆分完成,组合多个简单命令完成复杂工作 第一步,查找到这些用户并显示: 使用|或衔接多个过滤条件: [root@CentOS7 ~]# grep -E "^root\>|^fedora\>|^user1\>" /etc/passwd #grep -E也可使用egrep root:x:0:0:root:/root:/bin/bash user1:x:1003:1003::/home/user1:/bin/bash fedora:x:1005:1005::/home/fedora:/bin/bash
第二步,将这些用户默认的shell显示出来: [root@CentOS7 ~]# grep -E "^root\>|^fedora\>|^user1\>" /etc/passwd | cut -d : - f1,7 root:/bin/bash user1:/bin/bash fedora:/bin/bash
2、找出/etc/rc.d/init.d/functions文件中某单词后面跟一组小括号的行,形如:hello();
#方法一:使用grep正则表达式过滤,-o只显示匹配到的行,这里括号不需要转义: [root@CentOS7 ~]# grep -o "[[:alpha:]]\+()" /etc/rc.d/init.d/functions checkpid() run() pidof() daemon() killproc() pidfileofproc() pidofproc() status() success() failure() passed() warning() stage() success() failure() passed() warning() action() strstr() file() true() false() sysctl() #方法二:扩展正则表达式egrep,这里egrep也可使用grep -E,其中括号需要转义,表示为\(\) [root@CentOS7 ~]# egrep -o "[[:alpha:]]+\(\)" /etc/rc.d/init.d/functions checkpid() run() pidof() daemon() killproc() pidfileofproc() pidofproc() status() success() failure() passed() warning() stage() success() failure() passed() warning() action() strstr() file() true() false() sysctl()
3、使用echo命令输出一个绝对路径,使用grep取出其基名;
扩展:取出其路径名
使用grep取出其基名:其中[^/]代表不是以/开头的,/?是考虑到路径有可能为目录 [root@mylinux tmp]# echo "/tmp/abc/12/122cb/mylinux.test" | grep -Eo "[^/]+/?$" mylinux.test
取出其路径名: [root@mylinux tmp]# echo "/tmp/abc/12/122cb/mylinux.test" | grep -o "/[A-Za-z0-9]\+.*/" /tmp/abc/12/122cb/ 或者: [root@mylinux tmp]# echo "/tmp/abc/12/122cb/mylinux.test" | grep -o "/[[:alpha:]]\+.*/" /tmp/abc/12/122cb/
想想,这会不会太麻烦了点,记得在bash特性之一路径补全教程上有关于基名和路径名的获取方式,basename和dirname: [root@CentOS7 ~]# basename /tmp/abc/12/abd abd [root@CentOS7 ~]# dirname /tmp/abc/12/abd /tmp/abc/12
4、找出ifconfig命令结果中的1-255之间数字;
第一步,先查看ifconfig命令有哪些值: [root@CentOS7 ~]# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.15.35.204 netmask 255.255.254.0 broadcast 10.15.35.255 inet6 fe80::20c:29ff:fe24:16e0 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:24:16:e0 txqueuelen 1000 (Ethernet) RX packets 44040 bytes 3257103 (3.1 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 1240 bytes 149473 (145.9 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 0 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
思路,利用分段,把1-255分为一位两位三位数字,但是200-255之间比较特殊需要格外设置 于是乎:1-9,10-99,100-199,200-249,250-255
[root@CentOS7 ~]# ifconfig | egrep -o "\<[1-9]\>|\<[1-9][0-9]\>|\<[1][0-9][0-9]\>|\<[2][0-4][0-9]\>|\<[2][5][0-5]\>" 10 15 35 204 255 255 254 10 15 35 255 64 29 24 16 3 2 161 5 73 127 1 255 1 128
5、挑战题:写一个模式,能匹配合理的IP地址;
合理IP范围1.0.0.1 - 255.255.255.254
[root@CentOS7 ~]# ifconfig | egrep -o "(\<[1-9]\>|\<[1-9][0-9]\>|\<[1][0-9][0-9]\>|\<[2][0-4][0-9]\>|\<[2][5][0-5]\>)\.(\<[0-9]\>|\<[1-9][0-9]\>|\<[1][0-9][0-9]\>|\<[2][0-4][0-9]\>|\<[2][5][0-5]\>)\.(\<[0-9]\>|\<[1-9][0-9]\>|\<[1][0-9][0-9]\>|\<[2][0-4][0-9]\>|\<[2][5][0-5]\>).(\<[0-9]\>|\<[1-9][0-9]\>|\<[1][0-9][0-9]\>|\<[2][0-4][0-9]\>|\<[2][5][0-5]\>)" 10.15.35.204 255.255.254.0 10.15.35.255 127.0.0.1 255.0.0.0
6、挑战题:写一个模式,能匹配出所有的邮件地址;
[root@CentOS7 ~]# echo "my email: My_linux123@126.com" | grep -o "\<[[:alpha:]]\+.*@[0-9a-z]\+\.[[:alpha:]]\+\>" my email: My_linux123@126.com
7、查找/var目录下属主为root,且属组为mail的所有文件或目录;
[root@CentOS7 tmp]# find /var -user root -group mail -ls
33596404 0 drwxrwxr-x 2 root mail 90 9月 1 15:58 /var/spool/mail
34464012 4 -rw------- 1 root mail 632 8月 15 11:24 /var/spool/mail/root
8、查找当前系统上没有属主或属组的文件;
[root@CentOS7 ~]# find / \( -nouser -o -nogroup \) -ls find: ‘/proc/8148/task/8148/fd/6‘: 没有那个文件或目录 find: ‘/proc/8148/task/8148/fdinfo/6‘: 没有那个文件或目录 find: ‘/proc/8148/fd/6‘: 没有那个文件或目录 find: ‘/proc/8148/fdinfo/6‘: 没有那个文件或目录 33781245 0 -rw-rw---- 1 1006 mail 0 9月 2 14:52 /var/spool/mail/test1 778 0 drwx------ 2 1006 1006 59 9月 2 14:52 /home/test1 1147 4 -rw-r--r-- 1 1006 1006 18 8月 3 00:00 /home/test1/.bash_logout 363744 4 -rw-r--r-- 1 1006 1006 193 8月 3 00:00 /home/test1/.bash_profile 517241 4 -rw-r--r-- 1 1006 1006 231 8月 3 00:00 /home/test1/.bashrc
进一步:查找当前系统上没有属主或属组,且最近3天内曾被访问过的文件或目录;
9、查找/etc目录下所有用户都有写权限的文件;
10、查找/etc目录下大于1M,且类型为普通文件的所有文件;
11、查找/etc/init.d/目录下,所有用户都有执行权限,且其它用户有写权限的文件;
12、查找/usr目录下不属于root、bin或hadoop的文件;
13、查找/etc/目录下至少有一类用户没有写权限的文件;
14、查找/etc目录下最近一周内其内容被修改过,且不属于root或hadoop的文件;
本文出自 “扬帆起航” 博客,请务必保留此出处http://mystery888.blog.51cto.com/9560453/1845698
原文地址:http://mystery888.blog.51cto.com/9560453/1845698