如何在 Linux 中使用 Cksum 命令计算 CRC 校验和
校验和用于验证数据的完整性。假设某些文件正在通过网络或系统复制,并且由于网络连接丢失或机器突然重启等事件,数据没有被完全复制。
现在,您将如何验证数据的完整性?那么,它通过CRC校验和机制可以验证数据完整性。可以通过多种机制计算 CRC 校验和。在本文中,我们将重点介绍 Linux 'cksum' 命令,该命令用于计算文件的校验和或标准输入提供的数据。
什么是 CRC?
CRC 代表循环冗余校验。
校验和可以通过对正在传送的数据应用循环冗余校验 (CRC) 机制来计算。通过通信信道传输的每个数据块都附有 CRC 码或校验和,当数据块到达目的地时,再次应用该校验以生成校验和值。如果在目的地生成的校验和与数据块中的校验和值相同,则认为数据未损坏并且可以进一步使用,但如果两个校验和值不同,则在这种情况下,数据被认为已损坏或被感染。
CRC这个名字是因为:
- 这种机制基于循环码(因此是循环的)的基本原理。
- 附加数据作为校验和的代码是冗余的,即它不会为正在传输的数据增加任何价值(因此冗余)。
- 它是一张支票(因此check)
校验和命令
cksum 命令用于计算作为参数提供给它的每个文件的循环冗余校验 (CRC)。在需要验证数据完整性的情况下,CRC 变得很重要。使用 cksum 命令,可以比较目标文件和源文件的校验和来判断数据传输是否成功。
除了提供 CRC 值外,此命令还在输出中生成文件大小和文件名。如果成功,该命令以状态零退出,任何其他状态值表示失败。
可以通过在命令提示符下键入以下内容来获取有关此命令的详细信息:
$ info coreutils 'cksum invocation'
cksum 命令示例
1. 一个基本的例子
在非常基本的层面上, cksum 命令可用于显示文件的校验和。
$ cksum testfile.txt
3000792507 3 testfile.txt
上面输出中的第一个值(大数字)是文件的校验和,然后是文件的大小,最后是文件的名称。
2.校验和随着内容的变化而变化
测试文件“testfile.txt”有以下内容:
$ cat testfile.txt
Hi
要计算测试文件的校验和,请将其作为参数传递给 cksum 命令:
$ cksum testfile.txt
2559130041 14 testfile.txt
现在,修改文件的内容:
$ cat testfile.txt
Hi everybody
再次将测试文件作为参数传递给 cksum 命令:
$ cksum testfile.txt
2559130041 14 testfile.txt
所以我们看到随着内容的变化,校验和也发生了变化。
3.内容的变化并不总是意味着大小的增加或减少
好吧,上述内容从根本上也是正确的,甚至对于 chksum 也是如此。让我们看看它是什么意思:
检查测试文件 'testfile.txt' 的内容:
$ cat testfile.txt
Hi everybody
注意校验和:
$ cksum testfile.txt
2559130041 14 testfile.txt
现在,通过不实际添加或删除某些内容,而是将一个字符替换为另一个字符来更改内容,以使文件的大小保持不变。
$ cat testfile.txt
Hi everybudy.
如您所见,我将“o”替换为“u”。
现在比较校验和:
$ cksum testfile.txt
3252191934 14 testfile.txt
因此,我们看到校验和发生了变化,即使更改是一个字符被另一个字符替换。
4. 被打断的副本
假设您正在将包含各种子文件夹和文件的压缩文件夹从一个位置复制到另一个位置,并且由于任何原因,复制过程被中断,那么您将如何检查所有内容是否已成功复制?好吧, cksum 使之成为可能,因为现在我们知道在部分复制的情况下,目标的整体校验和将与源文件夹的校验和不同。
您可以通过以下方式模拟此场景:
我从同一个“Linux”文件夹中创建了 Linux.tar.gz 和 Linux_1.tar.gz。不同之处在于 Linux_1.tar.gz 是在“Linux”文件夹包含一个额外的文本文件时生成的。
所以上面的场景模拟了当 Linux_1.tar.gz 被复制但在目标 Linux.tar.gz 中只剩下一个文本文件要复制时被中断
现在,当我比较这两个文件的校验和时,我看到
$ cksum Linux.tar.gz
756656601 1037079 Linux.tar.gz
$ cksum Linux_1.tar.gz
2598429125 1037184 Linux_1.tar.gz
所以上面的输出显示了不同的校验和值,表明文件副本不正确。
5.标准输出的校验和
该命令提供了一个功能,用户可以只键入“cksum”或“cksum-”并在标准输入上写入,然后按 Ctrl+D 几次。这种方式 cksum 给出了输入时输入的数据的校验和。
$ cksum
Lets check the checksum1135634677 23
在上面的例子中,我们实际上计算了字符串“Lets check the checksum”的校验和。
- 点赞
- 收藏
- 关注作者
评论(0)