如何在 Linux 上使用 chgrp 命令

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

什么时候应该使用 chgrp

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

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

chgrp 的语法是 完全更直接. 它还有一个简洁的功能,可以简单地告诉您它刚刚进行了哪些更改。

它是用于手头任务的专用工具。 chgrp 完全接受了 Unix 的设计原则,即做一件事并把它做好。 让我们看看它提供了什么。

更改文件的组所有权

更改文件的组所有权非常简单。 您必须将 sudo 与 chgrp 一起使用。 组不归用户所有,因此是否将文件或目录从一个组移动到另一个组并不是普通用户的决定。 这是具有root权限的人的工作。

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

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

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

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

ls -l -d

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

递归选项

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

让我们用“backup”目录试试这个。 这是命令:

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

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

好又简单

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