从命令行计算文件校验和
Compute checksum on file from command line
寻找在 Linux 发行版上随时可用的命令或一组命令,这些命令可以让我创建一个脚本来为文件生成校验和。
这个校验和是由我无法控制的构建系统生成的,方法是对文件中的每个字节求和,然后将该数字截断为 4 个字节。
我知道如何使用 node.js、perl、python、C/C++ 等工具来执行此操作,但我需要能够在我无法修改的基本 Linux 远程分发 运行(它在 PLC 上)。
有什么想法吗?我已经搜索了一段时间,但还没有找到任何看起来简单的东西。
你试过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
寻找在 Linux 发行版上随时可用的命令或一组命令,这些命令可以让我创建一个脚本来为文件生成校验和。
这个校验和是由我无法控制的构建系统生成的,方法是对文件中的每个字节求和,然后将该数字截断为 4 个字节。
我知道如何使用 node.js、perl、python、C/C++ 等工具来执行此操作,但我需要能够在我无法修改的基本 Linux 远程分发 运行(它在 PLC 上)。
有什么想法吗?我已经搜索了一段时间,但还没有找到任何看起来简单的东西。
你试过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