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

本教程介绍如何在 Linux 使用 chgrp 命令更改命令更改文件目录所属组。包括 chgrp 命令语法介绍。

修改文件组的所有权,符号链接组的所有权,递归修改组所有权以及使用 GID 或者组名来修改组的所有权。

chgrp 命令

chgrp 命令的语法形式是 chgrp [OPTIONS] GROUP FILE..GROUP 可以是组的名称或组 ID 也就是 GID,GID 必须以 + 符号作为前缀。

FILE.. 可以是一个或多个文件与目录的名称,当指定多个文件或者目录,请使用多个空格进行分隔。

chown 命令不同的是,chown 命令允许您修改文件目录的所有者,chgrp 修改文件或者目录组的所有权。

要找出文件的所属组,请运行命令 ls -al。只有 root 用户或具有 sudo 权限的用户才能修改文件目录的所属组。

chgrp [OPTIONS] GROUP FILE..

修改文件目录组的所有者

要修改文件目录的所属组,请运行 chgrp 命令,后跟组的名称,最后是目标文件或者目录作为参数。

例如 sudo chgrp www-data filename 命令修改 filename 文件的所属组为 www-data

chgrp www-data filename

如果您以没有 sudo 权限的用户运行命令,则会收到操作不允许的错误消息 Operation not permitted 。

默认情况下,chgrp 命令不产生任何输出,成功时返回退出代码 0。要验证是否成功修改,请运行命令 ls -al

sudo chgrp www-data filename
ls -al filename

您还可以将多个文件或者目录作为参数传递给 chgrp 命令。

sudo chgrp www-data file1 file2 dir1

使用chgrp 命令的 -v 选项获取正在处理的文件信息。

sudo chgrp -v www-data file1 file2

也可以使用 GID 代替组名。

chgrp +1000 filename
changed group of 'file1' from nginx to www-data
group of 'file2' retained as www-data

修改软链接所属组

在不进行递归修改文件目录所属组时,chgrp 命令的默认行为是修改软链接的目标文件所属组,而不是软链接本身。

例如命令 sudo chgrp www-data symlink1 修改软链接 symlink1 的目标文件所属组,软链接文件本身的所属组不会被修改。

sudo chgrp www-data symlink1

在修改软链接文件目录所属组时,你很有可能您会看到错误消息 cannot dereference ‘symlink1’: Permission denied。

发生错误是因为在大多数 Linux 发行版的软链接都受到保护并且您无法对目标文件进行操作。

要启用或者禁用软链接的保护,可以在 /proc/sys/fs/protected_symlinks 文件指定。1 表示启用,0 表示禁用。我们建议不要禁用软链接保护。

当遇到受保护符号链接时,可以尝试使用 chagrp 命令的 -h 选项,该选项将会尝试 修改符号链接文件的所有权,然后再修改目标的所属组。

sudo chgrp -h www-data symlink1

递归修改文件目录所属组

要递归更改所有文件和目录组的所有权,请使用chgrp 命令的 -R 选项。如果仅指定 -R 选项 chgrp 命令不会遍历软链接,即不会修软链接指向的目标文件。

但你可以使用 chgrp 命令的 -h 选项修改软链接指向的目标文件所属组。如果软链接的目标文件是一个目录,你还需要指定 -H 选项遍历目录。

除此之外你还需要使用 -L 选项遍历链接到目录的每个符号链接,在大多数情况,不建议使用 -L-H 选项,因为这可能会导致系统混乱或带来安全风险。

chgrp -R www-data /var/www
chgrp -hR www-data /var/www #include symlinks

结论

chgrp 命令修改文件,目录和符号链接目标文件目录所属组。尽管您可以使用更流行的 chown 命令来修改文件目录的所属组。

chgrp 命令具有易于记忆的简单语法。如果您有任何问题或反馈,请随时发表评论。