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有几种方法可以做到这一点:
您可以更改在特定文件中创建的所有文件的默认组
通过在目录上设置 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 脚本 - 如何设置创建新文件的组?的主要内容,如果未能解决你的问题,请参考以下文章