问题:我和妻子共享一个目录。我把我们俩都放在一个“共享”组中,并且该目录也属于“共享”组。每当我们其中一人创建一个文件时,该文件就属于 user:user,而不是 user:shared...
解决方案:我可以执行 sudo chown,但我的妻子不能。因此,我想在退出会话时运行一个脚本。
如果我理解正确的话,启动脚本进入 /etc/init.d/ 而运行级别脚本进入 /etc/rc0.d/ 其中 0 是运行级别 (0-6)。
问题: 运行级别脚本是否仅在退出/注销时执行?这些是否取决于用户,也就是说,我只想为我的用户运行它(请注意,在这种情况下并不那么重要)?我应该选择哪个运行级别(我猜是 5)?我应该将脚本放在其他地方吗?
另外,我想象该脚本将由 root 运行,因此脚本中不需要 sudo,对吗?
答案1
我相信您可以使用 setgid 位?
从man 2 chmod
:
S_ISGID (02000) 设置组 ID(在 execve(2) 上设置进程有效组 ID;强制锁定,如 fcntl(2) 中所述;从父目录中获取新文件的组,如 chown(2) 和 mkdir(2) 中所述)
运行级别脚本仅在运行级别改变时执行。
另请参阅此主题:https://superuser.com/questions/65460/create-a-logoff-script-task-for-linux
答案2
- 运行级别脚本是否仅在退出/注销时执行?
/etc/init.d 中的那些仅在启动/关闭时起作用,而不是在切换用户/注销/登录时起作用。
- 这些是否取决于用户,也就是说,我只想为我的用户运行它(在这种情况下并不那么重要,请记住)?
因为它们在登录之前运行:不,它们不依赖于用户。
- 我应该选择哪个运行级别(我猜是 5)?
Ubuntu 通常使用 2 作为标准运行级别。你可以使用以下命令进行测试
runlevel
在壳中。
我应该把脚本放在其他地方吗?根据 brownian 的说法,您可以使用 ~/.logout,但更好的解决方案是生成具有适当 Group-ID 的文件。这可以通过使用 sg 启动编辑器来完成。
sg 分享 gedit
sg
作用类似于su
- 切换用户/切换组。也许您可以将启动器放入面板中,以便于访问。布朗的整个目录解决方案看起来更好。
- 另外,我想象该脚本将由 root 运行,因此脚本中不需要 sudo,对吗?
没错。