在Alpine中检查文件校验和

11

我在使用Alpine时遇到了一个奇怪的问题。我想在bash控制台中检查文件的校验和。这在CentOS下可行,但在Alpine下不行。出错在哪里?

在CentOS下:

$ sha1sum /bin/tini
fa23d1e20732501c3bb8eeeca423c89ac80ed452  /bin/tini
$ echo "fa23d1e20732501c3bb8eeeca423c89ac80ed452 /bin/tini" | sha1sum -c -
/bin/tini: OK

阿尔卑斯山下

$ sha1sum /bin/tini
fa23d1e20732501c3bb8eeeca423c89ac80ed452  /bin/tini
$ echo "fa23d1e20732501c3bb8eeeca423c89ac80ed452 /bin/tini" | sha1sum -c -
sha1sum: WARNING: 1 of 1 computed checksums did NOT match

仅供测试,使用echo 'fa23d1e20732501c3bb8eeeca423c89ac80ed452 /bin/tini' | sha1sum -c -(单引号)是否更好? - VonC
同样的结果。感谢您的帮助,我的帖子是关于以下Docker容器的,我使用以下Docker命令:'docker run -it --rm blacklabelops/jenkins:alpine bash' - blacklabelops
一个 shell 命令会更好吗?docker run -it --rm blacklabelops/jenkins:alpine sh -c 'echo "fa23d1e20732501c3bb8eeeca423c89ac80ed452 /bin/tini" | sha1sum -c -' - VonC
相同的结果:sha1sum: 警告:计算出的 1 个校验和与实际不符。 - blacklabelops
2个回答

24

请尝试在校验和和路径之间添加1个空格(总共2个空格):

$ echo "fa23d1e20732501c3bb8eeeca423c89ac80ed452  /bin/tini" | sha1sum -c -

我尝试使用/bin/busybox

# sha1sum /bin/busybox
71bdaf6e52759f7f277c89b694c494f472ca2dfb  /bin/busybox
# echo '71bdaf6e52759f7f277c89b694c494f472ca2dfb /bin/busybox' | sha1sum -c -
sha1sum: WARNING: 1 of 1 computed checksums did NOT match
# echo '71bdaf6e52759f7f277c89b694c494f472ca2dfb  /bin/busybox' | sha1sum -c -
/bin/busybox: OK

这个错误是由于在使用-c参数调用sha1sum命令时需要将输出结果作为输入,而其输出结果中包含2个空格。


这个“规则”同样适用于sha512sum。在我找到的所有示例中,都没有明确说明这个小但“关键”的事实。在我看来,这些命令的语法很糟糕。-c应该接受一个参数,即要检查的校验和。例如:sha1sum -c knownchecksum filetocheck - DKebler

0
我在安装 kubectl 到 Alpine Linux v3.13 时遇到了这个问题:
echo "$(<kubectl.sha256) kubectl" | sha256sum -c
sha256sum: WARNING: 1 of 1 computed checksums did NOT match

我的两部分修复:

  1. 默认 shell (ash) 对 echo "$(<file.txt)" 响应为空新行,而 bash 响应文件内容(预期行为)。
  2. Alpine 版本的 sha256sum 希望哈希值和文件名之间有两个空格(Ubuntu 接受一个空格)。
bash
echo "$(<kubectl.sha256)  kubectl" | sha256sum -c
kubectl: OK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接