在 PC 上,XDG Desktop 规范允许各个桌面为各种数据设置不同的文件夹。当编写仅在服务器上运行的应用程序时,是否应该简单地进行硬编码等/etc/myapp
,/var/cache/myapp
或者是否应该检查潜在的环境变量或类似变量?
答案1
据我所知,大多数 Linux 应用程序确实都有硬编码路径,但有时允许使用环境变量和命令行参数重新定义它们。
我认为对这些路径进行硬编码没有任何问题,但如果您允许将配置文件位置指定为命令行参数,并且在此 conf 文件中允许更改/var/cache/myapp
.
如果您对所有内容进行硬编码,至少请确保发行版中的现有软件包不会与您的位置发生冲突。对于基于 DNF 的发行版,它将是(这是一个示例):
dnf whatprovides '/var/cache/dnf'
dnf-4.9.0-1.fc35.noarch : Package manager
Repo : @System
Matched from:
Filename : /var/cache/dnf
dnf-4.9.0-1.fc35.noarch : Package manager
Repo : fedora
Matched from:
Filename : /var/cache/dnf
所以你显然不能使用/var/cache/dnf
.
最后,将所有内容安装在/opt/appname
或中会容易得多/usr/local/opt/appname
。没有本机 Linux 应用程序使用这些目录。
答案2
应该在程序上硬编码路径吗?不!
至少,您应该在编译时配置路径,以便应用程序可以安装在/var/local
、 、/opt
、 或/home/someuser
、 或系统管理员想要的任何位置。更好的是,有一个命令行选项,可用于将程序指向其配置文件,然后可用于设置所需的任何其他路径。 (在编译时设置默认位置。)