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


grep '^\(root\|fedora\|user1\):' /etc/passwd | cut -d: -f1,7


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


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


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


echo /usr/local/src | grep -o "[^/]*$"


    扩展:取出其路径名

echo /usr/local/src/vpnserver/ | grep -oP "^.*(?=/)"

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])\>' --color

#注:这条也可以匹配得到1-255中,所有0-9的阿拉伯数字,但是不符合要求,在看题的使用,需要注意。

ifconfig  |grep '[0-9]' --color


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

[root@rice ~]# ifconfig eth0 | grep 'inet addr'| awk '{print $2}' | tr -d "addr:" 
192.168.1.10
You have new mail in /var/spool/mail/root

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

[root@rice ~]# egrep "[[:alnum:]]+_?[[:alnum:]]+@[[:alnum:]]+\.[[:alpha:]]+\.?[[:alpha:]]+?" bbbb.txt
dfadfa@126.com
agflafka@139.com
aslfasdgfkj@163.com
lsdfalfag@bbs.com


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

find /var -user root -group mail -ls

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


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

[root@rice ~]#  find / -nouser -o -nogroup 
/home/server/lnmp1.2-full/src/mariadb-5.5.42/mysql-test/suite/mtr/t/single.result
/home/server/lnmp1.2-full/src/mariadb-5.5.42/mysql-test/suite/mtr/t/source.test
/home/server/lnmp1.2-full/src/mariadb-5.5.42/mysql-test/suite/mtr/t/newcomb.test
/home/server/lnmp1.2-full/src/mariadb-5.5.42/mysql-test/suite/mtr/t/source.result

[root@rice ~]#find / -nouser -o -nogroup -a -atime 3 13


注:由于文件过多,这里不做操作演示了。

 

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

[root@rice ~]#find /etc -not -perm +222
/etc/openldap/certs/password
/etc/pam.d/cups
/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem


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

[root@rice ~]# find /etc -type f -size +1M -ls
  5489 1044 -rw-r--r--   1 root     root      1066943 Apr 24  2015 /etc/pki/tls/certs/ca-bundle.trust.crt
    85 7900 -rw-r--r--   1 root     root      8088660 Jul  1 22:08 /etc/selinux/targeted/policy/policy.24
 18633 7900 -rw-r--r--   1 root     root      8088660 Jul 10  2015 /etc/selinux/targeted/modules/active/policy.kern


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


 find /etc/init.d/ -type f -perm -102 -ls


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


[root@rice ~]# find /usr -not -user root -a -not -user bin -a -not -user hadoop -type f -ls
find: `hadoop' is not the name of a known user

注:因为我的VPS中没有这个用户所以,显示结果如下


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

[root@rice ~]#  find /etc/ ! -perm +222 -ls
  7885    4 -r--------   1 root     root           45 Jul 10  2015 /etc/openldap/certs/password
 23050    4 -r--r--r--   1 root     root          146 May 11 13:00 /etc/pam.d/cups


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

[root@rice ~]#  find /etc/ -type f -ctime -7 -a ! \( -user root -o -user hadoop \) -ls
find: `hadoop' is not the name of a known user

注:因为我的VPS中没有这个用户的信息所以,显示结果如下


总结:本次的练习,主要体现在正则的使用,以及find命令的运用,在下面我简单的介绍下,find的一些各类场景 出现的问题,本周真的很忙,有很多细节的地方,没有用心去多操作,所以,只能将就这样了,过段时间,再对其,进行调整。


linux中find命令的-perm参数。


find -perm,根据文件的权限来查找文件,有三种形式:

find -perm mode

find -perm -mode

find -perm +mode

那么这三者之间有什么区别呢?解释之前首先得简单说一下linux中文件权限位的概念。在linux中文件或目录有三者权限r,w,x,代表的含义分别是读、写、可执行。而一个文件或目录的属性中又包括所属用户u、所属组g、其他o三个部分的属性,分别表示所属用户、所属组、其他用户对这个文件所拥有的权限。看起来大概是这个样子:

 所属用户   所属组    其他

   rwx       rwx      rwx

用户在其拥有权限的位上设置1,没有权限的位设置0。如果将每个部分的这些权限位看成二进制数,每个部分可以用3位二进制数表示,最大值为7(2^3-1),表示可读、可写、可执行。严格的来说,文件权限除了r、w、x以外还有setuid,setgid权限,等下再解释。


好了,有了权限位的基础,那么再来看find -perm mode。mode是三个数字表示的,每个数字最大值是7(原因前面解释过了)。

find -perm mode , 表示严格匹配,也就是你的文件权限位转换成对应的十进制数字与mode一模一样,那么匹配成功,需要注意的是如果mode给的数字不足3位,那么前面自动添0(严格的说是不足4位,原因就是前面所说的setuid,setgid,稍后解释)


find -perm -mode , 表示mode中转换成二进制的1在文件权限位里面必须匹配,比如mode=644那么转换成二进制为110 100 100,而被查找的文件的权限位也可以被转换成一个二进制数,两者在位上为1的部分必须完全匹配,而0则不管。例如被查找的文件的权限为转换成二进制数是111 111 111那么这个比如被匹配,而假如是100 100 100那么则不会匹配。所以这个'-'的作用归结起来就是匹配比mode权限更充足的文件(找不到什么词语来形容了)


find -perm +mode , 与 -mode的区别是+mode只需其中的任意一个1的部分被匹配,-mode是所有1的部分都必须被匹配,同样+mode也不管0位。


现在来解释setuid,setgid,setuid权限是用来使其他用户可以“越权”执行你的命令,而本质上的实现就是在权限检查的时候,在进程的的有效UID里面保存了这个其他用户的UID,所以权限得意验证通过(在这里的注释1里面很简单的介绍了一下),这些权限用一个新的3位二进制数表示,有4,2,1三种值,4表示有setuid权限,2表示有setgid权限,1表示有粘着位(t)权限(粘着位权限最典型的例子是/tmp,每个用户可以在里面创建、更新、删除自己创建(文件所属用户是自己)的文件,而不能更改别人的文件)。


以上是借鉴repls博主的文章,结合理解的,很实用,有兴趣的可以看看

原文地址:http://blog.csdn.net/zbszhangbosen/article/details/7528680