【问题标题】:Where do you put global application data on Linux (Mint 13 specifically)?您将全球应用程序数据放在 Linux 上的什么位置(特别是 Mint 13)?
【发布时间】:2012-11-22 21:18:56
【问题描述】:

我看到有人建议 /var/lib 但这在我的系统上不起作用。 /var 的每个子目录都是只读的,除了 /var/lock 和 /var/log。

我是否只需要编写一个 Linux shell 脚本来授予超级用户访问权限?还是有基于 Java 的解决方案?

/bin 和 /usr 都是系统文件目录,所以我不想(也不能)在那里存储文件。

只要应用程序只需要在用户内部操作我就可以使用:

System.getProperty("user.home") + File.separator + ".appname"'

用于数据目录。

但是持久的系统范围数据呢?去哪儿了?

额外注意:我在 MacOS 上也有这个问题。我可以将 /user/Library/Application Support 用于特定于用户的数据,但我无法访问全局目录。

第二个注意事项:我知道并使用了 Preferences API。我正在寻找一种方法来存储除此之外的数据。

【问题讨论】:

  • 全局应用数据是什么样的?
  • 通常使用/var/lib。你确定你在那里没有访问权限吗?
  • 普通用户为什么要修改系统数据?
  • 我不需要修改系统数据,只为应用程序存储非用户特定的数据。我在 Linux Mint 13 (MATE) 上没有对 /var/lib 的写入权限。

标签: java linux macos data-storage


【解决方案1】:

通常所做的是使用系统的打包工具安装应用程序。但是您也可以编写自己的安装程序脚本。在安装过程中,以root身份运行,可能会创建一个新组,并在/var/lib下创建一个属于该组的新目录。例如,locate 命令执行以下操作:

$ ls -l /usr/bin/locate
-rwx--s--x 1 root locate 42032 Nov 17 19:33 /usr/bin/locate

它是数据目录:

drwxr-x--- 2 root locate 4096 Nov 15  2010 /var/lib/slocate

locate 命令使用 setgid 功能将其自己的进程组 ID 设置为 locate,从而授予它读取 /var/lib/slocate 子目录的权限。

在您的情况下,您(您的安装程序)也将设置写入权限,以便应用可以代表用户在那里写入数据。

【讨论】:

    【解决方案2】:

    从我收集到的 /var/lib/ 目录是放置东西的正确位置。访问这些目录时,您需要是 root。

    您可以尝试使用http://www.freedesktop.org/wiki/Software/polkit 工具包来提升Linux 中的权限。 (它是免费软件。)

    http://www.amug.org/~glguerin/sw/#authkit 之类的东西可能对 Mac 有帮助。

    在 Linux 上,您还可以使用 gksudo 运行安装部分的例程。或者使用这里提到的命令。 https://stackoverflow.com/a/690491/1790338

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2010-10-17
      • 2012-03-03
      • 1970-01-01
      • 1970-01-01
      • 2011-04-09
      • 1970-01-01
      • 2010-09-18
      • 1970-01-01
      • 2015-04-10
      相关资源
      最近更新 更多