[CLI]find 查找指定权限的文件

来源:互联网 发布:mac os finder 快捷键 编辑:程序博客网 时间:2024/05/31 11:04

说明:
转自 http://ask.apelearn.com/question/5496, 并添加了一些自己的修改:P

#查找系统中被设置了setuid的文件:find / -type f \( -perm -04000 -o -perm -02000 \) -exec ls -lg {} \;`

-perm(permission)

  • -perm mode:精确匹配权限
  • -perm -mode:完全包含此mode时才可以匹配
  • -perm /mode:任何一位匹配即可

关于find命令中-perm+ - 的含义,举个例子:

比如当前目录下有a b c d4个文件
a文件的权限为6000 也就是a文件仅有suid sgid的特殊权限
b文件的权限为2000 也就是b文件仅有sgid的特殊权限
c文件的权限为4000 也就是c文件仅有suid的特殊权限
d文件的权限为6600 也就是d文件有sgid suid的特殊权限并且该文件拥有者对该文件有读写权限

那么现在find . -type f -perm 6000 可以找到a文件,因为a文件权限为6000
那么现在find . -type f -perm -6000 可以找到a d两个文件,这是因为:
我们可以先将a b c d这4个文件的权限转化为2进制那么,
a权限转为2进制后为 110 000 000 000
b权限转为2进制后为 010 000 000 000
c权限转为2进制后为 100 000 000 000
d权限转为2进制后为 110 110 000 000

  1. find . -type f -perm -6000 中的6000权限转为2进制为110 000 000 000,那么6000前的-号代表缺一不可,也就是如果有1的地方必须有1,那么这里找-6000权限的文件,这6000权限里前面有2个位置都是1,所以这里find找-6000权限的文件就是找前面2个位置都是1的文件.而只有a d这两个文件前2个位置都是1,所以find . -type f -perm -6000 只会找到a d两个文件.
  2. find . -type f -perm +6000会找到a b c d这4个文件,这是因为:
    +6000 里的这个+号代表有1即可,也就是有1的位置,任何位置只要有1就可以.那么这里找+6000权限的文件,这6000权限前面2个位置都有1,所以这里find 找+6000权限的文件就是找前面2个位置只要有一个位置有1的文件就可以了,这4个文件都符合要求所以最后都能被 find . -type f -perm +6000找到

我们使用man查询find的帮助文档时,发现 -perm 还有一个 /modle 的格式,其实它等同+modle,它建议我们使用 / 而不使用 +, 因为+ 容易产生混淆。所以以后您见到 find -perm /modle 这样的格式时, 就把它看成是+modle 即可。

0 0