软件包管理器如何知道在哪里安装文件



问题基本上就是标题。也就是说,在Linux中,软件包管理器说apt如何知道或决定在哪里安装文件?

出现这个问题的原因是,例如,您可以从Makefile中进行构建,然后从执行构建的目录中运行可执行文件——也就是说,没有进行安装的规则。或者可能有一个安装规则,但它是如何确定文件应该安装在哪里的?同样,apt会安装软件包,但文件安装的规则是什么?

例如,您可以从Makefile进行构建,然后从执行构建的目录运行可执行文件

这对于一些程序是正确的,通常是那些没有任何依赖关系的程序。如果一个程序有它需要的其他文件,它需要知道在哪里可以找到它们。这样的路径是";烘烤成";编译中的可执行文件,并且在不重新编译程序的情况下无法更改。

通常,这些文件的位置将在某个前缀下(例如$PREFIX/bin$PREFIX/share/...$PREFIX/lib/...),并且程序将被配置为通过创建Makefileconfigure脚本使用前缀。默认前缀通常是根目录或/usr,这就是为什么大多数可执行文件都在/bin/usr/bin中。您可以使用./configure --prefix=$NEW_PREFIX设置不同的前缀。

如果我不是root用户,我会将大多数程序安装在$HOME/.local中,所以我会在/home/amadan/.local/bin/...中获得可执行文件。随后的make编译当前目录中的程序,然后make install将所有内容放入配置的位置。

例如,ffmpeg有一堆依赖关系;例如其中之一是lib/libavcodec.a。如果我以用户身份编译它(使用./configure --prefix="$HOME/.local"),那么在make install完成它的工作(显然还有/home/amadan/.local/bin/ffmpeg)之后,我最终会得到/home/amadan/.local/lib/libavcodec.a。如果我尝试在其构建位置运行ffmpeg,而没有make install,它将无法工作,因为它会在错误的位置查找支持文件。

也就是说,在Linux中,包管理器如何说apt知道或决定在哪里安装文件?

包管理器本身没有。放置文件的位置是在包中定义的。确切的机制取决于包管理器。例如,apt主要使用.deb文件,其中包含(除其他文件外)数据存档。数据档案(TAR格式,可能是压缩的)将包含具有完整路径的文件,因此,如果您在根目录中提取档案,这些文件将被放置在它们所属的位置。

例如,wget_1.21-1+deb11u1_arm64.deb包含data.tar.xz,其中包含:

./
./etc/
./etc/wgetrc
./usr/
./usr/bin/
./usr/bin/wget
...etc

apt会将其提取到根文件夹中,最终得到/usr/bin/wget

相关内容

  • 没有找到相关文章

最新更新