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


75

我正在做一个bash shell脚本,我想更改创建新文件的默认组。我知道您使用umask过更改权限。团体有东西吗?

Answers:


13

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

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

newgrp(1)


我是该论坛的成员,为什么会要求我输入密码?它不喜欢我的密码!
迈克尔

另外,如果我以root身份运行“ newgrp <group>”(例如,使用sudo运行带有newgrp的脚本),它会将我转储到根shell中。
迈克尔

这不是newgrp应该用于的目的。如果您忘记在脚本之外使用newgrp会发生什么?该脚本将如何处理newgrp创建的新外壳。@ mark40的答案更好。
诺埃尔,

16
这真的算是答案吗?这是一个链接。
mcont 2014年

不由自主地投票,因为那是有趣的信息。我仍然认为@ mark4o的答案应该是正确的。
Teekin

184

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

  1. 您可以通过在目录(chmod g+s _dir_)上设置setgid标志来更改在特定目录中创建的所有文件的默认组。然后将使用目录组(使用设置chgrp <group> <dir>)创建目录中的新文件。这适用于在目录中创建文件的任何程序。

    请注意,这对于新的子目录是自动继承的(从Linux 3.10开始),但是,如果子目录已经存在,则此更改将不会应用于它们(使用该-R标志)。

  2. 如果未设置setgid标志,则默认组将设置为创建过程的当前组ID。尽管可以使用newgrp 命令来设置,但是这会创建一个很难在shell脚本中使用的新shell。如果要对更改后的组执行特定命令(或命令集),请使用命令sg <group> <command>

    sg 不是POSIX标准命令,但在Linux上可用。


10
只是一个小纸条。如果尝试chmod g+s _dir_在具有组y的目录上运行,并且正在用户x下运行该命令,并且用户x不是组y的成员,则它将行不通。您必须以root身份运行它。
LEDfan 2016年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.