Abd*_*red 4 linux software-installation
我没有编程经验,但我了解 shell 脚本在理论上是如何工作的。使脚本可执行只有两个重要步骤,
#!/path/to/interpreter
,来告诉 shell 如何解释脚本的内容chmod
+x filename
。到目前为止,我可以理解它,但是包含许多文件并压缩在一个.tar.gz
包中的“真实”程序与这种安装有何不同,Linux 需要在幕后执行哪些重要步骤才能使程序可执行?或者简而言之:在 Linux 中安装的真正意义是什么?
Unix 程序的安装大致由两部分组成。
1)将文件放在合适的位置
2)适当设置文件权限和所有权
关于第一个,Linux File Hierarchy Standard
是相关的。这是 Linux 特有的,但很大程度上遵循了历史上编纂的 Unix 规则。具体来说,打算由用户运行的二进制文件放在 中/usr/bin
,用于管理等的系统级二进制文件放在 中/bin
,本地安装的二进制文件通常放在 中/usr/local/bin
,等等。这些是系统查看运行时的位置,基于PATH,变量,在 Debian 上是/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
. 类似地,库按照类似的规则放置在特定位置/usr/lib
、/lib
、/usr/local/bin
等。同样,默认情况下,系统设计为在运行时查看这些目录。
还有其他用于放置文档(包括手册页)和数据文件的指定位置,但这些位置对于系统功能来说并不是那么重要。
关于第二点,系统不同部分的文件有不同的所有权和权限。虽然大多数文件归 root 所有,但关联的组各不相同。
安装的实际机制各不相同,但通常由构建系统的安装目标处理。免费的类 Unix 系统(如基于 Linux 的系统)最常见的构建系统是 Autotools 和 Cmake。
通常还有一个额外的层。通常 Linux 系统有一个二进制包管理器。这些包通常是通过调用安装目标来构建的,但不是将文件安装到系统中,而是作为构建二进制包过程的一部分将它们安装到临时目录中。对于 Debian,这通常debian/tmp
是源目录的子目录。
与本地安装相比,将二进制包安装到系统中具有许多优点,特别是跟踪哪些文件属于哪个包/软件,以及以干净可靠的方式处理包/软件的删除。虽然构建系统可能有卸载目标,但这并不是处理卸载的可靠方法。