1、显示当前系统上root、fedora或user1用户的默认shell;
1
2
3
4
5
6
|
[root@C7-1 ~]
# useradd fedora #新建用户fedora
[root@C7-1 ~]
# useradd user1 #新建用户user1
[root@C7-1 ~]
# egrep '^(root|fedora|user1)\>' /etc/passwd | cut -d: -f1,7 #由于(root|fedora|user1)是扩展表达式,所以要使用egrep或grep -E
root:
/bin/bash
fedora:
/bin/bash
user1:
/bin/bash
|
注:^(root|fedora|user1)\>表示以这三个用户开头的行。cut -d: -f1,7表示以:为分隔符,取第1和第7字段,这二个字段是用户名和shell的。
图示:
2、找出/etc/rc.d/init.d/functions文件中某单词后面跟一组小括号的行,形如:hello();
1
2
3
4
|
[root@C7-1 ~]
# egrep -o "^[_[:alpha:]]+\(\)" /etc/rc.d/init.d/functions
checkpid()
__pids_var_run()
....略
|
注:根据题目要求,文件中__pids_var_run()也是符合要求的,^[_[:alpha:]]+中,_不能省掉,代表以_或大小写字母开头,+表示前面字符可以出现一次或多次,\(\)是使用转义符来代表小括号()
图示:
3、使用echo命令输出一个绝对路径,使用grep取出其基名;
1
2
3
4
5
6
|
[root@
cat
~]
# echo "/mnt/sdc" | grep -E "[^/]+$" #行尾的字符串[^/]除了/斜线的任意内容,+代表这个/至少出现1次
/mnt/sdc
[root@
cat
~]
# echo "/mnt/sdc/" | grep -E "[^/]+/?$" #如果sdc后还带一个/,就用/?表示可以出现1次或不出现
/mnt/sdc/
[root@
cat
~]
# echo "/mnt/sdc" | grep -E -o "[^/]+/?$" | cut -d"/" -f1 #-o只显示匹配的,以/作为分隔符,取第1字段,取出sdc
sdc
|
扩展:取出其路径名
1
2
|
[root@
cat
~]
# echo "/mnt/sdc/test" | grep -o "/.*/" #取出路径名,"/.*/"表示以/开头后面可出现任意长度任意字符,以/结尾,这样就符合路径名的规则。
/mnt/sdc/
|
图示:
4、找出ifconfig命令结果中的1-255之间数字;
1
2
3
4
5
6
|
[root@C7-1 ~]
# ifconfig | grep -E -o "\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>"
192
168
2
127
...略
|
图示:
5、挑战题:写一个模式,能匹配合理的IP地址;
1
2
3
4
5
6
7
8
|
[root@
cat
~]
# cat ip #手动写了几个IP地址,有对有错,用下面的条件来筛选
980.168.88.66
192.168.88.255
253.252.251.0
192.168.2.60
255.0.0.690
[root@
cat
~]
# grep -E "\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-3][0-9])\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4])\>" ip
192.168.2.60
|
6、挑战题:写一个模式,能匹配出所有的邮件地址;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[root@note1 ~]
# cat /tmp/mail #编写了6个邮箱地址,其中4、5不符合邮箱命名规范
[root@c7-1 ~]
# cat mail
342076957@qq.com
zhaodongwei@zhaodongwei.cn
dongwei_zhao@cmdmedia.cn
_dongwei@cmd.cn
liupeng@_dfdfd.com
zjj.d@baidu.com
[root@c7-1 ~]
# egrep -o "[[:alnum:]]+[[:punct:]]*[[:alnum:]]*@[[:alnum:]]+.[[:alnum:]]*.?[[:alnum:]]*" mail
342076957@qq.com
zhaodongwei@zhaodongwei.cn
dongwei_zhao@cmdmedia.cn
dongwei@cmd.cn
zjj.d@baidu.com
|
注:首先,咱们要了解邮箱地址的构成,简单来说,是由:用户名@域名 构成。
用户名命名要求:可使用字母、数字、下划线,开头可以使用数字或字母(QQ邮箱就是数字开头)
域名命名要求:可使用字母、数字、下划线组成,不能使用特殊字母开头等
详细的介绍请看下图:分别是新浪、163邮箱命令介绍。阿里域名的命名介绍
图示:
7、查找/var目录下属主为root,且属组为mail的所有文件或目录;
1
2
3
4
|
[root@c7-1 ~]
# find /var -user root -group mail
/var/spool/mail
[root@c7-1 ~]
# find /var -user root -group mail -ls #-ls是将查找到的文件显示出来
134321208 0 drwxrwxr-x 2 root mail 16 7月 31 05:06
/var/spool/mail
|
图示:
8、查找当前系统上没有属主或属组的文件;
1
2
3
4
5
|
[root@C7-1 ~]
# find / -nouser -o -nogroup -ls #用-nouser -o -nogroup表示没有属
find
: ‘
/proc/16897/task/16897/fd/6
’: 没有那个文件或目录
find
: ‘
/proc/16897/task/16897/fdinfo/6
’: 没有那个文件或目录
find
: ‘
/proc/16897/fd/6
’: 没有那个文件或目录
find
: ‘
/proc/16897/fdinfo/6
’: 没有那个文件或目录
|
进一步:查找当前系统上没有属主或属组,且最近3天内曾被访问过的文件或目录;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
为了方便演示,创建了一个user1的用户,并用user1创建了一个文件,然后删除user1
[user1@C7-1 ~]$
touch
/tmp/b
#在user1用户下创建/tmp/b文件
[user1@C7-1 ~]$ ll
/tmp/b
#查看属主和属组,属于user1
-rw-rw-r--. 1 user1 user1 0 9月 5 21:24
/tmp/b
[user1@C7-1 ~]$ 登出
[root@C7-1 ~]
# 登出
[root@C7-1
test
]
# 登出
[root@C7-1 ~]
# 登出
Last login: Mon Sep 5 21:23:45 2016
[root@C7-1 ~]
# userdel user1 #退出后,删除user1用户
[root@C7-1 ~]
# id user1 #user1用户已删除
id
: user1: no such user
[root@C7-1 ~]
# ls -l /tmp/ #b文件属主和属组已变为数字
总用量 4
-rw-r--r--. 1 root root 28 9月 2 01:27 12
-rw-rw-r--. 1 2023 2023 0 9月 5 21:24 b
方法一:
[root@note1 ~]
# find / -nouser -a -nogroup -a -atime -3 #-atime -3表示3天没有访问过的文件,查找到了b和user1用户下的文件
find
: ‘
/proc/16901/task/16901/fd/6
’: 没有那个文件或目录
find
: ‘
/proc/16901/task/16901/fdinfo/6
’: 没有那个文件或目录
find
: ‘
/proc/16901/fd/6
’: 没有那个文件或目录
find
: ‘
/proc/16901/fdinfo/6
’: 没有那个文件或目录
/tmp/b
/home/tom
/home/user1
/home/user1/
.bash_logout
/home/user1/
.bash_profile
/home/user1/
.bashrc
/home/user1/
.bash_history
方法二:
[root@C7-1 ~]
# find / \( -nouser -o -nogroup \) -a -atime -3 #也可以这样用
find
: ‘
/proc/16901/task/16901/fd/6
’: 没有那个文件或目录
find
: ‘
/proc/16901/task/16901/fdinfo/6
’: 没有那个文件或目录
find
: ‘
/proc/16901/fd/6
’: 没有那个文件或目录
find
: ‘
/proc/16901/fdinfo/6
’: 没有那个文件或目录
/tmp/b
/home/tom
/home/user1
/home/user1/
.bash_logout
/home/user1/
.bash_profile
/home/user1/
.bashrc
/home/user1/
.bash_history
|
图示:
9、查找/etc目录下所有用户都有写权限的文件;
1
2
3
4
5
|
[root@c7-1 ~]
# find /etc -perm -222 -ls #所有用户都有写权限用-perm -222表示
33554564 0 lrwxrwxrwx 1 root root 17 9月 5 00:00
/etc/mtab
->
/proc/self/mounts
33689712 0 lrwxrwxrwx 1 root root 49 9月 5 00:01
/etc/pki/tls/certs/ca-bundle
.crt ->
/etc/pki/ca-trust/extracted/pem/tls-ca-bundle
.pem
33689713 0 lrwxrwxrwx 1 root root 55 9月 5 00:01
/etc/pki/tls/certs/ca-bundle
.trust.crt ->
/etc/pki/ca-trust/extracted/openssl/ca-bundle
.trust.crt
...略
|
10、查找/etc目录下大于1M,且类型为普通文件的所有文件;
1
2
3
|
[root@c7-1 ~]
# find /etc -size +1M -type f -ls #大于1MB用-size +1M表示
34288441 6824 -r--r--r-- 1 root root 6984832 9月 5 00:05
/etc/udev/hwdb
.bin
67796802 3772 -rw-r--r-- 1 root root 3858924 11月 21 2015
/etc/selinux/targeted/policy/policy
.29
|
11、查找/etc/init.d/目录下,所有用户都有执行权限,且其它用户有写权限的文件;
1
2
|
[root@c7-1 ~]
# find /etc/init.d -perm -113 -ls #用户都有执行,其它用户有写权限用-perm -113表示
33688451 0 lrwxrwxrwx 1 root root 11 9月 5 00:01
/etc/init
.d -> rc.d
/init
.d
|
12、查找/usr目录下不属于root、bin或hadoop的文件;
1
2
3
4
|
[root@c7-1 ~]
# find /usr -not \( -user root -o -user bin -o -user hadoop \) -ls #-not放在()外面,对里面的内容,即不也不又不,做条件
67424701 0 drwx------ 2 polkitd root 6 6月 10 2014
/usr/share/polkit-1/rules
.d
[root@c7-1 ~]
# find /usr ! \( -user root -o -user bin -o -user hadoop \) -ls #-not和!是同样的意思
67424701 0 drwx------ 2 polkitd root 6 6月 10 2014
/usr/share/polkit-1/rules
.d
|
13、查找/etc/目录下至少有一类用户没有写权限的文件;
1
2
3
4
|
[root@c7-1 ~]
# find /etc -not -perm -222 -ls #至少一类用户没有写权限用-perm -222表示
33554561 12 drwxr-xr-x 76 root root 8192 9月 5 04:04
/etc
33554562 4 -rw-r--r-- 1 root root 465 9月 5 00:00
/etc/fstab
....略
|
14、查找/etc目录下最近一周内其内容被修改过,且不属于root或hadoop的文件;
1
2
3
4
5
6
7
8
9
10
|
[root@note1 ~]
# ll /etc/test123 #默认没有满足条件的文件,所以先在/etc下创建一个test123的文件,查看其属主和属组都是root
-rw-r--r-- 1 root root 0 Sep 1 16:00
/etc/test123
[root@note1 ~]
# useradd test #创建一个test用户,用来把上面文件属主属组都改为test
[root@note1 ~]
# chown test.test /etc/test123 #把/etc下的test123改为属主属组root
[root@note1 ~]
# ll /etc/test123 #已改为root
-rw-r--r-- 1
test
test
0 Sep 1 16:00
/etc/test123
[root@note1 ~]
# find /etc -mtime -7 -a -not -user root -not -user hadoop #根据题目要求查看,-mtime -7表示7天没修改过
/etc/test123
[root@note1 ~]
# find /etc -mtime -7 -not \( -user root -o -user hadoop \) -ls #-not放外面对里面来做判断,不属于root和hadoop。注意-not放外面要把()里的-a换成-o
397495 0 -rw-r--r-- 1
test
test
0 Sep 1 16:00
/etc/test123
|
图示:
本文转自cix123 51CTO博客,原文链接:http://blog.51cto.com/zhaodongwei/1845603,如需转载请自行联系原作者