在 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
命令具有易于记忆的简单语法。如果您有任何问题或反馈,请随时发表评论。