如何在Linux上使用chgrp命令
Linux上的" chgrp"命令可更改文件或者目录的组所有权。为什么用它代替" chown"?有时候,瑞士军刀很棒,但是当我们真正需要手术刀时,只有手术刀会做。
什么时候应该使用chgrp
我们可以使用chgrp
命令来更改文件或者目录的组所有权。chown
命令可以更改文件或者目录的用户所有者和组所有者。那么,为什么需要或者使用" chgrp"呢?
好吧,一方面,这很容易。使用chown
仅更改组所有者设置有点违反直觉。我们必须非常小心语法。它取决于冒号的正确放置:。放错了地方,而我们并没有做出我们以为是的改变。
chgrp的语法更加简单明了。它还具有一个简洁的功能,可以简单地告诉我们它刚刚进行了哪些更改。
它是专门为完成当前任务而专门设计的工具。chgrp
完全遵循Unix设计原则,即一件事做得很好。让我们看看它所提供的。
更改文件的组所有权
更改文件的组所有权非常简单。我们必须将sudo
与chgrp
一起使用。组不是用户所有的,因此,将文件或者目录从一个组移动到另一个组并不是由普通用户决定的。对于具有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
这次受影响的项目是符号链接本身,而不是它指向的文件。