在 shell 中更改组

在 shell 中更改组

够简单的。我有用户 foo。 foo 属于组 foo (main)、audio、A、B 和常见的

通常,文件是使用所有权 foo.foo 创建的。

有一段时间我希望 foo 用组创建文件常见的。基本上我是这样看的:

Cache present group
Change group to *common*
Touch alpha
Touch beta 
...
Change group back.

alpha beta (以及之后的任何内容)应该由所有者 foo 创建。常见的。我怎样才能做到这一点?

PS:哎呀。忘了说我想在 bash 和 zsh 中执行此操作。

答案1

bash 和 zsh 都没有此功能。

您可以致电newgrp。这是一个外部命令,它启动一个新进程。它SHELL不带任何参数运行环境变量指示的程序。

newgrp common <<EOS
touch alpha beta
EOS
touch belongs_to_original_group

请注意,由于newgrp启动了一个新 shell,它不会从原始 shell 的 shell 变量继承,仅从环境(导出)变量继承。在那里执行的任何分配只会在那里生效。

答案2

为此,请使用newgrp命令:

newgrp common
touch whatever
newgrp foo

由于您是两个组的成员(并且可能没有使用组密码),因此您应该能够轻松切换。实际上每次调用都会newgrp创建一个子shell。您可以检查您正在使用的“谁”id。是退出 shell(并恢复上一个组)还是创建新的子 shell 取决于您想要执行的操作。

与一些相关命令不同,这个命令位于POSIX

newgrp 实用程序应创建一个新的 shell 执行环境,并具有新的真实有效的组标识。

答案3

如果所考虑的文件没有分散在太多目录中,那么您甚至可以使用 Unix 权限的一个微妙功能(即目录的 SGID 位)来自动化该过程。

假设一个目录的权限为 2775(比如说),该目录rwxrwsr-x的所有者是xyz.common.如果作为组成员的用户common在此目录中创建文件或子目录,则其组所有权将自动设置为common

相关内容