Linux中的Chgrp命令(更改组)

时间:2020-03-05 15:26:11  来源:igfitidea点击:

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

本文介绍了如何使用“ chgrp”命令来更改给定文件的组所有权。

'chgrp'命令语法

“ chgrp”命令采用以下形式:

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

与“ chown”命令允许我们更改用户和组所有权不同,“ chgrp”仅更改组所有权。

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

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

如何更改文件组所有权

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

例如,要将文件“文件名”的组更改为“ www-data”,可以运行:

chgrp www-data filename

如果我们以非特权用户身份运行该命令,则会收到“不允许操作”错误。
要取消显示此错误消息,请使用“ -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

如何更改Symlinks组所有权

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

例如,如果尝试更改指向“/opt/file1”的符号链接“ symlink1”的组,则“ chgrp”将更改符号链接指向的文件或者目录的所有权:

chgrp www-data symlink1

很有可能我们会收到“无法取消引用'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'将每个符号链接遍历到遇到的目录。
在大多数情况下,不应使用这些选项,因为这可能会破坏系统或者造成安全风险。