为什么软件会自己安装在 /usr/lib 中?

Eri*_*AND 11 debian fhs

我多年来一直在使用 Linux 服务器,但我一直对文件系统层次结构标准感到困惑。通常,我可以忍受混乱。但是现在我正在为 Linux 开发自己的软件,我需要了解包管理器应该在哪里安装它。

我非常确信 /opt 是我的应用程序的完美位置。但是在调查了我的 Debian 文件系统之后,我不再确定:很多软件实际上安装在 /usr/lib 中!仅举几例:MySQL、MySQLWorkbench、Nautilus、Rythmbox...

根据 FHS,/usr/lib 应该包含“用于编程和包的库”和“包括不打算由用户或 shell 脚本直接执行的目标文件、库和内部二进制文件”(请参阅此处)。

许多位于我的 debian 服务器的 /usr/lib 中的软件不是库或内部二进制文件,而是成熟的用户可执行软件!

我仍在按计划将我的应用程序安装在 /opt 中。但我真的很想了解这是否正确,最重要的是,为什么.

预先感谢您的善意建议,

埃里克。

Mic*_*ton 12

不同之处在于/usr它用于保存作为系统一部分安装的软件包。您从 Debian/Ubuntu 存储库、PPA 等获得的软件包,请转到此处。While/opt用于未通过分发包分发过程分发的非捆绑第三方应用程序。

如果您分发 .deb 或 .rpm 软件包,着眼于最终将您的软件包含在官方存储库中,您应该安装到/usr. 否则安装到/opt. 在任何一种情况下,您的应用程序都应该能够被编译为在任意位置运行(例如在 GNU 自动工具的帮助下)。


Dan*_*ite 6

理解文件系统层次标准的真正关键是知道它在设计时考虑了网络文件系统。

对于相同操作系统、版本和架构的每台机器,您都可以通过 NFS 共享 /usr 并挂载它。
/usr 在网络堆栈初始化后(重新)挂载。

/var <-- local, r/w optimized
/usr <-- can be mounted over network, possibly even read-only!
/opt <-- local, read mostly
/etc <-- local, read mostly
/srv <-- local, r/w optimized

/home <-- either/or
Run Code Online (Sandbox Code Playgroud)