当用户创建新文件时,为其设置默认组?

我经常发现自己在通过SSH创建文件时,它们的所有者是jm:jm之类的。然后为了允许Apache访问它,我需要执行chown jm:www-data之类的操作。我确定我可以在创建文件时指定另一个组,而不是使用我的名字下的组吗?或者有更好的管理用户/组的方法吗?
1个回答

如果你想让特定目录中的所有新文件都归属于特定的群组,只需对其应用setgid位即可。
chgrp www-data /some/dir
chmod g+s /some/dir

如果您有一个现有的目录树,想要将此行为应用于其中,您可以使用find命令来实现:
find /some/dir -type d -exec chgrp www-data {} +
find /some/dir -type d -exec chmod g+s {} +

如果目录已经属于相关组,则可以省略这两个示例中的第一个命令。

1好答案!能请你解释一下符号 ... {} + 的意思吗? - Alex Lomia
3这些是find命令的参数,在man手册中有详细介绍。对于第一次调用,它将运行chgrp www-data命令,并将多个结果作为参数附加(而不是像使用{} \;那样为每个结果单独调用命令)。 - James Henstridge
9为什么不使用chmod g+s /some/dir -R呢?我刚测试过,似乎可以正常工作。 - CragMonkey
22@Cragmonkey:这也会在普通文件上设置setgid位。如果其中任何一个是可执行文件,这将允许系统上的另一个用户获得拥有该文件的组的特权。 - James Henstridge