系统范围的配置文件绝不应位于用户的主目录中。太容易破坏,或错误修改,不当更改权限。
/etc 在您管理多个系统时会出现问题。最佳实践:将副本保存在另一个目录中,并酌情通过 scp 推送到所有适当的系统。
如果您有不受系统包管理器管理的包,例如从源代码安装。如果您正在运行多个版本的软件,那就更难了。
随着系统数量和类型以及软件包和版本数量的增加,管理变得更加复杂。对于一台用户很少的机器,在 /etc 中进行配置就可以了。
举个反例:考虑是否自定义 foo 安装。假设这是您的发行版提供的一个包,但您需要一个稍微不同的版本。
在默认位置安装配置文件可能会导致它在下次系统升级时被破坏。 (可能与您在 /usr/bin 中的修改版本一起)
一种常见的做法是将您添加/修改的内容与系统文件树完全分开。
当我是一名练习系统管理员时,我将所有特殊的东西都放在 /opt 中。
/opt
/opt/bin
/opt/sbin
/opt/usr/bin
/opt/usr/sbin
/opt/man
/opt/etc
这可以防止系统影响文件,但并不总是清楚哪些文件属于哪个包。
具有许多可执行文件和手册页的包可能有自己的目录。 Netpbm 和 ImageMagic、gnu utils、perl(模块)就是很好的例子。这为目录树添加了一个级别。
/opt/misc/bin #Contained anything that was one program, one man page
/opt/netpbm_2.1/bin
/opt/imagemagick_3.2/...
/opt/gnu_1.1/...
连同所有其他目录。例如全套 /opt/{package-version}/{bin|sbin|man|etc|var}
This is especially true for packages where you need to keep multiple versions. e.g.
/opt/perl4.023...
/opt/perl5.8...
为大型包维护单独的树使切换变得容易——快速退出错误的更改。在大多数情况下,您将在用户的默认路径中保留符号链接以指向实际的二进制文件。例如。 /usr/bin/perl -> /opt/perl5.8/bin/perl.这里的好做法是留下特定版本的链接。例如/usr/bin/perl4 -> /opt/perl4.023/bin/perl
在某些地方,您需要处理多种架构。 (我在一个地方有 11 个 unix 变体......)这可以为树添加另一个级别:
/opt/hpux/...
/opt/irix/...
/opt/sysv/...
/opt/solaris/...
通常我只在 NFS 文件共享上保持这种方式,并且在各个机器上制作本地副本。
复杂层次结构的优点是易于维护。如果 /opt/apache 包含所有二进制文件、手册页和配置文件,那么如果您决定更改为 lighttpd,那么您最终不会将 lighttpd 与 apache 的配置文件混淆。 (两者都称为httpd.conf)
这也意味着当您尝试一个包裹并将其移除时,您不会到处乱扔垃圾。
通常您不希望应用程序的数据驻留在其 /opt/application 树中。
有缺点: