find 查找指定权限的文件

回复 收藏
这就用到了 -perm 选项,具体用法是这样的:

1. -perm mode (比如: -perm 775)
解释:775 前面没有横线是代表只要找到百分之百一样的权限才算
好比说一个档案是 -rwxrwxr-x (775)就是100%的match
但是另一个档案是 -rwxrwxrwx (777)不是100%的match,others 多了写的权限就不是100%,所以不match!

2. -perm -mode (例如: -perm -775)
解释:-775 前面有横线表示只要标示的权限match,其他的无所谓,所以上面的第二个档案(777的)在这个case也会match的。

关于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
在 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两个文件.

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 即可。
2013-07-16 09:40 举报
已邀请:
0

iiwoai

赞同来自:

不错 不错
0

l5211314121

赞同来自:

6000 是suid和guid吧
0

田埂上的梦

赞同来自:

学习了  说的非常好
0

lyhabc

赞同来自:

太复杂了,有点难
0

奋斗的种子

赞同来自:

这个是有点难度呀,不过还好看懂了,收藏着再说
0

你水哥

赞同来自:

阿铭老师,你的教程真的很好,谢谢你的帮助
0

Hyman1105

赞同来自:

学习了!!!
0

Coohx - 小运维

赞同来自:

学习了,觉得/比+更能代表有1就可以的意思。
0

。。。

赞同来自:

看半天 总算看懂了、、转化成二进制之后 就一目了然了  

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: