用 setfacl -R -b /path/to/dir 可递归清除目录及所有子项的扩展 ACL 条目,保留基础权限;加 -k 选项可同时删除默认 ACL;清空后 getfacl 应仅显示 user::、group::、other::,且 ls -l 中权限末尾“+”号消失。

要清空目录中所有文件和子目录的 ACL 设置,核心是用 setfacl -b 配合递归选项。
直接清空整个目录树的 ACL(推荐)
执行以下命令可移除指定目录及其下所有文件、子目录的扩展 ACL 条目(保留基础权限:属主/属组/其他人的 rwx):
setfacl -R -b /path/to/dir
其中:
-R 表示递归处理所有子项;
-b 表示“remove all extended ACL entries”,即清除所有扩展 ACL 条目(不碰基本权限位)。
注意默认 ACL 是否一并清除
该命令 不会删除目录上的默认 ACL(default ACL)。如果该目录之前设过 setfacl -d -m ...,默认规则仍存在,会影响后续新建文件。
如需连默认 ACL 也清掉,额外加 -k 选项:
setfacl -R -b -k /path/to/dir
-k(--remove-default)会删除目录的默认 ACL 设置,确保新创建的文件/子目录不再继承旧规则。
验证是否清空成功
任选一个子文件或子目录检查:
getfacl /path/to/dir/file.txt- 若输出中只有
user::、group::、other::三行,且无user:xxx:或mask::等扩展条目,说明已清空; - 同时用
ls -l查看,权限末尾的 + 号应消失(例如从-rw-rwxr--+变为-rw-r--r--)。
常见误区提醒
不要只对目录本身运行 setfacl -b /path/to/dir —— 这只会清空该目录自身的扩展 ACL,其内部所有文件和子目录的 ACL 依然保留。
也不要用 chmod 替代:chmod 只改基础权限位,对 ACL 条目完全无效。


















