Linux 中的 chgrp (更改用户组)命令

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

chgrp 命令更改给定文件的用户组所有权。

本指南说明了如何使用 chgrp

chgrp 命令语法

chgrp 命令采用以下形式:

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

chown 允许您更改用户和组所有权的命令不同, chgrp 仅更改组所有权。

要找出文件属于哪个组,请使用 ls -l 命令。

只有 root 用户或具有 sudo 特权的用户才能更改文件的组所有权。

如何更改文件组所有权

要更改文件或目录的组所有权,请调用 chgrp 命令,后跟新的组名和目标文件作为参数。

例如,将文件 filename 的组更改为 www-data,请运行:

chgrp www-data filename

如果您以非特权用户身份运行该命令,则将出现 “Operation not permitted” 错误。要消除错误,请运行带有 -f 选项的命令。默认情况下,成功时 chgrp 不产生任何输出并返回零。

您还可以将多个文件作为参数传递给 chgrp 命令:

chgrp www-data file1 file2 dir1

使用该 -v 选项来获取有关正在处理的文件的信息:

chgrp 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 chgrp 查看。