我可以将特定包的安装目录转移到另一台计算机以避免安装步骤吗?

我可以将特定包的安装目录转移到另一台计算机以避免安装步骤吗?

我在我的 Linux 机器上安装了一个包,我想在另一台 Linux 机器上安装同一个包。我可以直接将安装目录从一台计算机复制到另一台计算机吗?我的意思是克隆安装目录。

答案1

考虑使用 APT/DPKG 安装的软件

在大多数 Linux 系统(包括 Ubuntu)上,软件包没有单独的安装目录,尽管有时第三方软件可能将其所有文件放在一个目录中。

相反,软件包包含一组文件,这些文件位于多个文件系统位置。运行whereis软件包会显示包含其主要部分的目录:

$ whereis gimp
gimp: /usr/bin/gimp /usr/lib/gimp /etc/gimp /usr/share/gimp /usr/share/man/man1/gimp.1.gz

我们可以看到 gimp 至少在、和中有文件/usr/bin/usr/lib其中/etc/usr/share包含许多属于其他包的文件。

您可以使用dpkg-query -L--listfiles选项来读取 dpkg 已知的包的文件列表:

$ dpkg --listfiles g++
/.
/usr
/usr/bin
/usr/share
/usr/share/doc
/usr/share/man
/usr/share/man/man1
/usr/bin/g++
/usr/bin/x86_64-linux-gnu-g++
/usr/share/doc/g++
/usr/share/man/man1/g++.1.gz
/usr/share/man/man1/x86_64-linux-gnu-g++.1.gz

请注意,列表包括所有父目录,即使 g++ 包显然没有提供它们(要仅获取文件,您可以执行类似的操作for i in $(dpkg --listfiles g++); do [[ -f "$i" ]] && echo "$i"; done,但某些包安装确实会创建目录)。

g++是一个非常小的文件列表......

$ dpkg --listfiles gimp | wc -l
254
$ dpkg --listfiles xkb-data | wc -l
331
$ dpkg --listfiles linux-image-4.10.0-24-generic | wc -l
1312

还请考虑,如果您只是将所有相关文件复制到另一个系统上的所有相关位置,包管理器对此一无所知,因此包将不会更新并且不会安装其依赖项,因此由于难以调试的原因,它可能根本无法工作。

归根结底,对于可以使用 APT 安装的软件,迄今为止最简单的安装方式是使用 APT。如果您想节省每个系统上的下载费用,请参阅如何在没有互联网(离线)的情况下安装软件或软件包?

有些人认为这种分布式安装方式是……一个缺陷。他们中的许多人正在采取措施解决这个问题,例如创建独立安装软件包的发行版,或者发明跨平台打包解决方案(如 snap),允许独立安装所有依赖项。

相关内容