如何在Linux上使用chgrp命令

Linux上的chgrp命令更改文件或目录的组所有权。为什么要用它而不是Chown呢?有时一把瑞士军刀很棒,但当你真的需要手术刀时,只有手术刀才行。

何时应该使用chgrp

使用chgrp命令可以更改文件或目录的组所有权。使用chown命令可以更改文件或目录的用户所有者和组所有者。那么,您为什么需要或使用chgrp呢?

嗯,首先,这很容易。使用chown仅更改组所有者设置有点违反直觉。你必须非常小心地使用语法。这取决于冒号“:”的位置是否正确。把它放错地方,你就不会做出你认为的改变。

chgrp的语法总体上更加简单。它还有一个简洁的功能,可以简单地告诉您它刚刚做了什么更改。

它是专门为手头的任务量身定做的专用工具,Achgrp完全拥抱了Unix做一件事、做好一件事的设计原则。让我们看看它能提供什么。

更改文件的组所有权

更改文件的组所有权非常简单。你必须和chgrp一起使用sudo。组不属于用户,因此是否将文件或目录从一个组移动到另一个组并不是普通用户的决定。这是一份属于拥有超级用户特权的人的工作。

我们将更改名为“gc.c”的C源文件的组所有权。我们要把它改成“devteam”组。

我们可以使用带有-l(长列表)选项的ls来检查当前的所有权值。

LS-l

这是更改组所有权的命令。键入ssudo(空格)、chgrp(空格)、我们要设置为组所有者的组名、空格和文件名。

sudo chgrp devteam gc.c

我们将再次使用ls-l检查是否进行了更改。

ls -l

我们可以看到,组所有权已从“Dave”更改为“devteam”。

要一次更改一组文件的组所有权,可以使用通配符。让我们更改当前目录中所有C源文件的组所有权。我们将使用此命令:

sudo chgrp devteam *.c

我们可以使用ls-l检查是否如我们预期的那样进行了更改。

ls -l

此目录中的所有C源文件都已更改,因此它们的组所有权为“devteam”。

通过使用-c(更改)选项,chgrp将列出它对每个文件所做的更改。假设我们犯了一个错误,我们希望C源文件将其组所有权设置为“Research lab”。让我们现在改正这一点。我们将使用此命令:

sudo chgrp -c researchlab *.c

系统会为我们进行更改,并且会按发生的情况列出每个更改,这样我们就可以验证所更改的内容是否正确。

更改目录的组所有权

更改目录的组所有权也同样简单。我们可以使用此命令更改目录“BACKUP”的组所有权。

sudo chgrp -c devteam ./backup

需要明确的是,此命令将更改目录本身的组所有权,而不是目录中的文件。我们将使用ls-l和-d(目录)选项来验证情况是否如此。

ls -l -d

目录本身的组所有权已更改为“devteam”。

递归选项

如果我们想要更改存储在目录中的文件和目录的组所有权,可以使用-R(递归)选项。这将导致chgrp更改目标目录下所有文件和子目录的组所有权。

让我们在“BACKUP”目录中尝试一下。以下是命令:

sudo chgrp -R devteam ./backup

我们将使用ls命令检查其中一个嵌套子目录中的文件,还将使用ls检查其中一个嵌套子目录的设置。

ls -l ./backup/imagesls -l -d ./backup/images

我们可以看到,嵌套子目录和嵌套子目录中的文件的组所有权都已更改。

使用引用文件

到目前为止,我们一直在显式地告诉chgrp我们希望使用的组的名称。我们还可以这样使用chgrp,即“将该文件的组所有权设置为与该文件相同的组所有权”。

让我们将“gc.h”的组所有权设置为与“gc.c”相同。

我们可以使用ls检查“gc.c”和“gc.h”的当前设置。

ls -l gc.cls -l gc.h

我们需要使用的选项是--reference选项。组所有权将从引用文件复制到另一个文件。注意把文件放在正确的位置。

sudo chgrp --reference=gc.c gc.h

我们将使用ls检查设置是否已传输到“gc.h”。

ls -l gc.h

文件“gc.h”现在与“gc.c”具有相同的组所有权。

将chgrp与符号链接一起使用

我们可以使用chgrp更改符号链接或符号链接指向的文件的组所有权。

对于本例,我们创建了一个名为“BUTTON_LINK”的符号链接。这指向一个名为“./backup/image/button_about.png”的文件。要更改文件的组所有权,我们必须使用--dereference选项。这将更改文件的设置,并保持符号链接不变。

让我们使用ls-l检查符号链接的设置。

ls -l button_link

更改文件的命令为:

sudo chgrp --dereference devteam button_link

我们将使用ls检查符号链接是否未更改,还将检查文件的组所有权设置。

ls -l button_linkls -l ./backup/images/button_about.png

符号链接保持不变,并且“button_about.png”文件的组所有权已被修改。

要更改符号链接本身的组所有权,我们必须使用--no-deseference选项。

要使用的命令为:

sudo chgrp --no-dereference devteam button_link

我们将使用ls-l命令来验证是否已经为符号链接设置了新的组所有权。

ls -l button-link

这次受影响的项是符号链接本身,而不是它所指向的文件。

又好又简单

简单就是好的。这意味着要记住的东西少了,混淆的东西也少了。这应该意味着少犯错误。

相关文章