够简单的。我有用户 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
答案3
如果所考虑的文件没有分散在太多目录中,那么您甚至可以使用 Unix 权限的一个微妙功能(即目录的 SGID 位)来自动化该过程。
假设一个目录的权限为 2775(比如说),该目录rwxrwsr-x
的所有者是xyz.common
.如果作为组成员的用户common
在此目录中创建文件或子目录,则其组所有权将自动设置为common
。