在Linux中,每个文件都与一个所有者和一个组相关联,并具有确定哪些用户可以读取,写入或执行该文件的权限。chgrp
命令用于更改特定文件组的所有权。
本教程介绍了如何使用chgrp
。包括chgrp
命令语法,更改文件组的所有权,改符号链接组的所有权,递归更改组所有权以及使用GID或者组名来更改组的所有权。
chgrp
命令语法
chgrp
命令采用以下形式:
chgrp [OPTIONS] GROUP FILE..
GROUP
,新组的名称或组ID(GID)。数字GID必须以+
符号作为前缀。FILE..
,一个或多个文件的名称。chown
命令允许您更改用户和组所有权,与chown不同的是,chgrp
仅更改组的所有权。要找出文件属于哪个组,请使用ls -l
命令。只有root用户或具有sudo权限的用户才能更改文件组的所有权。
如何更改文件组的所有权
要更改文件或目录的组所有权,请调用chgrp
命令,后跟新的组名和目标文件作为参数。例如,要将文件filename
的组更改为www-data
,可以运行:
chgrp www-data filename
如果您以没有sudo权限的用户运行该命令,则会收到“Operation not permitted”不允许操作的错误。要消除错误,请使用-f
选项运行命令。默认情况下,成功时,chgrp
不产生任何输出并返回退出代码0。
您还可以将多个文件作为参数传递给chgrp
命令:
chgrp www-data file1 file2 dir1
使用-v
选项获取正在处理的文件的信息:
chgrp -v www-data file1 file2
changed group of 'file1' from nginx to www-datagroup of 'file2' retained as www-data
要仅打印实际更改组的文件的信息,请使用-c
而不是-v
。
可以使用数字组ID(GID)代替组名。以下示例将文件组的所有权更改为GID为1000的新组:
chgrp +1000 filename
如何更改符号链接组的所有权
当不递归操作时,chgrp
命令的默认行为是更改符号链接目标的组所有权,而不是符号链接本身。例如,如果您尝试更改指向/opt/file1
的符号链接symlink1
的组,则chgrp
将更改符号链接指向的文件或目录组的所有权:
chgrp www-data symlink1
很有可能您会收到“Symbolic link that cannot be dereferenced 1无法取消引用'symlink1':权限被拒绝”错误,而不是更改目标组。发生错误是因为默认情况下,大多数Linux发行版上的符号链接都受到保护,并且您无法在目标文件上进行操作。此选项在/proc/sys/fs/protected_symlinks
中指定。 1
表示启用,0
表示禁用。我们建议不要禁用符号链接保护。
要更改符号链接本身的组所有权,请使用-h
选项:
chgrp -h www-data symlink1
如何递归更改组所有权
要递归更改指定目录下所有文件和目录的组所有权,请使用-R
选项。例如,以下命令会将/var/www
目录下所有文件和目录的所有权更改为www-data
组:
chgrp -R www-data /var/www
如果指定了递归选项chgrp
,则不会遍历符号链接,也不会更改符号链接。要更改符号链接的组所有权,请添加-h
选项:
chgrp -hR www-data /var/www
递归更改组所有权时可以使用的其他选项是-H
和-L
。如果传递给chgrp
命令的参数是符号链接,则-H
选项将导致命令遍历它。 -L
告诉chgrp
将每个符号链接遍历到遇到的目录。在大多数情况下,不应使用这些选项,因为这可能会导致系统混乱或带来安全风险。
结论
chgrp
更改文件,目录和符号链接的组所有权。尽管您可以使用更流行的chown
命令来更改组,但chgrp
具有易于记忆的简单语法。有关chgrp
命令的更多信息,请访问chgrp手册页或在终端中输入man chgrp
。如果您有任何问题或反馈,请随时发表评论。
还没有评论,来说两句吧...