我将验证所列位置中的文件是否未同时设置其他写入权限和任何执行权限。此要求将递归应用于子目录中包含的文件。套接字 (s)、命名管道 (p)、块特殊文件 (b)、字符特殊文件 (c) 和符号链接 (l) 文件不在此要求范围内。我有以下输出find
:
bash-5.1# ls -ls /test/
total 8
0 drwxr-x-w- 2 root system 256 Apr 28 04:49 directory
0 lrwxrwxrwx 1 root system 11 Apr 28 04:57 symlink -> /test/test1
4 -rw-r----- 1 root system 6 Apr 24 04:33 tes
4 -rwxr-x-w- 1 root system 11 Apr 24 04:49 test1
0 -rw-r---w- 1 root system 0 Apr 18 20:45 test2
bash-5.1# find /test -type d,f \( -perm -o=w -a \( -perm -u=x -o -perm -g=x -o -perm -o=x \) \) -ls
12337 1 drwxr-x-w- 2 root system 256 Apr 28 04:49 /test/directory
bash-5.1# find /test -type f,d \( -perm -o=w -a \( -perm -u=x -o -perm -g=x -o -perm -o=x \) \) -ls
12334 1 -rwxr-x-w- 1 root system 11 Apr 24 04:49 /test/test1
正如您所看到的,当我将顺序从 更改-type d,f
为 -type f,d
结果发生了变化,我不知道为什么。我也有这种方法:
bash-5.1# find /test ! \( -type s -o -type p -o -type b -o -type c -o -type l \) \( -perm -o=w -a \( -perm -u=x -o -perm -g=x -o -perm -o=x \) \) -ls
12337 1 drwxr-x-w- 2 root system 256 Apr 28 04:49 /test/directory
12334 1 -rwxr-x-w- 1 root system 11 Apr 24 04:49 /test/test1
您认为最好的方法是什么?
答案1
AIX 使用 POSIX find
,它不支持-type
允许匹配类型列表的 GNU 扩展。-file f,d
您需要编写更便携的 ,而不是( -file f -o -file d )
。 (供将来参考,POSIXfind
也没有-perm /mode
,这意味着权限检查比 GNU 可能需要的更冗长find
。)
您需要包含其他写入的文件或目录和任何执行权限:
find /test \( -type f -o -type d \) -perm -o=w \( -perm -u=x -o -perm -g=x -o -o=x \) -ls
请注意,在大多数 shell 中,您需要使用反斜杠 ( ) 转义(
和字符,正如我在这里所做的那样,以便将它们直接传递给。)
\
find