chmod
- 更改文件模式
chmod [选项] 模式 文件...
本手册页为chmod命令文档的GNU版本。根据模式参数,chmod命令修改给定文件的 文件模式标志位。修改方法有两种,一种是符号表达式修改,另一种是八进制数比 特位匹配修改。
符号模式
符号模式的格式为[ugoa] [[+-=][perms...]...]
,其中perms可以是0,也可以
是rwxXst中的字母集合,还可以是ugo中的某一单个字母。可以同时给出多个符号
表达式,各表达式中间用逗号分开。
[ugoa]中的字母组合可以控制改变用户文件的访问权限:u代表文件拥有者(user) ,g代表同一组中的其他用户(group),o代表不同组的其他用户(other),而a代表 所有用户(all)。如果没有指定以上任意一个字母,则命令等同于给定a字母,即影 响所有用户,但是此种情况下,umask比特位的设置不受任何影响。
[+-=]中操作符+为单个文件模式比特位增加指定的权限;操作符-移除权限;操作 符=赋予权限,即增加指定权限,同时没有指定的权限则被移除,但该情况下,目 录未指定的用户集合与组ID标志位不受影响。
[rwxXst]中的字母分别对应如下权限:(r)读,(w)写,(x)执行或者搜索目录,(X) 执行/搜索——仅当目标为目录,或某些用户已对该文件具有执行权限时,(s)设置用 户或用户组的执行时权限,即下文中的“SUID与SGID标志位”条目,(t)限制删除标 志位或粘滞位。你可以指定ugo中的任一字母所对应的组别,对其设置上面提到的 各个权限,其中,u代表文件拥有者,g代表与文件同一用户组的其他用户,o代表 以上两个组别以外的用户。(这里说的“文件”概念,包括系统中所有的常规文件、 目录、设备、符号链接等等)
数字模式
该模式总共有4组八进制数(0-7)数字集合,均为4、2、1的比特位累加,分别代表 不同的意义,0忽略不计,代表不具有任何权限。第一组的三个数字分别代表用户 ID(4)、组ID(2)和限制删除或粘滞位属性(1);第二组代表文件拥有者用户的三个 权限:读(4)、写(2)、执行(1);第三组代表与文件同组的其他用户的读(4)、写 (2)、执行(1)权限;第四组代表文件组以外用户的读(4)、写(2)、执行(1)权限。
chmod不会修改符号链接的权限;包括系统调用的chmod也无法修改。这并不是一个 缺陷,而是因为符号链接的权限本身就不起任何作用。尽管如此,chmod却可以修 改符号链接所指向文件的权限。但当符号链接指向循环遍历目录的时候,chmod就 会忽略该符号链接。
文件的SUID与SGID:如果一个常规文件所属的组ID,没有与文件所属用户所在的有 效组ID,或用户的某一个补充组ID相匹配,chmod就会清除该文件的SGID位,除非 用户进行特殊配置,但额外的限制可能会导致模式参数或RFILE参数中的SUID和 SGID位失效。这取决于系统调用chmod时的策略与功能设置。如果有疑问,可以具 体查看实际的系统行为设置。
目录的SUID与SGID:对于一个目录来说,chmod命令可以正常设置、保存其SUID位
和SGID位,除非你明确地指定其他标志位。你可以通过符号模式,例如u+s
和
g-s
来设置或清除其“s”权限,也可以通过数字模式设置(但无法清除)。
限制删除标志位是一个单独的比特,其意义取决于不同的文件类型。对于目录来说 ,它防止一般用户删除或重命名目录中的文件,除非该用户是文件或目录的拥有者 ;此称为目录的限制删除标志位,它常常被用于所有人都可写的目录,例如/tmp。 对于一些老系统中的常规文件,该标志位用于在缓存设备中保存程序的文本镜像, 以便程序运行时能够更快速的加载,此称为粘滞位。
-c,--changes
与下面的--verbose参数类似,但是仅当文件改变的时候才报告。
-f,--silent,--quiet
屏蔽大多数错误信息
-v,--verbose
输出每个文件的处理报告
--no-preserve-root
不处理‘/’(默认)
--preserve-root
无法递归处理‘/’时使用此参数
--reference=RFILE文件
使用RFILE文件中的模式代替参数“模式”的值。
每个“模式”参数均为[ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+
的形式。
-R,--recursive
递归修改文件和目录
--help
显示本帮助并退出
--version
显示版本信息并退出
chmod(2)