免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 听钟客
打印 上一主题 下一主题

find的-perm 这个怎么理解? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-08-26 16:17 |只看该作者
$ find . -perm +005

为何有这么多就出来?这个匹配如何理解?

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
12 [报告]
发表于 2008-08-26 17:30 |只看该作者

回复 #10 无声无息 的帖子

将模写成符号形式就比较容易理解。

经过查资料、做实验后,我认为:

八进制形式的mode应该有三位,省略的数字被看作前导0。

-:只要与1对应的bit被设置就OK,有点像AND, 其它bit忽略
   如-6 相当于-006   o: 110 对应的bit就是开头的两位(o+w, o+r), 就是o可读且o可写就ok了,其它不管。
/: 只要与1对应的bit之一被设置就OK, 有点像OR

如 /6 相当于/006 o:110, 表示o可读或o可写就ok
/5 相当于 /005  o:101, 表示o可读或o可执行就ok.


已经不赞成使用+,而应使用/。


请大家斧正!

[ 本帖最后由 blackold 于 2008-8-27 12:41 编辑 ]

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
13 [报告]
发表于 2008-08-26 18:06 |只看该作者
man find中的解释:
-perm -mode
    mode的所有允许位(即mode的'1'位)被设置的文件。其它位(即'0'位)不管。
-perm /mode
    mode的任一允许位被设置的文件。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
14 [报告]
发表于 2008-08-26 18:37 |只看该作者
chmod :
A numeric mode is from one to four octal digits (0-7), derived by adding up the bits with values 4, 2, and 1. Omitted digits are assumed to be leading zeros.

论坛徽章:
0
15 [报告]
发表于 2008-08-26 23:57 |只看该作者

回复 #14 blackold 的帖子

明早回公司测试一下
黑哥先晚安了

论坛徽章:
0
16 [报告]
发表于 2008-08-28 16:24 |只看该作者

回复 #13 blackold 的帖子

黑哥的分析给了很多启发

我个人理解

像黑哥说那样,006和6是一样的,用0补齐吧。
首先将八进制转化为二进制,
也就是666:110 110 110的形式(只列三位),因为perm是根据二进制匹配判断的。

首先测试文件:

  1. $ ls -l
  2. total 0
  3. -rwxrwxrwx 1   fai     root       0 Aug 28 15:15 a
  4. -rwxr-xr-x    1   fai     root       0 Aug 28 15:15 b
  5. ----rw----     1   fai     root       0 Aug 28 15:15 c
  6. -rw-rw-rw-  1   fai     root       0 Aug 28 15:15 d
  7. -r-xr--r--      1   fai     root       0 Aug 28 15:15 e
复制代码


引用烈火兄所说的
-perm +mode:搜索文件许可位部分符合mode的文件
-perm -mode:搜索文件许可位完全符合mode的文件

对于-perm mode,转换为二进制,然后进行对比,看以下例子:

  1. $ find . -perm +006
  2. .
  3. ./b
  4. ./d
  5. ./a
  6. ./e
复制代码

对于权限进行8进制转2进制
a(777):111 111 111
b(755):111 101 101
c(060): 000 110 000
d(666):110 110 110
e(544):101 100 100

而mode中的006转为2进制是:000 000110
根据部分匹配的原则,只要在第3组中的第一或者第二位出现1就可以了,所以看到e文件101只是匹配了第一位的1,但是也打印了。而a文件111的情况更是符合这个说法了。注意:c文件虽然出现了110,但是不是对应的组,这个匹配是在相应位的。

对于-perm -006,也同样道理去判断,只是这里需要完全匹配,也就是mode的二进制中出现1的地方,目标中也要出现才行。

  1. $ find . -perm -006
  2. ./d
  3. ./a
复制代码

需要在最后一组中的第一和第二位同时出现1才能匹配。
a(777):111 111 111
d(666):110 110 110

不知道我这么啰嗦,说明白没有?
但是对于这个查找结果的排序,我还是不明白,为什么d在a之前显示?

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
17 [报告]
发表于 2008-08-28 16:46 |只看该作者

回复 #16 无声无息 的帖子

find . 的输出顺序?

论坛徽章:
0
18 [报告]
发表于 2008-08-28 16:47 |只看该作者

回复 #17 blackold 的帖子

对,find的输出顺序

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
19 [报告]
发表于 2008-08-28 16:48 |只看该作者

回复 #18 无声无息 的帖子

我是在问你find .的输出顺序是什么?
我的环境下:
$ find . -perm -6
./a
./d


$ find .
.
./a
./b
./c
./d
./e
./f

论坛徽章:
0
20 [报告]
发表于 2008-08-28 17:09 |只看该作者

回复 #19 blackold 的帖子

$ find .
.
./b
./d
./a
./c
./e

怎么理解这个输出?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP