find 命令中“perm -mode”和“perm /mode”之间的区别

find 命令中“perm -mode”和“perm /mode”之间的区别

我阅读了手册页,find但我并不清楚。

find -perm -mode------>至少必须设置这些位才能使文件匹配

例如:find -perm -754找到 754,755,757,774,777

那怎么办?find -perm /754 请举例说明。

答案1

它基本上是所有三位(-mode)和任何单个位(/mode)权限(-perm)子集测试之间的差异。

  • find -perm -mode

    在这种情况下,所提到的权限位必须存在于文件中。例如,如果您这样做find -perm -666并且文件具有776,它将被匹配。类似地666777等也将匹配,但665不会被匹配。总之,所提到的(三个)位必须是权限位的子集。

  • find -perm /mode

    这里,子集的任何一个位都可以。例如,如果我们执行find -perm /666,并且如果文件具有644,则该文件将被匹配,因为用户权限位是6,并且我们正在寻找单个位子集。类似地,700060006等将被匹配,但例如 不会匹配444,因为没有位包含所需权限位的任何子集。

答案2

另一个答案正确地解释了该find -perm -mode部分。然而,这个答案纠正了关于该部分的一个错误说法find -perm /mode

这里任何一个子集都可以。例如,如果我们找到 -perm /666,并且如果文件有 644,则该文件将被匹配,因为用户权限位是 6,而我们正在寻找单个位子集。同样,700、060、006 等将被匹配,但 444 则不匹配,因为没有位包含所需权限位的任何子集。

444第一句话是正确的,但是声称不匹配的部分不正确。

-perm /mode如果任何权限位匹配则匹配,而不是整数。

当传递 /666 时,我们要求find命令查找具有以下任何位的文件rw-rw-rw(6 = 4+2,表示 rw-)。因此,它将匹配任何类型的所有者(用户、组或其他)可读、可写或两者兼有的任何文件。这意味着唯一不会匹配的文件是具有以下权限的文件:000001010011100101110111。任何其他权限都将匹配,-perm /666因为它将具有分配给它的读取或写入标志。


为了进一步说明,请查看以下示例。

for h in {0..7}; \
do for i in {0..7}; \
do for j in {0..7}; \
do for k in {0..7}; \
do \
touch $h$i$j$k; \
chmod $h$i$j$k $h$i$j$k; \
done; \
done; \
done; \
done 
find -perm /666 -printf '%04m %M\n' | grep 444
7444 -r-Sr-Sr-T
6444 -r-Sr-Sr--
5444 -r-Sr--r-T
4447 -r-Sr--rwx
4446 -r-Sr--rw-
4445 -r-Sr--r-x
4444 -r-Sr--r--
4443 -r-Sr---wx
4442 -r-Sr---w-
4441 -r-Sr----x
4440 -r-Sr-----
3444 -r--r-Sr-T
2444 -r--r-Sr--
1444 -r--r--r-T
0444 -r--r--r--

因此,它唯一不匹配的是权限不包含 2 或 4 的文件:即所有仅包含 1 或 0 的文件:

# remove special permissions (since it was 0 every file that matches and only differs in the set of special permissions is found again)
find \! -perm /666 -printf '%04m %M\n' | grep '^0'| sed 's/ .../ /g'
0111 x--x--x
0110 x--x---
0101 x-----x
0100 x------
0011 ---x--x
0010 ---x---
0001 ------x
0000 -------

也许可以澄清一下:

授予以下权限

  • WXYZ:文件权限(例如 0755 W=0,Z=5)
  • wxyz:搜索权限
  • 如果至少有一位匹配,则 w&W > 0

/是一个或运算: return w&W || x&X|| y&Y || z&Z

即,如果文件包含任何与搜索到的权限(wz)匹配(至少)的权限(WZ),则返回。

while -是 AND 运算: return w&W && x&X && y&Y && z&Z

即,如果文件包含所有权限(WZ)且至少匹配搜索到的权限(wz),则返回。

在这两种情况下,这可能意味着 W 设置了超过 w 位(6 设置了 2 和 4,但没有设置 3 或 1)

相关内容