【发布时间】:2010-11-22 05:06:05
【问题描述】:
我正在编写一个 bash shell 脚本,我想更改创建新文件的默认组。我知道您使用umask 更改权限。有什么适合小组的吗?
【问题讨论】:
标签: linux bash unix shell permissions
我正在编写一个 bash shell 脚本,我想更改创建新文件的默认组。我知道您使用umask 更改权限。有什么适合小组的吗?
【问题讨论】:
标签: linux bash unix shell permissions
【讨论】:
有几种方法可以做到这一点:
您可以更改在特定文件中创建的所有文件的默认组
通过在目录上设置 setgid 标志 (chmod g+s <dir>)。
然后,目录中的新文件将使用
目录(使用chgrp <group> <dir> 设置)。这适用于任何程序
在目录中创建文件。
请注意,对于新的子目录,这是自动继承的(从
Linux 3.10)。但是,如果子目录已经存在,则此更改
不会应用于他们。假设子目录已经有正确的
组,可以将 setgid 标志添加到其中:
find . -type d -exec chmod g+s {} \;(由 cmets 中的 Maciej Krawczyk 建议)
如果未设置 setgid 标志,则默认组将设置为当前
创建过程的组 id。虽然这可以使用newgrp 进行设置
命令,它创建了一个难以在 shell 中使用的新 shell
脚本。如果要执行特定命令(或一组命令)
对于更改后的组,使用命令sg <group> <command>。
sg 不是 POSIX 标准命令,但在 Linux 上可用。
【讨论】:
chmod g+s _dir_,并且您在用户 x 下运行命令,并且用户 x 不是组 y 的成员,它将无法工作。您必须以 root 身份运行它。
find . -type d -exec chmod g+s {} \;