Linux 中的 Chgrp 命令(更改组)

评论 0 浏览 0 2019-09-05

在Linux中,每个文件都与一个所有者和一个组相关联,并具有决定哪些用户可以读取、写入或执行该文件的权限。

How to Add User to Group in Linux
How to Add User to Group in Linux

本文解释了如何使用chgrp命令来改变给定文件的组别所有权。

chgrp 命令的句法

chgrp命令的形式如下::

chgrp [OPTIONS] GROUP FILE..
  • GROUP,新组的名称,或组ID(GID)。数字性的GID必须以+符号为前缀。
  • FILE..,一个或多个文件的名称。

与允许你改变用户和组所有权的chown命令不同,chgrp只改变了组的所有权。

要想知道该文件属于哪个组,请使用ls -l命令。

普通用户只有在他们拥有文件的情况下才可以改变文件的组别,并且只能更改为他们所属的组。管理用户可以改变所有文件的组所有权。

如何改变文件组的所有权

要改变一个文件或目录的组的所有权,请调用chgrp命令,并以新的组名和目标文件为参数。

例如,如果要将文件filename的组别改为www-data,你可以运行:

chgrp www-data filename

如果你用非特权用户运行该命令,你会得到一个 "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-data
group of 'file2' retained as www-data

要想只打印那些分组实际改变的文件的信息,请使用-c,而不是-v

可以用数字组ID(GID)来代替用户名。下面的例子将文件的组所有权改为一个新的组,GID为1000:

chgrp +1000 filename

当不是递归操作时,chgrp命令的默认行为是改变符号链接目标的组所有权,而不是符号链接本身的所有权。

例如,如果你试图改变指向/opt/file1的符号链接symlink1的组别,chgrp将改变符号链接所指向的文件或目录的所有权:

chgrp www-data symlink1

有可能的是,你没有改变目标组,而是得到一个 "cannot dereference ‘symlink1’: Permission denied"的错误。

错误的发生是因为在大多数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页面,或者在你的终端输入man chgrp

如果你有任何问题或反馈意见,请随时留言。

最后更新2023-03-28
0 个评论
标签