从命令行计算文件的校验和

时间:2015-06-09 17:01:31

标签: linux shell scripting checksum

查找Linux发行版中可用的命令或命令集,这些命令或命令集允许我创建脚本以生成文件的校验和。

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

我知道如何使用node.js,perl,python,C / C ++等工具来做这件事,但我需要能够在远程运行的远程运行的Linux发行版上执行此操作,我可以“修改(它在PLC上)。

有什么想法吗?我一直在寻找一段时间,并且找不到任何看起来很简单的东西。

3 个答案:

答案 0 :(得分:2)

逐字节求和的解决方案,并使用许多原始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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:-1)

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

Celery