AIX 7.1下find命令查询特定权限文件异常求助
我之前在AIX 7.1环境里碰到过类似的find权限筛选差异问题,大概率是以下几个细节导致的,你可以逐一排查:
权限表达式的语法差异:AIX的find和常见的GNU find在
-perm参数的处理上有细微区别,这是最常见的原因。比如:- 如果你用
-perm 0644,这是精确匹配所有权限位,意味着文件的用户、组、其他权限必须完全等于644,多一个执行位都不会被匹配; - 而
-perm -0644是要求包含指定的所有权限位,只要文件拥有这些权限,其他位不影响; - 另外AIX里用
-perm +0644表示匹配任意指定的权限位,这和GNU find的-perm /0644行为一致,但语法不同。
你可以对比两组命令的-perm写法,是不是用了不同的模式。
- 如果你用
执行命令的用户身份不同:如果一组命令是用root执行,另一组用普通用户,普通用户对某些目录没有读权限时,find会直接跳过这些目录(默认不会报错),导致结果缺失。可以尝试在命令末尾加
2>/dev/null,看看有没有权限相关的错误输出,或者切换到root用户重新执行不生效的命令对比结果。文件的ACL扩展权限干扰:AIX的JFS2文件系统支持ACL权限,而
-perm参数只检查文件的基础POSIX权限,不会考虑ACL设置。如果目标文件是通过ACL获得的权限,而基础权限不符合-perm的筛选条件,find就不会把它列出来。这种情况你需要结合aclget命令来筛选,比如:find /path -type f -exec aclget {} \; | grep -B5 -A5 "effective permissions"符号链接的处理逻辑不同:如果两组命令中一组加了
-follow(或-L)参数跟随符号链接,另一组没有,结果也会差异。比如符号链接本身的权限不符合筛选条件,但它指向的文件符合,这时候跟随链接的命令会匹配到目标文件,不跟随的就不会。其他筛选条件的差异:仔细检查两组命令的其他参数,比如是不是一组加了
-type f只找文件,另一组没加导致包含了目录;或者搜索的起始路径不一样(比如一组是/opt,另一组是/opt/subdir),这些细节很容易被忽略。
如果以上排查都没解决问题,建议把两组具体的find命令贴出来,这样能更精准定位问题。
内容的提问来源于stack exchange,提问作者C0de_Hard

