-perm参数有3种类型


1. -perm 644

这种类型是精准匹配,只把权限是644的文件和目录取出来


[root@centos6 ~]# find . -perm 644 -ls

1703939    4 -rw-r--r--   1 root     root         3384 Jan 23 20:24 ./install.log.syslog

1703940    4 -rw-r--r--   1 root     root           18 May 20  2009 ./.bash_logout

1703941    4 -rw-r--r--   1 root     root          176 May 20  2009 ./.bash_profile

1703943    4 -rw-r--r--   1 root     root          100 Sep 23  2004 ./.cshrc

1703938   12 -rw-r--r--   1 root     root         8901 Jan 23 20:26 ./install.log

1703948    4 -rw-r--r--   1 root     root            6 Jan 24 02:34 ./aaa

1703944    4 -rw-r--r--   1 root     root          129 Dec  4  2004 ./.tcshrc

1703942    4 -rw-r--r--   1 root     root          176 Sep 23  2004 ./.bashrc

[root@centos6 ~]# 


        2. -perm -644

        这种类型的匹配意思是:所有者的权限至少是读写,并且群组的权限至少是读,其他人的权限至少是读,三个是与的关系。但是所有者的权限可以是读写执行。只要包括读写权限即可,所以例如权限777的文件也可以匹配,因为它包含644权限。

        

       [root@centos6 ~]# find . -perm -644 -ls

       1703953    4 -rwxr-xr-x   1 root     root           25 Feb  9 23:44 ./ntpdate.sh

       1703939    4 -rw-r--r--   1 root     root         3384 Jan 23 20:24 ./install.log.syslog

       1703940    4 -rw-r--r--   1 root     root           18 May 20  2009 ./.bash_logout

       1703941    4 -rw-r--r--   1 root     root          176 May 20  2009 ./.bash_profile

       1703943    4 -rw-r--r--   1 root     root          100 Sep 23  2004 ./.cshrc

       1703938   12 -rw-r--r--   1 root     root         8901 Jan 23 20:26 ./install.log

       1703949    4 drwxrwxrwx   2 root     root         4096 Mar 20 11:48 ./test

       1703948    4 -rw-r--r--   1 root     root            6 Jan 24 02:34 ./aaa

       1703944    4 -rw-r--r--   1 root     root          129 Dec  4  2004 ./.tcshrc

       1703942    4 -rw-r--r--   1 root     root          176 Sep 23  2004 ./.bashrc

       [root@centos6 ~]# 

        

        3.-perm +644(centos7 -perm /644)

        这种写法的意思是:只要所有者满足读写权限,或者群组满足读权限,所有者满足读权限。就是说只要满足一个条件就可以匹配出来,所有者权限为7的也可以匹配出来。

        

        [root@df~/test 11:56:09]$ ll

        total 0

        -rwxrwxrwx. 1 root root  0 Mar 20 11:03 a

        -rwxrw-rwx. 1 root root  0 Mar 20 11:03 b

        -rwxr--r--. 1 root root  0 Mar 20 11:03 c

        ----------. 1 root root  0 Mar 20 11:03 d

        drwxr-xr-x. 2 root root 42 Mar 20 11:51 test

        [root@df~/test 11:56:14]$ find . -perm /111

        .

        ./a

        ./b

        ./c

        ./test

        [root@DengFan ~/test 11:56:24]$ 

        可以看出来至少有1位执行权限就可以匹配出来!


        假如我要取一个目录下所有人都没有写权限的文件和目录该怎么取呢?按照通常的想法是find .  ! -perm -111。但是这条命令的意思是取出至少有一位没有执行权限的文件和目录!


        然后测试一下!的结果,会发现还是有带执行权限的文件

        [root@df ~/test 12:01:03]$ find . ! -perm -111 -ls 

        100679105    0 -rwxrw-rwx   1 root     root            0 Mar 20 11:03 ./b

        100679106    0 -rwxr--r--   1 root     root            0 Mar 20 11:03 ./c

        100679107    0 ----------   1 root     root            0 Mar 20 11:03 ./d

        694655    0 -rw-r--r--   1 root     root            0 Mar 20 11:51 ./test/a

        890201    0 -rw-r--r--   1 root     root            0 Mar 20 11:51 ./test/b

        890202    0 -rw-r--r--   1 root     root            0 Mar 20 11:51 ./test/c

        890203    0 -rw-r--r--   1 root     root            0 Mar 20 11:51 ./test/d

        [root@df ~/test 12:01:10]$

        正确做法是对/111取反,逻辑是对至少有1位执行权限取反,就是所有位都没有执行权限

        [root@df~/test 12:04:12]$ find . ! -perm /111 -ls 

        100679107    0 ----------   1 root     root            0 Mar 20 11:03 ./d

        694655    0 -rw-r--r--   1 root     root            0 Mar 20 11:51 ./test/a

        890201    0 -rw-r--r--   1 root     root            0 Mar 20 11:51 ./test/b

        890202    0 -rw-r--r--   1 root     root            0 Mar 20 11:51 ./test/c

        890203    0 -rw-r--r--   1 root     root            0 Mar 20 11:51 ./test/d

        [root@df~/test 12:05:23]$ 

       

        总结:

        取出所有没有执行权限的文件:find . ! -perm  /111

        取出至少一位执行权限的文件:find . ! -perm -111