如何对 /bin 和子目录中的所有文件进行 md5sum 并使用 bash 脚本验证哈希值?

如何对 /bin 和子目录中的所有文件进行 md5sum 并使用 bash 脚本验证哈希值?

我尝试过

find /bin -type -f -exec md5sum {} + >>sum.md5 

/bin目录包含多种文件类型,但上面仅返回常规文件的校验和。有什么办法可以找到吗全部文件in 和 under /bin,运行md5sum 它们并验证校验和?

这是我想要实现的目标的细节。我们备份/bin及其子目录,并将所有文件 md5sum 放入一个old.md5文件中,将其压缩并上传到云端。例如,我的系统崩溃了,然后我/bin从云端下载了目录并恢复,然后再次运行 md5sum 命令来生成new.md5包含所有文件的哈希值的文件。现在我想比较new.md5文件和old.md5文件,以确保在下载或上传过程中文件没有发生任何更改。该脚本应该验证哈希值。

我需要一个完整的脚本。

答案1

要使用 查找所有非目录文件find,请使用清除目录的测试:

find -H /bin ! -type d -exec md5sum {} + >sum.md5

这将md5sum在尽可能多的文件上批量运行,包括符号链接,同时避免提供实用程序目录(这将使其发出警告)。

-H选项find使其解析命令行上给出的任何符号链接,即/bin(如果这是符号链接)。

要验证计算出的校验和,请使用md5sum -c sum.md5

答案2

您的命令已经下降到子目录(除非/bin是链接,请参见下文),但它将跳过链接和其他非常规文件,因为您明确告知find仅返回常规文件。就是这个-type f意思。从man find

   -type c
          File is of type c:

          f      regular file

要找到所有内容,只需删除-type

find /bin/ -exec md5sum {} + >>sum.md5

请注意:/末尾的/bin/: ,以防您是符号链接(因为它通常是现代 Linux 系统上的/bin符号链接)。/usr/bin如果没有它,该命令将仅返回符号链接本身 ( /bin) 并且不会下降到子目录。

如果您稍后想要验证这些校验和,只需运行:

md5sum -c sum.md5 

相关内容