在 Linux 上存储应用程序数据(非用户特定的)的位置

2022-08-31 15:47:12

在我基于OSGi的Java应用程序中,我正在开发一个捆绑包,为系统的其余部分提供对文件系统的访问权限。除了提供对用户主目录的访问外,我还希望提供对非用户特定区域的访问。此区域的确切用途尚未确定,但它不会用于首选项(由不同的捆绑包处理),但是它可用于存储可能在运行时更改的数据。

我打算为此目的使用以下目录:

  • Windows Vista & Windows 7: “\ProgramData”.
  • Windows XP:“\Documents and Settings\All Users”。
  • Mac OS X:“/Library/Application Support”。

Linux中明智的等价物在哪里,我如何从我的Java代码中处理它?


答案 1

这取决于您计划存储的数据类型。此答案的前提是您在运行时存储和修改数据。

与其他人的建议相反,我建议不要用于存储。从文件系统层次结构标准:/usr/share

/usr/share 层次结构适用于所有独立于只读体系结构的数据文件。

在修改数据时,这与子系统的只读性质背道而驰。/usr

存储应用程序状态数据的看似更好的位置是 ,或者更具体地说,是 。这也来自层次结构标准。您可以创建一个 ,或者如果您还使用锁定文件或日志之类的东西,则可以利用 或 ./var/var/lib/var/lib/myapp/var/lock/var/log

更深入地了解整个标准(链接到上面) - 您可能会找到一个适合您想要做得更好的地方。

Steve K 一样,我也建议对应用程序首选项数据使用首选项 API。


答案 2

这要视情况而定。

  • 全局配置 -> /etc/appname

  • 只读,独立于计算机体系结构 -> /usr/share/appname

  • 只读,特定于计算机的 -> /usr/lib/appname

  • 读写 -> /var/lib/appname

不保证完整性,请检查文件系统层次结构标准


推荐