我们可以看到,组所有权已从“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/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/image/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-deseference选项。
要使用的命令为:
sudo chgrp --no-dereference devteam button_link
我们将使用ls-l命令来验证是否已经为符号链接设置了新的组所有权。
ls -l button-link
这次受影响的项是符号链接本身,而不是它所指向的文件。
又好又简单
简单就是好的。这意味着要记住的东西少了,混淆的东西也少了。这应该意味着少犯错误。