关于离线临时数据的约定

关于离线临时数据的约定

在编写小型实用程序时,我有时想保留少量数据之间执行,通常用于缓存目的,但不希望程序作为守护进程运行。有这方面的约定吗?制作文件/tmp似乎很明显,因为它通常保存在内存中,并且仅在关闭时擦除,但我很好奇是否还有其他方法。另外,是否有命名文件的约定/tmp

答案1

如果该程序是由系统管理员安装的,并且偶尔删除数据也没关系,请在下面创建一个目录/var/cache。系统管理员可以随时删除下面的文件/var/cache,但通常不会删除,除非系统磁盘空间不足。进行管理/var/cache/YOUR-DIRECTORY以使其不会失控是您的应用程序的责任。

如果该程序是由系统管理员安装的,并且在没有应用程序控制的情况下绝不能删除数据,请在/var/lib

不要用于/tmp此目的:它可以(并且经常)在重新启动时被擦除。/tmp仅适用于在应用程序的单独调用之间不保留的数据。两者都不要使用/var/tmp:虽然它通常不会在重新启动时被删除,但系统管理员可以选择随时擦除它。

如果您的应用程序由各个用户执行并且每个用户都有自己的数据集,则文件必须位于用户的主目录中。没有传统的 Unix 标准来组织用户主目录中的文件,除了使用名称以.(“点文件”)开头的文件。有一个现代标准,XDGFreeDesktop 规范。对于缓存数据(可以擦除,除了性能之外不会影响任何内容),在 下创建一个目录$XDG_CACHE_HOME,默认为~/.cache.对于应用程序数据,在 下创建一个目录$XDG_DATA_HOME,默认为~/.local/share,或直接在主目录下(在本例中以 开头.)。

答案2

还有/run,但约定似乎是,虽然/tmp全局可写,但/run需要 root 权限。 /var有类似的限制。

因此,最好的选择是/tmp, 或通过配置安排的内容(以便用户可以指定运行时目录)。

就命名约定而言,它似乎是一个免费的全局空间——使用任何你想要的标识符,遵循常识原则,这/tmp/stuff可能不是一个好主意,因为它更有可能被其他人踩踏具有类似绝妙想法的人

我注意到一些应用程序使用基于 java 式域的命名空间,例如.com.google.Chrome.只要它是独特的并且对任何人都有意义就没关系。如果它还能向其他人提供一些关于它来自哪里的线索,那就加分了。

相关内容