「chown(1)」-

修改文件的所有者和所属组

命令语法格式

chown [OPTION]… [OWNER][:[GROUP]] FILE…
chown [OPTION]… –reference=RFILE FILE…

命令描述

chown会将每个给出文件FILE的用户和组的所有权更改为新所有者,或修改为与现有文件RFILE相同的用户和组。

对于[OWNER][:[GROUP]]参数

OWNER
如果仅给出OWNER(用户名或数字类型的用户ID),则文件的所有者将会更改为OWNER,但是不会更改文件的组。

OWNER:GROUP
如果OWNER后面跟着一个冒号和一个组GROUP(组名称或数字类型的组ID),并且它们之间没有空格,则文件的所有者和所属组组都会进行更改。

OWNER:
如果冒号后面没有组GROUP,那么该OWNER将成为文件的新的所有者,并且OWNER的登录组将成为文件的新组。

:GROUP
如果没有OWNER,只有一个冒号和一个组GROUP,那么只会将文件的组修改为GROUP,不会修改文件的所有者。这种情况下,chown的功能与chgrp的功能相同。

:
如果只指定了一个冒号,没有OWNER和GROUP,则什么都不做。

如果组名是一个数字,可以使用前导的加号(+)来标识该数字实际上是一个组名,而不是一个数字类型的组ID。参考区分组名与组ID

一些旧的脚本可能仍然使用’.’代替’:’分隔符,但POSIX 1003.1-2001(参阅标准一致性)不要求对此进行支持,而为了向后兼容,GNU实现的chown支持’.’,只要不会产生歧义的结果。新脚本应该避免使用’.’,因为它不具有可移植性,并且如果OWNER或GROUP中包含’.’,则它会产生不良的结果。

用户能否将文件修改为任意的组取决于系统,或者限制为设置用户所属的组的更可移植的行为。

chown命令有时会清除SETUID或SETGID权限位。此行为取决于底层chown(2)系统调用的策略和功能,这可能会使chown(1)命令对系统相关的文件模式修改失控。例如,当具有适当权限的用户调用时,chown命令可能不会影响这些位,或者某个权限位表示可执行权限以外的某些功能时(例如,强制锁定)。如有疑问,请检查底层系统行为。

命令支持的选项及含义

–help
显示帮助信息并退出。

–version
显示版本信息并退出。

-h, –no-dereference
作用于符号链接,而非符号链接指向的文件。只在那些支持修改符号链接的所有者的系统上有用, 这种模式依赖于lchown(1)系统调用,在不提供lchown系统调用的系统上,当命令行中指定的文件是符号链接时,chown会失败。默认情况下,对递归遍历期间遇到的符号链接不输出诊断信息,但请参阅–verbose。

–dereference
不会作用于符号链接,而是作用于符号链接指向的文件。这是默认的行为。

-v, –verbose
为每个处理的文件输出一个诊断信息。如果在没有使用lchown(2)系统调用的系统上进行递归遍历期间遇到符号链接,并且–no-dereference选项已生效(修改符号链接的信息),则发出一条诊断消息,说明符号链接及其引用都未被更改。

-c, –changes
类似于-v选项,但是只为权限发生实际改变的文件输出诊断信息。

-f, –silent, –quiet
如果文件所有权信息无法更改时,不产生错误信息。

–from=CURRENT_OWNER:CURRENT_GROUP
只有当前文件的所有权信息为CURRENT_OWNER:CURRENT_GROUP时,才会将文件的所有权信息更改为[OWNER][:[GROUP]]。从安全的角度来看,这个选项非常有用,因为它大大减少了潜在滥用。

如果要将指定的所有权修改为新的所有权,不使用该选项的话,可以使用find命令实现:

# find / -owner OLDUSER -exec chown -h NEWUSER {} \;

但是使用find命令的效率不高。但是,使用该选项可以更安全,但也不时100%的完美:

# chown -h -R –from=OLDUSER NEWUSER /

CURRENT_OWNER:CURRENT_GROUP的语法规则与[OWNER][:[GROUP]]的语法规则相同,正如上面表述的。

–no-preserve-root
取消对更目录的保护,不要对根目录特殊对待。这是默认的行为。参考特别对待根目录

–preserve-root
尝试递归更改根目录(/)时会失败,这是对根目录进行保护。没有–recursive选项时,该选项没有效果。参考特别对待根目录

–reference=RFILE
将每个文件的用户和组更改为与RFILE相同的用户和组。如果RFILE是符号链接,则不要使用符号链接的用户和组,而使用它所指向的文件的用户和组。

-R, –recursive
递归修改目录和其内容的用户和组。

当使用-R选项时,下面的选项可以修改递归目录结构时行为。如果指定了多个下面的选项,只有最后一个才会生效:

-H
如果命令行参数是一个指向目录的符号链接,遍历它。参考对待符号链接

-L
遍历遇到的所有指向目录的符号链接。参考对待符号链接

-P
不遍历任何符号链接。参考对待符号链接

使用示例

将/u的所有者修改为root:

# chown root /u

类似的,将/u的所有者修改为root,所属组修改为staff:

# chown root:staff /u

将/u及子目录的所有者修改为root:

# chown -hR root /u

相关手册

chown(2)

查看在线手册:http://www.gnu.org/software/coreutils/chown

查看info手册:info ‘(coreutils) chown invocation’

参考文献

  • man 1 chown, version GNU coreutils 8.26

更新日志

  • 06/10/2018 创建文章