我在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
您能否尝试在校验和和路径之间添加 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
该错误是因为sha1sum
当使用 -c
调用时,它期望自己的输出作为输入,并且其输出使用 2 个空格。
我在Alpine Linux v3.13上安装kubectl时遇到了这个问题:
echo "$(<kubectl.sha256) kubectl" | sha256sum -c
sha256sum: WARNING: 1 of 1 computed checksums did NOT match
我的两部分修复:
- 默认外壳 (ASH) 使用空的新行响应
echo "$(<file.txt)"
,而 Bash 使用文件内容(预期行为)进行响应。 - Alpine的sha256sum版本在哈希和文件名之间需要两个空格(Ubuntu接受一个空格)。
bash
echo "$(<kubectl.sha256) kubectl" | sha256sum -c
kubectl: OK