从命令行计算文件校验和

Compute checksum on file from command line

寻找在 Linux 发行版上随时可用的命令或一组命令,这些命令可以让我创建一个脚本来为文件生成校验和。

这个校验和是由我无法控制的构建系统生成的,方法是对文件中的每个字节求和,然后将该数字截断为 4 个字节。

我知道如何使用 node.js、perl、python、C/C++ 等工具来执行此操作,但我需要能够在我无法修改的基本 Linux 远程分发 运行(它在 PLC 上)。

有什么想法吗?我已经搜索了一段时间,但还没有找到任何看起来简单的东西。

你试过cksum吗?我在几个脚本中使用它。使用起来非常简单。

http://linux.die.net/man/1/cksum

如果您只想逐字节求和并将该数字截断为 4 个字节,则可以使用以下命令。

xxd -p -c 1 <Input file> | awk '{s+=; if(s > 4294967295) s = and(4294967295, s) } END {print s}'

xxd命令用于提取输入文件的hexdump,并添加每个字节以计算总和。如果总和超过 2^32-1 = 4294967295 值,则执行按位与操作以截断位。

使用许多原始 shell 命令逐字节求和并将该数字截断为 4 字节的解决方案。

#! /usr/bin/env bash

declare -a bytes
bytes=(`xxd -p -c 1 INPUT_FILE | tr '\n' ' '`)

total=0;
for(( i=0; i<${#bytes[@]}; i++));
do
    total=$(($total + 0x${bytes[i]}))
    if [ $total > 4294967295 ]; then
            total=$(($total & 4294967295))
    fi
done

echo "Checksum: " $total