【问题标题】:Where and How to store program information in Linux在 Linux 中的何处以及如何存储程序信息
【发布时间】:2011-10-08 18:36:20
【问题描述】:

我是 Linux 新手,我只是搞砸过它,但现在我想让我的 Java 程序在 Linux 上运行...

我在互联网上快速浏览了一下,发现了一个目录列表及其说明。 /usr/lib 似乎是我存储程序信息的最佳位置,但我刚刚在我的 VirtualBox VM 上查看了那里,似乎我无法在那里写入,即使具有 root 权限。因此,如果有人能指出我正确的方向,那就太好了。

我还注意到 Linux 有它自己的“软件中心”,我担心我可能会在这一切上走错路,所以如果有人愿意,对 Linux 编程的某种介绍可能会有所帮助请提供一个!

提前致谢

PS 我的虚拟机是一个 Ubuntu 发行版

【问题讨论】:

  • Linux是内核,你说的是Ubuntu吗?
  • 当时给出的术语是“Solaris”吗?你知道,像 Ubuntu 和 Gnome - 所有那些使用 Linux 的操作系统!但是,是的,在这种特殊情况下,我正在使用 Ubuntu 进行测试......
  • Solaris 和 Linux 都是 UNIX。 Solaris 不是 Linux 的一种。
  • 不要指望所有发行版都一样...
  • Linux 发行版经常遵循 FHS:en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard

标签: java linux


【解决方案1】:

不仅 Linux 的文件系统结构,而且任何与 POSIX 兼容的系统(包括 BSD、Solaris 以及在较小程度上甚至 Mac OS X)的文件系统结构都在 FHS 中进行了标准化。专门针对 Ubuntu,请查看 ubuntu-java 团队的 Debian policy for Javapackaging guide

如果您的程序以交互方式运行,它应该将信息(如数据库和设置)存储在 $HOME/.your-program-name(或 $HOME/.config/your-program-name)中。如果您的程序是系统服务,则应将其信息存储在/var/lib 中。您还可以将默认配置安装到/etc/your-program-name

二进制文件完全不同,它们位置的前缀应该是可配置的。要充分利用软件中心及其依赖/更新机制,请package 您的软件。如果打包,这些二进制文件(以及随附的库)将进入 /usr/ 树,如果手动安装,则进入 /usr/local/。无论前缀如何,二进制文件进入bin(即/usr/bin),库进入lib32/lib64,其他数据进入share

如果您不想打包您的程序并且不想遵循 FHS 强加的结构(但您确实应该这样做),则另一种方法是将代码和其他对象放入 /opt/your-program-name。请注意,您的程序生成和操作的(可变)数据仍应进入$HOME/.your-program-name(interactive) 或/var/lib/your-program-name(service)。

【讨论】:

  • 这比我最初预期的要复杂得多,home/.program-name 对我来说似乎不太合适,特别是考虑到我现在看不到其他任何东西。 . 我之所以提到`usr/lib' 是因为我的其他程序似乎都位于那里,但转念一想,我通过软件中心下载了它们。所以如果我不使用软件中心,主目录会是我应该安装程序的地方吗?
  • @Andy 实际上,它并不像看起来那么复杂。您在何处安装程序运行的数据取决于您是手动安装程序还是使用软件中心安装程序。注意路径不是/home/.program-name,而是/home/user/.program-name。在 Java 中,使用 System.getProperty("user.home") 获取主目录。
  • @Andy 你在哪里存储你的程序与你在哪里存储你的数据是一个完全不同的问题。将您的程序(JAR 文件、资源等)放入/usr/local/share/yourprogram,并将可执行的启动脚本放入/usr/local/bin。或者,将整个混乱放入/opt/yourprogram
  • @phihag:我确实得到了纠正,/home/user/ 中有其他程序的数据,所以看起来如果我存储我的数据。但是,我仍然不知道在哪里安装实际的可执行文件,因为即使具有 root 权限,我也无法写入您建议的路径
  • @Andy 有了 root 权限,您可以在每个挂载为可写的文件系统上进行写入。在普通的 Ubuntu 上,sudo mkdir /var/lib/yourprogramm 工作得很好。如果您无法写信给/opt,请在askubuntu 上提出一个新问题,为什么会这样。复制并粘贴一个终端会话(或提供一个屏幕截图)以重现您的问题。
【解决方案2】:

将其存储在运行程序的用户的主目录下 - 隐藏目录(以点开头),例如:.program-data。它的简短路径是:~/.program-data 和它的完整路径取决于操作系统的发行版 - 通常是 /home/[user name]/.program-data

【讨论】:

  • 要查找的系统属性是“user.home”,它将给出主目录的路径,例如:System.getProperty("user.home")
【解决方案3】:

存储应用程序的最简单位置是主目录。您可能希望为服务创建用户和单独的主目录。

但是,听起来您是在用 Java 编写命令行或 GUI 工具。存储应用程序的常见位置是在bin 目录下,如/usr/local/bin/home/myuser/bin lib 通常用于应用程序加载的共享库。 (Java 不使用它们)

【讨论】:

  • 我确实在用 Java 制作一个 GUI,但我似乎无法写入 /usr/local/bin,即使具有 root 权限,并且 '/home/user/bin` 不存在!另外,无论如何,第一个目录中没有存储任何其他程序!?所以,我仍然需要一个地方来存储程序可执行文件! /home/user/.program-name 就够了吗?
【解决方案4】:

您应该始终在 $HOME 目录中存储/安装应用程序和程序。

这将使您可以轻松找到应用程序和程序。

在 $HOME 下为软件和程序创建单独的文件夹以便于识别。

另外,在 .bashrc 文件中添加 JAVA_HOME 环境变量。

【讨论】:

  • 老实说,这绝对看起来不对 - 没有其他可执行文件!?
  • 我在 $HOME/Softwares 目录下安装了许多应用程序和软件。它对我来说很顺利。其他可执行文件是什么意思。如果您的工作环境与玩系统文件等有关。然后可以搜索其他解决方案..
  • “$Home/Softwares 目录”到底是什么意思?我所说的“没有其他可执行文件”是指此时只有我的用户的目录存在。那里似乎没有存储其他软件......但是,我将使用不是来自软件中心的其他软件进行调查,看看我是否可以捏出任何进一步的想法......
  • 首先,“$HOME”指的是这个目录“/home/”。要查看帐户名称,请输入“echo $USERNAME”。其次,我有一台单用户台式电脑。据我所知,您正在运行多个用户服务器方案。在这种情况下,你可能是对的。
  • 我认为这里对我们俩都有一些误解。通过“$HOME”,我虽然您只是指/home/ 目录,不包括用户的文件夹 - 但实际上我确实在 $HOME 文件夹中有程序文件!无论如何,主文件夹实际上是我计划使用的 - String directory = System.getProperty("user.home") + File.separator + ".my-program" 所以谢谢....
猜你喜欢
  • 1970-01-01
  • 2015-02-13
  • 2020-12-19
  • 1970-01-01
  • 2012-09-06
  • 2013-11-28
  • 1970-01-01
  • 2017-06-05
  • 1970-01-01
相关资源
最近更新 更多