XDG_RUNTIME_DIR 中的粘滞位和套接字文件

XDG_RUNTIME_DIR 中的粘滞位和套接字文件

我在下面的子目录下存储一些 Unix 套接字文件$XDG_RUNTIME_DIR。在文档中,我可以读到:

此目录中的文件可能需要定期清理。为了确保您的文件不被删除,它们的访问时间时间戳应该至少每 6 小时的单调时间修改一次,或者应该在文件上设置“粘性”位。

我想知道是否有必要在每个套接字文件上设置粘滞位以避免定期清理,或者在我存储所有套接字文件的子目录中设置粘滞位是否足够。

答案1

的部分XDG 基本目录规范您引用了有关设置粘性位的内容在文件上

此目录中的文件可能需要定期清理。为了确保您的文件不被删除,它们的访问时间时间戳应该至少每 6 小时的单调时间修改一次,或者应该设置“粘性”位在文件上

这里的规范有些含糊,因为文件可以意味着每个文件系统实体,非目录文件系统实体或者常规文件取决于上下文。但是目录上的粘性位在 Linux 上有特殊的效果,甚至在用于目录时命名不同。chmod(1) 联机帮助页

限制删除标志或粘性位是单个位,其解释取决于文件类型。对于目录,它可以防止非特权用户删除或重命名目录中的文件,除非他们拥有该文件或目录;这称为目录的限制删除标志,通常在 /tmp 等全局可写目录中找到。

因此,有理由假设文件在 XDG 文档中,在此上下文中意味着非目录文件系统实体

但由于规范并不完全明确,它将取决于您的发行版清理机制的实现。看起来目前至少在 Fedora 和 Linux Mint 上没有这样的定期清理,但由于这可能在未来发生变化,并且不知道发行版将如何解释规范的这一部分,因此设置它更安全在您想要从定期清理中排除的每个文件/套接字上。

编辑:对于systemd基于的发行版,pam_systemd负责管理$XDG_RUNTIME_DIR。目前仅在首次登录时执行创建,在最后一次注销时执行删除。还在systemd$XDG_RUNTIME_DIR 的子目录中创建套接字,并且不会在任何内容上设置粘滞位。这强烈表明至少还没有systemd基础发行版实现定期清理。

答案2

由于粘滞位对非目录没有影响,我认为这是程序进行清理的问题。

必须使用粘滞位来告诉该程序不要理会这些文件。因此,如果您无法从文档中看出,您将不得不:

  • 找到哪个程序正在进行清理,并阅读其源代码。
  • 做一个实验:将几个文件/套接字放入目录中,一些设置了粘性位,一些未设置,看看会发生什么。 (使用虚拟文件:未用于任何用途的文件。)

相关内容