Linux中的硬编码路径

时间:2010-09-16 17:07:50

标签: linux language-agnostic

来自Windows背景。

GUI Linux应用程序将数据文件(非用户特定的)存储在硬编码位置(例如/ etc / myapp / stuff)是否可以接受?我找不到任何会返回app数据首选目录的系统调用。那里有什么约定?

6 个答案:

答案 0 :(得分:5)

根据{{​​3}}

/opt/appname/stuff

您的发行版的打包系统可能提供了处理常见安装路径的方法。您使用的是什么发行版?

答案 1 :(得分:4)

一般来说,是的,有一个约定。在大多数Linux系统上,应用程序配置文件通常位于/etc/appname/ 。您需要咨询LSB (Linux Standard Base)Linux FHS (Filesystem Hierarchy Standard)以获取各自的建议。

此外,如果您将应用程序定位到特定的Linux发行版,那么就打包和相关约定而言,该发行版供应商可能有自己的特定建议。您需要查看发行商供应商的开发者页面以获取更多信息。

答案 2 :(得分:3)

具有提升权限的进程的配置文件通常存储在/etc中。具有提升权限的进程(Web服务器,邮件服务器,聊天服务器等)的数据文件通常存储在/var中。这就是一致性结束的地方。有些人说你开始存储它们的位置(/etc | /var),然后为你的应用设置一个appname子文件夹,然后根据需要从那里继续。

如果您不是具有提升权限的系统守护程序,则唯一一致的选择是启动用户主目录中的点目录。我认为免费桌面标准(XDG)为每个用户配置指定~/.config,为需要保存的可替换静态和/或生成数据指定~/.cache

查看我的主目录,我有几个关键点目录: ~/.cache ~/.config ~/.irssi ~/.maildir ~/.mozilla ~/.kde ~/.ssh ~/.vnc

[编辑]
虽然不是系统调用,但我引用的XDG规范是http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html

答案 3 :(得分:2)

有某些惯例。

  • 系统范围,可读/可编辑(基于文本)的配置文件位于/etc/appname/
  • 更改的系统范围的每台机器二进制数据文件(例如二进制数据库)进入/var/*/appname/ - /var/cache/appname//var/spool/appname//var/lib/appname/是最常见的
  • 可以在机器之间共享的系统级二进制数据文件(例如图形和声音文件之类的东西)都在/usr/share/appname/

答案 4 :(得分:1)

在编译之前配置应用程序时,通常会设置Unix / Linux / GNU应用程序用于存储配置文件和其他数据的完整路径。然后将这些路径硬编码到已编译的二进制文件中(您可以通过在某些现有可执行文件上运行strings(1)来查看此示例。)

也就是说,这些类型的路径是构建时可配置的,而不是默认的运行时可配置 。许多应用程序将支持命令行选项以指定配置文件的位置,并且该配置文件通常包含其他应用程序资源的路径。这允许应用程序以最小配置(内置路径)运行,但也允许站点完全自定义路径。

答案 5 :(得分:0)

在Linux下,只提供基本服务(打开文件,进行网络和进程间通信等)作为系统调用。其余的是使用库完成的。

如果您正在编写GUI应用程序,则应查看工具包的文档,以查看它是否提供了管理默认值的机制。例如,KDEGnome都有一个。