如何获取Ubuntu软件包中单个文件的官方校验码以与IMA测量值比对
如何获取Ubuntu软件包中单个文件的官方校验码以与IMA测量值比对
我完全懂你的需求——想要高效比对Linux内核IMA架构生成的文件校验码和Ubuntu官方软件包中单个文件的校验码,不想每次都手动下载解压deb包,对吧?下面分享几个实用的方法:
方法一:使用debsums工具(最便捷的方式)
debsums是专门用来验证已安装软件包文件完整性的工具,它会自动从官方仓库拉取对应包的文件校验码并完成比对,完美适配你的高效需求。
- 先安装工具:
sudo apt update && sudo apt install debsums
- 查看指定包下所有文件的官方校验码及比对结果:
比如你提到的g++-12包:
debsums g++-12
输出会类似这样(左边是官方校验码,右边是文件路径,OK表示本地文件和官方校验码匹配):
db905ca30da311c0bcd005b3d475d22e6fa395c3205ff5f17cdd9a02d830e1fb /usr/bin/x86_64-linux-gnu-g++-12 OK /usr/bin/x86_64-linux-gnu-g++-12
- 如果只想获取官方校验码而不做本地比对,可以用:
debsums -a g++-12 | grep -v "OK"
方法二:不安装额外工具,直接从远程仓库提取校验码
如果不想安装debsums,可以通过命令行直接从Ubuntu远程仓库获取deb包内的校验和文件(多数包默认提供MD5校验码,部分新包会包含SHA256校验码):
# 替换成你要查询的包名,比如g++-12 PACKAGE_NAME="g++-12" apt download --print-uris "$PACKAGE_NAME" | awk '{print $2}' | xargs curl -s | dpkg-deb -f - md5sums
这个命令的逻辑是:先拿到目标包的下载链接,用curl把包内容下载到标准输出,最后用dpkg-deb提取包内的md5sums文件,里面就有该包所有文件的官方MD5校验码。如果需要SHA256校验码,把命令里的md5sums替换成sha256sums即可尝试。
补充说明
- 若目标包还没安装,方法二依然有效;
debsums默认处理已安装包,也可以通过额外参数让它处理未安装包(需要下载对应校验和数据)。
备注:内容来源于stack exchange,提问作者Haris




