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

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

考虑使用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。 如果要在每个系统上保存下载,请参阅如何在没有Internet(离线)的情况下安装软件或软件包? 。

有些人认为这种分布式安装方式是……一个bug。 他们中的许多人正在为此做点什么,例如创建可以离散地安装软件包的发行版,或发明跨平台打包解决方案,如允许离散安装(包括所有依赖项)的快照。