Debian GNU/Linux 包管理锦囊妙计

作为一个资深的 Debian GNU/Linux(后文简称“Debian”)粉,笔者可是私藏了不少既实用又鲜为人知的锦囊妙计哦。独乐乐不如众乐乐,现从中撷取几条分享给大家,希望对各位有所帮助。

当包管理工具被玩坏……

设想有一天你不小心误删了 dpkg,因为它是 Debian 中最底层的包管理工具,所以然后你将杯具地发现从此再也不能成功安装 Debian 包。别慌,如果你了解一点儿有关 .deb 二进制包的知识,那么可以使用如下方法解决:

从 Debian 官方网站下载 dpkg 的 .deb 包,形如 dpkg_1.17.26_amd64.deb。其中,amd64 说明该包支持 64 位架构。若你的 Debian 系统为其它架构,请自行选择合适的包文件。

先用 ar 工具对 .deb 解包:

ar x dpkg_1.17.26_amd64.deb

可能大家对于 tar 比较熟悉,这个 ar 又是什么东东?ar 是一个比 tar 还要古老的归档工具,这里的 x 指令是提取的意思,跟 tar 类似。

再用 tar 将所需文件展开到 /(根目录):

tar -C / -p -xzf data.tar.gz

至此,笔者已经将 dpkg 安装到 Debian 系统。莫名消失的 dpkg 重新回到身边,你是否觉得应倍加珍惜呢?也许你会多留一个心眼,为什么这样做有效?让我们回到基础来谈一谈吧。

当我们用 ar 解包 .deb 后,一般将会得到下列三个文件:

-rw-r--r-- 1 root root 9543 Aug 16 08:26 control.tar.gz -rw-r--r-- 1 root root 2980910 Aug 16 08:26 data.tar.gz -rw-r--r-- 1 root root 4 Aug 16 08:26 debian-binary

debian-binary:用来指明 .deb 文件所用版本的文本文件,本例为 2.0。

control.tar.gz:该存档文件包含与包相关的各种元信息,像是包名称及版本。其它一些信息则是包管理工具所需要的,据此能够决定是否可安装或卸载。如果你对此充满好奇,那么不妨用 tar 将其解包细看。

-rw-r--r-- 1 root root 87 Nov 26 2015 conffiles -rw-r--r-- 1 root root 2621 Nov 26 2015 control -rw-r--r-- 1 root root 10133 Nov 26 2015 md5sums -rwxr-xr-x 1 root root 1965 Nov 26 2015 postinst -rwxr-xr-x 1 root root 1500 Nov 26 2015 postrm -rwxr-xr-x 1 root root 2126 Nov 26 2015 preinst -rwxr-xr-x 1 root root 4838 Nov 26 2015 prerm

data.tar.gz:这个存档文件包含要从包中提取的所有文件,比如可执行文件、文档等等。值得一提的是,除了末尾的 .gz 之外,Debian 有时也会使用其它压缩格式:data.tar.bz2 是 bzip2、data.tar.xz 为 XZ。

./var ./var/lib ./var/lib/dpkg ./var/lib/dpkg/updates ./var/lib/dpkg/alternatives ./var/lib/dpkg/info ./var/lib/dpkg/parts ./usr ./usr/share ./usr/share/locale ./usr/share/dpkg ./usr/share/dpkg/cputable ./usr/share/dpkg/ostable ./usr/share/dpkg/triplettable ./usr/share/dpkg/abitable ./usr/share/doc ./usr/share/doc/dpkg ./usr/share/doc/dpkg/changelog.gz ./usr/share/doc/dpkg/AUTHORS ./usr/share/doc/dpkg/changelog.Debian.gz ./usr/share/doc/dpkg/THANKS.gz ./usr/share/doc/dpkg/usertags.gz ./usr/share/doc/dpkg/README.feature-removal-schedule.gz ./usr/share/doc/dpkg/copyright ./usr/share/lintian ./usr/share/lintian/overrides ./usr/share/lintian/overrides/dpkg ./usr/share/man ./usr/bin ./usr/bin/dpkg-trigger ./usr/bin/dpkg-deb ./usr/bin/dpkg ./usr/bin/dpkg-query ./usr/bin/dpkg-split ./usr/bin/dpkg-maintscript-helper ./usr/bin/dpkg-divert ./usr/bin/update-alternatives ./usr/bin/dpkg-statoverride ./usr/sbin ./usr/sbin/dpkg-statoverride ./usr/sbin/update-alternatives ./usr/sbin/dpkg-divert ./sbin ./sbin/start-stop-daemon ./etc ./etc/dpkg ./etc/dpkg/dpkg.cfg.d ./etc/dpkg/dpkg.cfg ./etc/alternatives ./etc/alternatives/README ./etc/cron.daily ./etc/cron.daily/dpkg ./etc/logrotate.d ./etc/logrotate.d/dpkg

同时安装和移除包

这是笔者最为喜欢的一条妙计。对于 apt/apt-get/aptitude install 或 apt/apt-get/aptitude remove 来安装/移除包,想必大家都比较熟悉,可是你知道它们还能同时安装并移除包么?

因为笔者同时也是一位不折不扣的 Vim 粉,所以会执行如下命令来安装 Vim,但这条指令的作用绝不仅仅于此:

apt install vim emacs-

该指令在将 Vim 安装到 Debian 中的同时也会移除 Emacs。emacs 后面的 - 起移除作用。

与此等效的命令是:

apt remove emacs vim+

vim 之后的 + 为安装之意。

阻止升级某些包

在执行系统更新时,有时候笔者想阻止某些个别的包升级, Debian 下可以使用 apt-mark 命令。

阻止包

apt-mark hold <pkg>

比如,阻止升级 Perl,执行 apt-mark hold perl 即可。

取消阻止

如果不想阻止了,那么可以通过 apt-mark unhold 取消:

apt-mark unhold <pkg>

显示已阻止的包

要查看已经被阻止的包,则可以执行:

apt-mark showhold

缓存代理包

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/15020.html