Linux chgrp 和 newgrp 命令简介

chgrp 和 newgrp 命令帮助您管理需要维护组所有权的文件。
188 位读者喜欢这个。
Penguins on beach

原始照片由 Rikki Endsley 拍摄。CC BY-SA 4.0

在最近的一篇文章中,我介绍了 chown 命令,该命令用于修改系统上文件的所有权。回想一下,所有权是分配给对象的用户和组的组合。chgrpnewgrp 命令为管理需要维护组所有权的文件提供了额外的帮助。

使用 chgrp

chgrp 命令只是更改文件的组所有权。它与 chown :<group> 命令相同。您可以使用

$chown :alan mynotes

$chgrp alan mynotes

递归

chgrp 的一些附加参数在命令行和脚本中都很有用。就像许多其他 Linux 命令一样,chgrp 也有一个递归参数 -R。您将需要它来递归地操作目录及其内容,我将在下面演示。我添加了 -vverbose)参数,以便 chgrp 告诉我它在做什么

$ ls -l . conf
.:
drwxrwxr-x 2 alan alan 4096 Aug  5 15:33 conf

conf:
-rw-rw-r-- 1 alan alan 0 Aug  5 15:33 conf.xml
# chgrp -vR delta conf 
changed group of 'conf/conf.xml' from alan to delta
changed group of 'conf' from alan to delta

参考

当更改文件的组以匹配特定配置或当您不知道组时(例如在运行脚本时),可以使用参考文件(--reference=RFILE)。您可以复制另一个文件的组(RFILE),称为参考文件。例如,要撤消上面所做的更改(回想一下,点 [.] 指的是当前工作目录)

$ chgrp -vR --reference=. conf

报告更改

大多数命令都有用于控制其输出的参数。最常见的是 -v 以启用 verbose 模式,chgrp 命令也有 verbose 模式。它还有一个 -c--changes)参数,它指示 chgrp 仅在进行更改时报告。Chgrp 仍然会报告其他内容,例如操作是否被允许。

参数 -f--silent--quiet)用于抑制大多数错误消息。我将在下一节中使用此参数和 -c,以便它仅显示实际更改。

保留 root

Linux 文件系统的根目录(/)应该受到高度尊重。如果在此级别发生命令错误,后果可能很可怕,并使系统完全无用。特别是当您运行递归命令时,该命令将进行任何类型的更改,或者更糟糕的是,删除。chgrp 命令有一个参数可用于保护和保留 root。该参数是 --preserve-root。如果在 root 上使用递归 chgrp 命令使用此参数,则不会发生任何事情,而是会出现一条消息

[root@localhost /]# chgrp -cfR --preserve-root a+w /
chgrp: it is dangerous to operate recursively on '/'
chgrp: use --no-preserve-root to override this failsafe

当该选项未与递归结合使用时,它不起作用。但是,如果该命令由 root 用户运行,则 / 的权限将更改,但其中其他文件或目录的权限不会更改

[alan@localhost /]$ chgrp -c --preserve-root alan /
chgrp: changing group of '/': Operation not permitted
[root@localhost /]# chgrp -c --preserve-root alan /
changed group of '/' from root to alan

令人惊讶的是,似乎这不是默认参数。选项 --no-preserve-root 是默认值。如果您在没有“preserve”选项的情况下运行上述命令,它将默认为“no preserve”模式,并可能更改不应更改的文件上的权限

[alan@localhost /]$ chgrp -cfR alan /
changed group of '/dev/pts/0' from tty to alan
changed group of '/dev/tty2' from tty to alan
changed group of '/var/spool/mail/alan' from mail to alan

关于 newgrp

newgrp 命令允许用户覆盖当前的 primary group。当您在所有文件都必须具有相同组所有权的目录中工作时,newgrp 可能会很方便。假设您的内联网服务器上有一个名为 share 的目录,不同的团队在其中存储营销照片。该组是 share。当不同的用户将文件放入目录时,文件的 primary group 可能会变得混乱。每当添加新文件时,您可以运行 chgrp 通过将组设置为 share 来纠正任何混乱

$ cd share
ls -l
-rw-r--r--. 1 alan share 0 Aug  7 15:35 pic13
-rw-r--r--. 1 alan alan 0 Aug  7 15:35 pic1
-rw-r--r--. 1 susan delta 0 Aug  7 15:35 pic2
-rw-r--r--. 1 james gamma 0 Aug  7 15:35 pic3
-rw-rw-r--. 1 bill contract  0 Aug  7 15:36 pic4

我在关于 chmod 命令 的文章中介绍了 setgid 模式。这将是解决此问题的一种方法。但是,假设由于某种原因未设置 setgid 位。newgrp 命令在这种情况下很有用。在任何用户将文件放入 share 目录之前,他们可以运行命令 newgrp share。这将其 primary group 切换到 share,以便他们放入目录的所有文件都将自动具有组 share,而不是用户的 primary group。一旦完成,用户可以使用(例如)切换回其常规 primary group

newgrp alan

结论

了解如何管理用户、组和权限非常重要。了解一些解决可能遇到的问题的替代方法也很好,因为并非所有环境都以相同的方式设置。

接下来阅读什么
标签
Alan Formy-Duval Opensource.com Correspondent
Alan 拥有 20 年的 IT 经验,主要在政府和金融部门。他最初是一名增值经销商,之后转行到系统工程。Alan 的背景是高可用性集群应用程序。他撰写了 Oracle Press/McGraw Hill 的《Oracle Solaris 11 系统管理》一书中的“用户和组”以及“Apache 和 Web 堆栈”章节。

评论已关闭。

知识共享许可协议本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.