linux chgrp
在最近的文章中,我介绍了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启用详细,而chgrp命令具有详细模式。 它还具有-c (-- changes )参数,该参数指示chgrp仅在进行更改时报告。 Chgrp仍会报告其他内容,例如是否不允许操作。
参数-f (-- silent ,-- quiet )用于禁止显示大多数错误消息。 我将在下一部分中使用此参数和-c ,以便仅显示实际更改。
保留根
Linux文件系统的根( / )应该受到高度重视。 如果在此级别上犯了命令错误,则后果可能非常严重,并使系统完全无用。 特别是在运行将进行任何类型的更改(或更糟糕的是删除)的递归命令时。 chgrp命令具有一个可用于保护和保留根的参数。 参数是--preserve-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 reserved”模式,并可能更改了不应更改的文件的权限:
[ 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命令允许用户覆盖当前的主组。 在所有文件必须具有相同组所有权的目录中工作时,newgrp会很方便。 假设您的Intranet服务器上有一个名为share的目录,不同的团队在该目录中存储营销照片。 该组是共享的 。 当不同的用户将文件放入目录时,文件的主要组可能会变得混乱。 每当添加新文件时,都可以通过将组设置为share来运行chgrp来纠正任何混淆:
$
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命令在这种情况下很有用。 在任何用户将文件放入共享目录之前,他们可以运行命令newgrp share 。 这会将其主要组切换为共享,因此他们放入目录中的所有文件将自动具有组share ,而不是用户的主要组。 完成操作后,用户可以使用(例如)切换回其常规主要组:
newgrp alan
结论
了解如何管理用户,组和权限非常重要。 最好知道一些替代方法来解决可能遇到的问题,因为并非所有环境都以相同的方式设置。
翻译自: https://opensource.com/article/19/9/linux-chgrp-and-newgrp-commands
linux chgrp