Linux 中的 Chgrp 命令(更改组)
在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
。
如果你有任何问题或反馈意见,请随时留言。