在Linux上何处存储应用程序数据(非用户特定)

在我的基于OSGi的Java应用程序中,我正在开发一个捆绑包,为系统的其余部分提供对文件系统的访问。 除了提供访问用户主目录之外,我还希望提供对非用户特定区域的访问。 这个区域究竟是用于尚未确定的,但它不会用于偏好(由不同的bundle处理),但是它可能被用来存储可能在运行时改变的数据。

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

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

Linux中的一个明智的等价物在哪里?我如何从Java代码中获得句柄?

Solutions Collecting From Web of "在Linux上何处存储应用程序数据(非用户特定)"

这取决于您计划存储哪种数据。 这个答案的前提是你在运行时存储和修改数据。

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

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

在修改数据时,这违背了/usr子系统的只读性质。

存储应用程序状态数据的看似更好的地方是/var ,或者更具体地说是/var/lib 。 这也来自层次标准 。 您可以创建一个/var/lib/myapp ,或者如果您还使用锁文件或日志等,可以使用/var/lock/var/log

深入了解整个标准(与上面相关) – 您可能会发现一个适合您希望做得更好的地方。

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

这取决于。

  • 全局配置 – > / etc / appname

  • 只读,与机器架构无关 – > / usr / share / appname

  • 只读,机器特定 – > / usr / lib / appname

  • 读写 – > / var / lib / appname

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

既然你使用的是Java,你看过Preferences API吗?

从介绍:

应用程序需要首选项和配置数据来适应不同用户和环境的需求。 java.util.prefs包为应用程序提供了一种存储和检索用户和系统首选项和配置数据的方法。 数据永久存储在依赖于实现的后台存储中。 偏好节点有两个独立的树,一个用于用户偏好,一个用于系统偏好

我会让内置的API来完成这项工作。

freedesktop.org (以前称为X桌面组)项目已经在XDG基本目录规范中为此定义了一些标准。

在你的情况下,我会看看$XDG_DATA_DIRS

$XDG_DATA_DIRS定义$XDG_DATA_HOME基本目录之外, $XDG_DATA_DIRS定义了基本目录的首选项集以搜索数据文件。 $XDG_DATA_DIRS的目录应该用冒号':'分隔。

如果$XDG_DATA_DIRS未设置或为空,则应使用等于/usr/local/share/:/usr/share/值。

我热烈建议阅读XDG基本目录规范 。

在/ usr / share或/ usr / local / share文件夹中

如果它不是用户特定的,那么可以将其存储在/ usr / share / appname下

我知道这是一个老问题,但是根据https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard (截至2015年7月似乎更新和正确)…

假设数据文件被理解为不符合/tmp/var/tmp的要求,那么应该/usr/local/share/theApp/usr/local/theApp

你想像那样硬编码吗? 您可以使用System.getProperty(“user.home”)将用户置于首页,以使其更独立于平台。