cacls 是 Change Access Control Lists(更改访问控制列表)的缩写,它是 Windows 系统中一个用于显示和修改文件或文件夹权限的命令行工具。

核心功能
cacls 的主要作用是管理 NTFS 文件系统上的安全权限,你可以用它来:
- 查看:显示指定文件或文件夹的当前访问控制列表。
- 授予:为用户或用户组添加读取、写入、修改等权限。
- 撤销:移除用户或用户组的现有权限。
- 替换:用新的权限集完全替换旧的权限集。
基本语法
cacls 命令的基本格式如下:
cacls <文件路径或文件夹路径> [/选项]
常用选项
以下是 cacls 最常用的一些选项,理解它们是掌握该命令的关键:
| 选项 | 全称 | 描述 |
|---|---|---|
/T |
Traverse | 递归操作,对指定目录下的所有子目录和文件执行相同的权限更改操作。 |
/E |
Edit | 编辑模式,在现有权限的基础上进行添加或修改,而不是替换所有权限。(非常重要,避免误操作) |
/C |
Continue | 继续,如果遇到错误(如文件被占用),不提示并继续处理下一个文件。 |
/G |
Grant | 授予,为指定用户授予权限,格式:/G 用户名:权限 |
/R |
Remove | 移除,移除指定用户的所有权限,格式:/R 用户名 |
/P |
Replace | 设置,用指定的权限替换用户现有的所有权限,格式:/P 用户名:权限 |
/D |
Deny | 拒绝,显式拒绝指定用户的访问权限,格式:/D 用户名 |
/L |
Reset | 重继承,将子目录和文件的权限重置为继承自父目录。 |
/S |
Strip | 剥离,移除所有继承的权限,只保留显式设置的权限。 |
权限代码
在 /G, /P, /D 等选项中,你需要使用特定的代码来表示权限:

| 代码 | 权限描述 |
|---|---|
R |
Read (读取) |
W |
Write (写入) |
C |
Change (更改) - 等同于 读取 + 写入 |
F |
Full (完全控制) - 包含所有权限,包括读取、写入、修改、更改权限、取得所有权等 |
实用示例
假设我们有一个文件夹 D:\TestProject,里面有一些文件和子文件夹。
示例 1:查看权限
查看 D:\TestProject 文件夹的权限。
cacls "D:\TestProject"
输出可能如下:
D:\TestProject BUILTIN\Administrators:(F)
NT AUTHORITY\SYSTEM:(F)
BUILTIN\Users:(R)
这表示 Administrators 组和 SYSTEM 账户有完全控制权,Users 组有读取权限。
示例 2:为单个用户添加权限(编辑模式)
为用户 JohnDoe 添加对 D:\TestProject 的写入权限,同时保留他原有的其他权限(如果有的话)。
cacls "D:\TestProject" /E /G JohnDoe:W
/E:编辑模式,关键!/G JohnDoe:W:授予JohnDoe写入权限。
示例 3:为用户组设置完全控制(替换模式)
将 Developers 组对 D:\TestProject 的权限替换为完全控制,移除他们之前可能拥有的其他权限。
cacls "D:\TestProject" /P Developers:F
/P:替换模式。Developers:F:将Developers组的权限设置为完全控制。
示例 4:递归地为所有子文件夹和文件添加权限
为 Everyone (所有人) 组授予对 D:\TestProject 及其所有内容的读取权限。
cacls "D:\TestProject" /T /G Everyone:R
/T:递归操作,作用于所有子项。/G Everyone:R:授予Everyone组读取权限。
示例 5:移除用户的权限
从 D:\TestProject 及其所有子项中移除用户 JohnDoe 的所有权限。
cacls "D:\TestProject" /T /R JohnDoe
/T:递归操作。/R JohnDoe:移除JohnDoe的所有权限。
示例 6:显式拒绝访问
拒绝用户 Guest 访问 D:\TestProject。
cacls "D:\TestProject" /D Guest
/D Guest:显式拒绝Guest的访问。
重要注意事项和最佳实践
- 以管理员身份运行:修改文件和文件夹权限通常需要管理员权限,请确保你是在以管理员身份运行的命令提示符中执行这些命令。
- 路径中的空格:如果文件或文件夹路径中包含空格,必须用双引号 括起来,如
cacls "D:\My Documents\file.txt"。 /Evs/P的区别:/E(编辑) 是安全的,它只增加或修改权限,不会删除用户的其他现有权限。/P(替换) 是危险的,它会用你指定的权限完全覆盖用户现有的权限,如果一个用户已经有F(完全控制),你用/P设置为R(读取),他将失去所有其他权限。- 除非你明确知道要替换所有权限,否则请优先使用
/E。
icacls是更现代的替代品:- 从 Windows Vista 和 Windows Server 2008 开始,微软引入了更强大、更灵活的
icacls(Inheritance ACLs) 命令。 icacls提供了更精细的继承控制、所有者管理、更清晰的输出格式和更多功能。- 对于新项目或新系统,强烈推荐使用
icacls而不是cacls。cacls主要为了保持向后兼容性而保留。
- 从 Windows Vista 和 Windows Server 2008 开始,微软引入了更强大、更灵活的
cacls 与 icacls 的快速对比
| 特性 | cacls |
icacls |
|---|---|---|
| 引入时间 | 较早 (Windows NT/XP) | 较新 (Vista / Server 2008 及以后) |
| 功能 | 基本的权限授予、撤销、查看 | 功能更全面,支持继承、所有者、显式拒绝等 |
| 语法 | 相对简单 | 更复杂,但更强大和精确 |
| 推荐度 | 旧系统或简单任务 | 强烈推荐用于所有现代 Windows 系统 |
cacls 是一个经典但功能有限的权限管理工具,它能满足基本的查看和修改需求,但在处理复杂权限结构时,其语法和功能显得力不从心,对于日常管理和自动化脚本,学习并使用 icacls 是更好的选择,如果你正在维护一个旧的 Windows XP 系统或使用非常简单的脚本,cacls 仍然是一个可用的工具。
