我在我的 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),允许独立安装所有依赖项。