使用不同umask查找文件和目录

3

我有一个umask 0002,使用umask -S命令返回u=rwx,g=rwx,o=rx。

如何查找所有未按照掩码设置权限的文件和目录?

目录为777 - 掩码,文件为666 - 掩码。如果我执行以下操作:

find . ! -perm $(umask -S)

它会找到所有没有设置权限为u=rwx,g=rwx,o=rx(777-002是这些权限,但666-002是不同的权限)的文件/目录,这对于目录来说很好,但对于文件来说不好。

我如何查找文件,其权限与当前设置的umask不同?

示例:

 touch one
 ls -l
 -rw-rw-r-- 1 trolkura trolkura 0 kvě  4 09:01 one

umask是0002,所以结果是664,但是当我执行以下操作时

find . -type f ! -perm $(umask -S)
./one

结果是新创建的文件,因为它正在寻找没有775权限(目录权限)的文件。

3个回答

1
这是我的版本:

这里是我的版本:

m=`umask`
fperm=`printf '0%o' $(( 0666 & ~$m ))`
dperm=`printf '0%o' $(( 0777 & ~$m ))`

find -type f -perm $fperm -o -type d -perm $dperm

0
find . -type f ! -perm $(echo "obase=8;$(( 8#666 ^ 8#$(umask) ))"|bc)

这是对八进制数进行二进制异或运算。由于-perm接受八进制权限,因此将十进制结果再次转换为八进制。


这个结果应该是436而不是664。 - Darlyn
@trolkura 更新完成,忘记重新转换十进制结果。 - Pinke Helga

0

最糟糕的情况是根据 umask 设置不同的情况...

如果您的 umask u=rwx,g=rwx,o=rx,那么您可以像这样找到具有恶意 666 的文件:

 find . -type f ! -perm u=rw,g=rw,o=r

如果您的umask是u=rwx,g=rx,o=rx,那么您需要使用另一个字符串...
 find . -type f ! -perm u=rw,g=r,o=r

...对那个不感到自豪。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接