MST

星途 面试题库

面试题:Bash下md5sum与sha256sum在分布式文件校验场景的设计

在一个分布式系统中,有多个节点存储着相同的文本文件集合。假设每个节点都可以运行Bash脚本,设计一个基于md5sum和sha256sum的方案,使得能够高效地检测出各个节点上文件的一致性,并给出实现该方案的Bash脚本框架以及关键步骤说明。
29.6万 热度难度
编程语言Bash

知识考点

AI 面试

面试题答案

一键面试

方案设计

  1. 计算哈希值:在每个节点上,对文本文件集合中的每个文件分别计算其MD5和SHA256哈希值。
  2. 汇总哈希值:将计算得到的哈希值汇总成一个文件,例如hash_summary.txt,文件格式可以是每行一个文件路径及其对应的MD5和SHA256哈希值,格式如:文件路径 MD5哈希值 SHA256哈希值
  3. 比较哈希值:将各个节点的hash_summary.txt文件收集到一个中央节点(或使用分布式比较算法),逐行比较这些文件中的内容,若完全一致则说明文件是一致的,否则不一致。

Bash脚本框架

#!/bin/bash

# 定义存储哈希值汇总文件的路径
HASH_SUMMARY_FILE="hash_summary.txt"

# 清空哈希值汇总文件(如果存在)
> $HASH_SUMMARY_FILE

# 遍历当前目录及其子目录下的所有文本文件
find . -type f -name "*.txt" | while read -r file; do
    # 计算MD5哈希值
    md5_hash=$(md5sum "$file" | awk '{print $1}')
    # 计算SHA256哈希值
    sha256_hash=$(sha256sum "$file" | awk '{print $1}')
    # 将文件路径、MD5哈希值和SHA256哈希值写入汇总文件
    echo "$file $md5_hash $sha256_hash" >> $HASH_SUMMARY_FILE
done

关键步骤说明

  1. 初始化:定义并清空用于存储哈希值汇总的文件hash_summary.txt
  2. 文件查找:使用find命令查找当前目录及其子目录下所有的文本文件(假设文本文件后缀为.txt,可根据实际情况调整)。
  3. 哈希值计算:对于每个找到的文件,分别使用md5sumsha256sum命令计算其MD5和SHA256哈希值,并通过awk命令提取哈希值部分。
  4. 汇总记录:将文件路径、MD5哈希值和SHA256哈希值按指定格式写入hash_summary.txt文件。后续在中央节点比较各个节点生成的hash_summary.txt文件内容即可判断文件一致性。