如何在Linux上使用chgrp命令

时间:2020-01-09 10:39:53  来源:igfitidea点击:

Linux上的" chgrp"命令可更改文件或者目录的组所有权。为什么用它代替" chown"?有时候,瑞士军刀很棒,但是当我们真正需要手术刀时,只有手术刀会做。

什么时候应该使用chgrp

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

好吧,一方面,这很容易。使用chown仅更改组所有者设置有点违反直觉。我们必须非常小心语法。它取决于冒号的正确放置:。放错了地方,而我们并没有做出我们以为是的改变。

chgrp的语法更加简单明了。它还具有一个简洁的功能,可以简单地告诉我们它刚刚进行了哪些更改。

它是专门为完成当前任务而专门设计的工具。chgrp完全遵循Unix设计原则,即一件事做得很好。让我们看看它所提供的。

更改文件的组所有权

更改文件的组所有权非常简单。我们必须将sudochgrp一起使用。组不是用户所有的,因此,将文件或者目录从一个组移动到另一个组并不是由普通用户决定的。对于具有root特权的人来说,这是一项工作。

我们将更改名为gc.c的C源文件的组所有权。我们将其更改为devteam组。

我们可以通过将ls-l(长列表)方法一起使用来检查当前所有权值。

ls -l

这是更改组所有权的命令。输入sudo,一个空格,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源文件将其组所有权设置为researchlab。现在让我们更正。我们将使用以下命令:

sudo chgrp -c researchlab *.c

所做的更改是为我们所做的,并且每项更改都会列出来,以便我们验证更改是否正确。

更改目录的组所有权

更改目录的组所有权非常简单。我们可以使用此命令来更改目录备份的组所有权。

sudo chgrp -c devteam ./backup

为了清楚起见,此命令将更改目录本身的组所有权,而不是目录内部的文件。我们将把ls -l-d(目录)方法一起使用来验证是否是这种情况。

ls -l -d

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

递归选项

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

让我们尝试使用备份目录。这是命令:

sudo chgrp -R devteam ./backup

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

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

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

使用参考文件

到目前为止,我们已经明确地告诉chgrp我们要使用的组的名称。我们也可以使用chgrp来表示将文件的组所有权设置为与该文件相同的组所有权。

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

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

ls -l gc.c
ls -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/images/button_about.png的文件。要更改文件的组所有权,我们必须使用--dereference选项。这将更改文件的设置,并保持符号链接不变。

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

ls -l button_link

更改文件的命令是:

sudo chgrp --dereference devteam button_link

我们将使用ls检查符号链接是否保持不变,并且还将检查文件的组所有权设置。

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

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

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

使用的命令是:

sudo chgrp --no-dereference devteam button_link

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

ls -l button-link

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