首页 > 代码库 > 马哥Linux第五周作业

马哥Linux第五周作业

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

马哥Linux第五周作业