Bash 脚本 - 如何设置创建新文件的组?

Posted

技术标签:

【中文标题】Bash 脚本 - 如何设置创建新文件的组?【英文标题】:Bash Scripting - How to set the group that new files will be created with? 【发布时间】:2010-11-22 05:06:05 【问题描述】:

我正在编写一个 bash shell 脚本,我想更改创建新文件的默认组。我知道您使用umask 更改权限。有什么适合小组的吗?

【问题讨论】:

【参考方案1】:

newgrp 命令用于在登录会话期间更改当前组 ID。

在该会话中创建的新目录将具有该命令设置的组 ID。

newgrp(1)

【讨论】:

我是该组的成员,为什么它要我输入密码?它不喜欢我的密码! 另外,如果我以 root 身份运行“newgrp ”(例如,使用 sudo 运行带有 newgrp 的脚本),它会将我转储到 root shell。 这不是 newgrp 的用途。如果您忘记在脚本之外使用 newgrp 会发生什么?脚本将如何处理 newgrp 创建的新 shell。 @mark40 的回答更好。 这真的被认为是一个答案吗?这是一个链接。 忍不住点赞,因为这是有趣的信息。我仍然认为@mark4o 的答案应该是正确的。【参考方案2】:

有几种方法可以做到这一点:

    您可以更改在特定文件中创建的所有文件的默认组 通过在目录上设置 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 上可用。

【讨论】:

只是一个小笔记。如果您尝试在具有组 y 的目录上运行 chmod g+s _dir_,并且您在用户 x 下运行命令,并且用户 x 不是组 y 的成员,它将无法工作。您必须以 root 身份运行它。 @LEDfan 啊!优秀的提示/点!最后一部分(用户必须是该组的成员才能工作)是我过去一直努力让它工作的一个原因。谢谢! 不要使用 chmod -R 您将对产生安全问题的文件应用 setgid(可执行文件将始终以组所有者身份运行,无论谁运行它)。使用它来仅将其应用于目录find . -type d -exec chmod g+s \;

以上是关于Bash 脚本 - 如何设置创建新文件的组?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置RadDataForm的组标题?

bash 脚本中的源文件

如何在记事本++ 6.5.5 上将 unix/bash 设置为默认语言

如何让shell脚本变成可执行文件

如何让shell脚本变成可执行文件

如何将目录设置为具有持久组权限?