/ etc和/ usr / local / etc有什么区别


24

我正在开发一个需要存储大量应用程序数据的守护程序,我注意到在我的系统(Fedora 15)上有一个/usr/local/etc目录。

我已经决定将守护程序安装到/usr/local/bin,并且我的配置文件需要一个位置。

我在Wikipedia上没有看到这个。这是非标准的还是实际上是安装程序/usr/local/bin以存储配置文件的标准位置?

原因是,我想向系统管理员推销此产品,而遇到类似错误的情况并不是一个很好的卖点...


2
有什么理由不把它直接放在下面/etc/myapp吗?如果我想更改配置,那将是我想要的第一位。
new123456 2011年

@ new123456-我个人喜欢使配置文件保持接近二进制文件(例如/usr/local/bin-> /usr/local/etc)的想法,但是在这种情况下,约定会获胜。
beatgammit 2011年

Answers:


24

/usr/local通常用于从源代码构建的应用程序。例如apt,我使用类似的东西安装了我的大多数软件包,但是如果我下载了某个新版本的东西或某个软件(不是我的发行版的一部分),我将从源代码构建它,并将所有内容放入“ / usr / local”层次结构中。

这允许与其余的分发区分开。

如果你正在开发一个软件给别人,你应该设计它,以便它可以安装人们想要的任何地方,但它应该默认为普通FHS指定的系统目录时,他们指定的前缀是/usr/etc/usr/bin,等)

/usr/local仅供您个人使用,它不应该是安装软件的唯一位置。

看过的好FHS,并使用标准的Linux工具,使您的源代码被编译并安装任何地方,所以,对于各种发行包制造商可以配置它们需要它们的分布,用户可以把它放进/usr/local 如果他们的愿望或常规系统目录(如果需要)。


是的,我认为允许自定义很好,但是我想知道/usr/local/etc这些程序的配置文件是否标准。
beatgammit 2011年

如果我从源代码构建守护程序,则可以选择/ usr / local / etc,但是/ etc是有人将其与debian或Ubuntu打包在一起时可以选择的地方。
八比特托尼2011年

4
实际上,GNU标准要求该软件包默认为本地路径,因为从源代码构建该软件包的人通常不指定位置。发行包打包/构建时,会将其更改为非本地路径。
psusi 2011年

@ psusi-好的,我将确保将其设为默认值。也许我会检测我的make安装何时以root或普通用户身份运行。如果是root用户,则默认为/ usr / local;如果是用户,则默认为users主目录。我还将添加配置设置。
beatgammit 2011年

@ EightBitTony-是否有其他具有不同约定的平台?我已经为不同的平台(upstart,systemd,init)制作了不同的启动脚本。
beatgammit 2011年

7

一个简短的答案

/ etc由操作系统用于其配置文件

/ usr / local / etc可以由您和您另外安装的软件用于配置文件


4

/usr/local/etc在Linux世界中很少使用。但是/etc/usr/local/etc通常是在编译时决定是否将配置文件存储在或其他位置(通常可以通过命令行选项或环境变量来覆盖)。编译时的默认值到底有多大无关紧要,只要确保它易于设置即可(通常是--sysconfdirautoconf后的的选项)。如果将守护程序打包为发行版,/usr/sbin则可执行文件将进入(从源构建时的默认值应为/usr/local/sbin),并在下进行配置/etc

请注意,/etc这里不是“大量应用程序数据”的地方。那进入了/var。从源构建时的默认值可以是/var/local/mydaemon/var/lib/mydaemon; 同样,从源代码构建时,默认方法也没有严格的约定。应该有一种方法可以同时更改编译时默认值(通常使用configure --localstatedir)和运行时默认值(使用配置文件中的设置,还可以使用命令行选项或环境变量)。


/usr/local/etc没有为什么不经常使用的原因?我喜欢将配置文件与二进制文件保持在文件系统相同级别的想法。
beatgammit 2011年

1
@tjameson我不知道是否有广泛的原因。BSD就是这样做的。作为管理员,我喜欢所有的配置文件(必须在备份和变更控制,不像的东西binlib等可以重新安装)住在同一个地方。
吉尔(Gilles)“所以,别再邪恶了”,

1

作为Arch用户,我会避免使用/ usr / local,而只使用/ etc进行配置。从源代码安装时,我宁愿写一个小的PKGBUILD文件,也可能将来将其上传到Arch User Repository(AUR),供其他人和我自己在另一台计算机上使用。从AUR中的软件包数量及其创建速度来判断,我并不是唯一想到这种方法的人。这给每个人增加了一个可用软件包的机会,而不必从源代码安装它,并且能够避免过时的位置,例如/ usr / local。

Debian似乎也喜欢构建源代码包的想法,而不是在/ usr / local上安装任何东西,因此出现了诸如checkinstall之类的实用程序。

创建要安装的源程序包是跟踪文件位置的好方法,并确保其中的某些文件不会被另一个程序包或另一个“ make install”不一致地覆盖。使用“进行卸载”进行卸载不是一个好的解决方案。有关安装哪个版本的信息是现代程序包管理器擅长跟踪的另一件事。

我只会完全放弃/ usr / local。这不是放置任何东西的好地方,不是安装软件包(系统范围的目录更适合)并且不适合用户的地方。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.