网站搜索

如何在 Debian/Ubuntu Linux 中检查已安装软件包的 MD5 和


您是否想知道为什么系统上安装的给定二进制文件或软件包不能按照您的预期工作,这意味着它不能正常工作,也许它根本无法启动。

下载软件包时,您可能会面临网络连接不稳定或意外断电的挑战,这可能会导致安装损坏的软件包。

考虑到这是在系统上维护未损坏的包的一个重要因素,因此使用以下文章根据包中存储的信息验证文件系统上的文件是至关重要的一步。

建议阅读:了解如何在 Linux 中使用 MD5 校验和生成和验证文件

如何根据 MD5 校验和验证已安装的 Debian 软件包

Debian/Ubuntu系统上,您可以使用debsums工具来检查已安装软件包的MD5总和。如果您想在安装之前了解有关 debsums 软件包的信息,您可以使用 APT-CACHE,如下所示:

apt-cache search debsums

接下来,使用 apt 命令安装它,如下所示:

sudo apt install debsums

现在是时候学习如何使用 debsums 工具来验证已安装软件包的 MD5sum 了。

注意:我在以下所有命令中使用了sudo,因为某些文件可能没有普通用户的读取权限。

此外,debsums 命令的输出在左侧显示文件位置,在右侧显示检查结果。您可以获得三种可能的结果,它们包括:

  1. OK – 表示文件的 MD5 和正确。
  2. FAILED – 显示文件的 MD5 和不匹配。
  3. 已替换 – 表示特定文件已被另一个包中的文件替换。

当您在没有任何选项的情况下运行它时,debsums 会根据库存 md5sum 文件检查系统上的每个文件。

sudo debsums
/usr/bin/a11y-profile-manager-indicator                                       OK
/usr/share/doc/a11y-profile-manager-indicator/copyright                       OK
/usr/share/man/man1/a11y-profile-manager-indicator.1.gz                       OK
/usr/share/accounts/providers/facebook.provider                               OK
/usr/share/accounts/qml-plugins/facebook/Main.qml                             OK
/usr/share/accounts/services/facebook-microblog.service                       OK
/usr/share/accounts/services/facebook-sharing.service                         OK
/usr/share/doc/account-plugin-facebook/copyright                              OK
/usr/share/accounts/providers/flickr.provider                                 OK
/usr/share/accounts/qml-plugins/flickr/Main.qml                               OK
/usr/share/accounts/services/flickr-microblog.service                         OK
/usr/share/accounts/services/flickr-sharing.service                           OK
/usr/share/doc/account-plugin-flickr/copyright                                OK
/usr/share/accounts/providers/google.provider                                 OK
/usr/share/accounts/qml-plugins/google/Main.qml                               OK
/usr/share/accounts/services/google-drive.service                             OK
/usr/share/accounts/services/google-im.service                                OK
/usr/share/accounts/services/picasa.service                                   OK
/usr/share/doc/account-plugin-google/copyright                                OK
/lib/systemd/system/accounts-daemon.service                                   OK
/usr/lib/accountsservice/accounts-daemon                                      OK
/usr/share/dbus-1/interfaces/org.freedesktop.Accounts.User.xml                OK
/usr/share/dbus-1/interfaces/org.freedesktop.Accounts.xml                     OK
/usr/share/dbus-1/system-services/org.freedesktop.Accounts.service            OK
/usr/share/doc/accountsservice/README                                         OK
/usr/share/doc/accountsservice/TODO                                           OK
....

要启用检查每个包的每个文件和配置文件是否有任何更改,请包含 -a--all 选项:

sudo debsums --all
/usr/bin/a11y-profile-manager-indicator                                       OK
/usr/share/doc/a11y-profile-manager-indicator/copyright                       OK
/usr/share/man/man1/a11y-profile-manager-indicator.1.gz                       OK
/etc/xdg/autostart/a11y-profile-manager-indicator-autostart.desktop           OK
/usr/share/accounts/providers/facebook.provider                               OK
/usr/share/accounts/qml-plugins/facebook/Main.qml                             OK
/usr/share/accounts/services/facebook-microblog.service                       OK
/usr/share/accounts/services/facebook-sharing.service                         OK
/usr/share/doc/account-plugin-facebook/copyright                              OK
/etc/signon-ui/webkit-options.d/www.facebook.com.conf                         OK
/usr/share/accounts/providers/flickr.provider                                 OK
/usr/share/accounts/qml-plugins/flickr/Main.qml                               OK
/usr/share/accounts/services/flickr-microblog.service                         OK
/usr/share/accounts/services/flickr-sharing.service                           OK
/usr/share/doc/account-plugin-flickr/copyright                                OK
/etc/signon-ui/webkit-options.d/login.yahoo.com.conf                          OK
/usr/share/accounts/providers/google.provider                                 OK
/usr/share/accounts/qml-plugins/google/Main.qml                               OK
/usr/share/accounts/services/google-drive.service                             OK
/usr/share/accounts/services/google-im.service                                OK
/usr/share/accounts/services/picasa.service                                   OK
/usr/share/doc/account-plugin-google/copyright                                OK
...

也可以使用 -e--config 选项仅检查配置文件,排除所有其他包文件:

sudo debsums --config
/etc/xdg/autostart/a11y-profile-manager-indicator-autostart.desktop           OK
/etc/signon-ui/webkit-options.d/www.facebook.com.conf                         OK
/etc/signon-ui/webkit-options.d/login.yahoo.com.conf                          OK
/etc/signon-ui/webkit-options.d/accounts.google.com.conf                      OK
/etc/dbus-1/system.d/org.freedesktop.Accounts.conf                            OK
/etc/acpi/asus-keyboard-backlight.sh                                          OK
/etc/acpi/events/asus-keyboard-backlight-down                                 OK
/etc/acpi/ibm-wireless.sh                                                     OK
/etc/acpi/events/tosh-wireless                                                OK
/etc/acpi/asus-wireless.sh                                                    OK
/etc/acpi/events/lenovo-undock                                                OK
/etc/default/acpi-support                                                     OK
/etc/acpi/events/ibm-wireless                                                 OK
/etc/acpi/events/asus-wireless-on                                             OK
/etc/acpi/events/asus-wireless-off                                            OK
/etc/acpi/tosh-wireless.sh                                                    OK
/etc/acpi/events/asus-keyboard-backlight-up                                   OK
/etc/acpi/events/thinkpad-cmos                                                OK
/etc/acpi/undock.sh                                                           OK
/etc/acpi/events/powerbtn                                                     OK
/etc/acpi/powerbtn.sh                                                         OK
/etc/init.d/acpid                                                             OK
/etc/init/acpid.conf                                                          OK
/etc/default/acpid                                                            OK
...

接下来,要仅在 debsums 的输出中显示更改的文件,请使用 -c--changed 选项。我在系统中没有发现任何已更改的文件。

sudo debsums --changed

下一个命令打印出没有 md5sum 信息的文件,这里我们使用 -l--list-missing 选项。在我的系统上,该命令不显示任何文件。

sudo debsums --list-missing

现在是时候通过指定名称来验证单个包的 md5 sum 了:

sudo debsums apache2 
/lib/systemd/system/apache2.service.d/apache2-systemd.conf                    OK
/usr/sbin/a2enmod                                                             OK
/usr/sbin/a2query                                                             OK
/usr/sbin/apache2ctl                                                          OK
/usr/share/apache2/apache2-maintscript-helper                                 OK
/usr/share/apache2/ask-for-passphrase                                         OK
/usr/share/bash-completion/completions/a2enmod                                OK
/usr/share/doc/apache2/NEWS.Debian.gz                                         OK
/usr/share/doc/apache2/PACKAGING.gz                                           OK
/usr/share/doc/apache2/README.Debian.gz                                       OK
/usr/share/doc/apache2/README.backtrace                                       OK
/usr/share/doc/apache2/README.multiple-instances                              OK
/usr/share/doc/apache2/copyright                                              OK
/usr/share/doc/apache2/examples/apache2.monit                                 OK
/usr/share/doc/apache2/examples/secondary-init-script                         OK
/usr/share/doc/apache2/examples/setup-instance                                OK
/usr/share/lintian/overrides/apache2                                          OK
/usr/share/man/man1/a2query.1.gz                                              OK
/usr/share/man/man8/a2enconf.8.gz                                             OK
/usr/share/man/man8/a2enmod.8.gz                                              OK
/usr/share/man/man8/a2ensite.8.gz                                             OK
/usr/share/man/man8/apache2ctl.8.gz                                           OK

假设您以没有 sudo 的普通用户身份运行 debsums,则可以通过使用 --ignore-permissions 选项将权限错误视为警告:

debsums --ignore-permissions 

如何从 .Deb 文件生成 MD5 和

-g 选项告诉 debsums 从 deb 内容生成 MD5 和,其中:

  1. missing – 指示 debsums 从 deb 中为不提供 MD5 和的软件包生成 MD5 和。
  2. all – 指示 debsums 忽略磁盘上的总和并使用 deb 文件中存在的总和,或者如果不存在则从该文件生成。
  3. keep – 告诉 debsums 将提取/生成的总和写入 /var/lib/dpkg/info/package.md5sums 文件。
  4. nocheck – 表示不对照已安装的软件包检查提取/生成的总和。

当您查看目录 /var/lib/dpkg/info/ 的内容时,您将看到打包的各种文件的 md5sum,如下图所示:

cd /var/lib/dpkg/info
$ ls *.md5sums
a11y-profile-manager-indicator.md5sums
account-plugin-facebook.md5sums
account-plugin-flickr.md5sums
account-plugin-google.md5sums
accountsservice.md5sums
acl.md5sums
acpid.md5sums
acpi-support.md5sums
activity-log-manager.md5sums
adduser.md5sums
adium-theme-ubuntu.md5sums
adwaita-icon-theme.md5sums
aisleriot.md5sums
alsa-base.md5sums
alsa-utils.md5sums
anacron.md5sums
apache2-bin.md5sums
apache2-data.md5sums
apache2.md5sums
apache2-utils.md5sums
apg.md5sums
apparmor.md5sums
app-install-data.md5sums
app-install-data-partner.md5sums
...

请记住,使用 -g 选项与 --generate=missing 相同,您可以尝试通过运行为 apache2 包生成 md5 和以下命令。

sudo debsums --generate=missing apache2 

由于我系统上的 apache2 软件包已经有 md5 和,因此它将显示以下输出,与运行相同:

sudo debsums apache2

有关更多有趣的选项和使用信息,请查看 debsums 手册页。

man debsums

在本文中,我们分享了如何根据 MD5 校验和验证已安装的 Debian/Ubuntu 软件包,这对于避免在您的计算机上安装和执行损坏的二进制文件或软件包文件非常有用。系统通过根据包中存储的信息检查文件系统上的文件。

如有任何问题或反馈,请使用下面的评论表。可以想象,您也可以提供一两个建议来使这篇文章变得更好。