我正在开发一个需要存储大量应用程序数据的守护进程,我注意到在我的系统(Fedora 15)上有一个/usr/local/etc
目录。
我决定将我的守护程序安装到/usr/local/bin
,并且我需要一个位置来存放我的配置文件。
我没看到这个维基百科。这是非标准的还是这实际上是安装的程序/usr/local/bin
存储配置文件的标准位置?
原因是,我想向系统管理员推销这个,而出现这样的错误并不是一个很好的卖点......
答案1
/usr/local
通常适用于从源代码构建的应用程序。即我使用类似的东西安装大部分软件包apt
,但是如果我下载不属于我的发行版的某些东西或软件的较新版本,我会从源代码构建它并将所有内容放入“/ usr / local”层次结构中。
这允许与发行版的其余部分分离。
如果您正在为其他人开发一款软件,您应该将其设计为可以安装在人们想要的任何地方,但它应该默认为常规版本FHS指定系统目录时指定前缀为/usr
( /etc
, /usr/bin
, 等)
ie/usr/local
仅供您个人使用,它不应该是安装软件的唯一位置。
好好阅读一下FHS,并使用标准的 Linux 工具允许在任何地方构建和安装您的源代码,以便各个发行版的软件包构建者可以根据其发行版的需要对其进行配置,并且用户可以将其放入/usr/local
如果他们愿意或者常规系统目录(如果他们愿意)。
答案2
一个非常简短的答案
/etc 由您的操作系统用于其配置文件
/usr/local/etc 可供您和您额外安装的软件用于您的配置文件
答案3
/usr/local/etc
在 Linux 世界中很少使用。但是,是否将配置文件存储/etc
在/usr/local/etc
或其他位置的决定通常是在编译时做出的(并且通常可以通过命令行选项或环境变量覆盖)。编译时默认值是什么并不重要,只需确保它易于设置(通常是--sysconfdir
autoconf 之后的 选项)。如果您的守护程序被打包用于发行版,则可执行文件将进入/usr/sbin
(从源代码构建时的默认值应该是/usr/local/sbin
)并且配置在/etc
.
请注意,这/etc
不是“大量应用程序数据”的地方。这就是/var
.从源代码构建时的默认值可以是/var/local/mydaemon
或/var/lib/mydaemon
;同样,从源代码构建时,默认情况下没有严格的约定。应该有一种方法可以更改编译时默认值(通常使用configure --localstatedir
)和运行时默认值(使用配置文件中的设置,可能使用命令行选项或环境变量)。
答案4
作为 Arch 用户,我会完全避免 /usr/local 并仅使用 /etc 进行配置。从源代码安装时,我宁愿编写一个小的 PKGBUILD 文件,并可能将其上传到 Arch 用户存储库 (AUR),以便将来在另一台计算机上为其他人和我自己使用。从 AUR 中的包数量以及创建它们的速度来看,我并不是唯一一个有这种想法的人。这增加了每个人都可以使用软件包的机会,而不必从源安装它,并且能够避免像 /usr/local 这样过时的位置。
Debian 似乎也喜欢构建源代码包而不是将任何东西安装到 /usr/local 的想法,因此像这样的实用程序检查安装。
创建您想要安装的源代码包将是跟踪文件位置的好方法,并确保其中一些文件不会被另一个包或另一个“make install”不一致地覆盖。使用“make uninstall”卸载并不是一个好的解决方案。有关安装哪个版本的信息是现代包管理器擅长跟踪的另一件事。
我会完全放弃 /usr/local 。这不是一个放置任何东西的好地方,不适合安装软件包(系统范围的目录更合适),也不适合用户。