1、显示当前系统上root、fedora或user1用户的默认shell;

egrep "^(root|fedora|user1)\>" /etc/passwd |cut -d: -f1,7

root|fedora|user1表示三者符合其一的选择条件

()使其归组

 ^表示以后面归组的条件开头

 \>表示以空字符截断此前的条件字符,即后跟其它字符的单词将不匹配


2、找出/etc/rc.d/init.d/functions文件中某单词后面跟一组小括号的行,形如:hello();

egrep -o "[_[:alpha:]]+\(\)" /etc/rc.d/init.d/functions

 [:alpha:]单个字母字符(不区分大小写)

 [_[:alpha:]]表示匹配字母字符和下划线

+ 表示匹配前面的条件一次或多次

()需要转义

-o表示只输出匹配的部分


3、使用echo命令输出一个绝对路径,使用grep取出其基名;

echo /etc/httpd/conf | egrep -o "[^/]+/?$"

  [^/]:匹配非"/"字符

 /?: 匹配0个或1个"/"

 $:以前面的匹配条件结尾


扩展:取出其路径名

echo /etc/httpd/conf | egrep -o "/.*/"

.*:多个任意字符


4、找出ifconfig命令结果中的1-255之间数字;

ifconfig|egrep "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"

匹配:个位数|十位数|100-199|200-249|250-255


5、挑战题:写一个模式,能匹配合理的IP地址;

"(\<([0,1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\>\.){3}\<([0,1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\>"


6、挑战题:写一个模式,能匹配出所有的邮件地址;

"^([[:alpha:]]|[0-9]|\_)*@([[:alpha:]]|[0-9])*.(com|cn|com\.cn)$"

匹配:以多个字母,数字,下划线开头 @ 多个字母,数字匹配字符 . 以com或cn或com.cn结尾的字符


7、查找/var目录下属主为root,且属组为mail的所有文件或目录;

find /var -user root -group mail


8、查找当前系统上没有属主或属组的文件;

find / -nouser -o -nogroup


进一步:查找当前系统上没有属主或属组,且最近3天内曾被访问过的文件或目录;

find / -nouser -a -nogroup -a -atime -3

-a: and

-atime -3: 3天之内访问过的文件


9、查找/etc目录下所有用户都有写权限的文件;

find /etc -perm -222

find -perm -mode: mode中的任一位都要匹配条件


10、查找/etc目录下大于1M,且类型为普通文件的所有文件;

find /etc -size +1M -type f


11、查找/etc/init.d/目录下,所有用户都有执行权限,且其它用户有写权限的文件;

find /etc/init.d -perm -113

所有用户都有执行权限为 -perm -111

其它用户有写权限,则在其o位+2, -perm -113


12、查找/usr目录下不属于root、bin或hadoop的文件;

find /usr -not \( -user root -o -user bin -o -user hadoop \)


13、查找/etc/目录下至少有一类用户没有写权限的文件;

find /etc ! -perm -222

perm -222 表示每一类用户都有写权限,对此取反,则是至少有一类用户没有写权限


14、查找/etc目录下最近一周内其内容被修改过,且不属于root或hadoop的文件;

find /etc mtime -7 -not \( -user root -o -user hadoop \)

 \(-user root -o -user hadoop \): 属于user组或hadoop组的用户都匹配

 -not: 对后面的取反,即 匹配不属于user组也不属于hadoop组的用户


吐槽一下,51cto的博客排版功能真渣