在最近的一篇文章中,我介绍了 chown 命令,该命令用于修改系统上文件的所有权。回想一下,所有权是分配给对象的用户和组的组合。chgrp 和 newgrp 命令为管理需要维护组所有权的文件提供了额外的帮助。
使用 chgrp
chgrp 命令只是更改文件的组所有权。它与 chown :<group> 命令相同。您可以使用
$chown :alan mynotes
或
$chgrp alan mynotes
递归
chgrp 的一些附加参数在命令行和脚本中都很有用。就像许多其他 Linux 命令一样,chgrp 也有一个递归参数 -R。您将需要它来递归地操作目录及其内容,我将在下面演示。我添加了 -v(verbose)参数,以便 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
结论
了解如何管理用户、组和权限非常重要。了解一些解决可能遇到的问题的替代方法也很好,因为并非所有环境都以相同的方式设置。
评论已关闭。