-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