本页内容
- cmp 命令
- 1. 如何使用 cmp 比较两个文件
- 2. 如何让 cmp 打印差异字节
- 3. 如何让 cmp 跳过两个文件的部分初始字节
- 4. 如何让 cmp 显示所有差异字节的位置(及数值)
- 5. 如何限制要比较的字节数
- 6. 使用 cmp 命令时如何显示进度条
- 7. 如何让 cmp 抑制输出
- 结语
cmp 命令用于在 Linux 操作系统中逐字节比较两个文件。它会以简洁的形式输出两个文件之间的差异,使用户能够轻松识别出它们之间的不同之处。cmp 命令会显示在哪个偏移位置出现了多少个不匹配的字节,并给出差异字节的汇总计数。借助这个实用的工具,用户可以快速检查两个文件是否完全相同。
在本教程中,我们将通过通俗易懂的示例来讲解 cmp 命令。在此之前值得说明的是,本教程中提到的所有示例和指令均在 Ubuntu 22.04 上测试通过。
cmp 命令
cmp 命令可以让你对两个文件进行逐字节的比较。该工具通过命令行选项的形式提供了多种功能。在本教程中,我们将介绍一些关键的选项,让你(作为一名初学者)能够很好地理解这个工具的工作原理。
1. 如何使用 cmp 比较两个文件
在最简单的形式下,你可以按如下方式使用 cmp 命令:
cmp [file1-name] [file2-name]
如前所述,该工具会逐字节比较两个文件。一旦发现差异,工具就会停止,并输出信息说明差异出现在哪一行、哪一个字节。
例如:
cmp file1.txt file2.txt

正如你在上面的截图中所看到的,输出清楚地表明两个文件在第 1 行第 20 个字节处存在差异。
2. 如何让 cmp 打印差异字节
如果你愿意,还可以让 cmp 在输出中显示存在差异的字节。这可以使用 -b 命令行选项来实现。
cmp -b [file1] [file2]
例如:
cmp -b file1.txt file2.txt

在这种情况下,正如你在上方截图中所看到的,差异出现在第 17 个字节,在 file1.txt 中是字母 'l',而在 file2.txt 中是字母 'i'。数值 154 和 151 分别是这两个字节所对应的数值。
3. 如何让 cmp 跳过两个文件的部分初始字节
如果你愿意,还可以让 cmp 跳过两个文件开头特定数量的字节,然后再对它们进行比较。这可以通过将字节数作为参数传递给 -i 命令行选项来实现。
cmp -i [bytes-to-be-skipped] [file1] [file2]
例如:
cmp -i 10 file1.txt file2.txt
请注意,在类似这样的情形中(即你使用 -i 来跳过字节),比较开始处的字节会被视为第 0 个字节。
继续往下看,该工具还允许你跳过两个文件中数量不同的字节。这可以通过以下方式来实现:
cmp -i [bytes-to-skip-from-first-file] : [bytes-to-skip-from-second-file] [file1] [file2]
例如:
cmp -i 4:7 file1.txt file2.txt

4. 如何让 cmp 显示所有差异字节的位置(及数值)
你还可以让 cmp 命令打印所有差异字节的字节位置和字节数值。这一功能可以通过 -l 命令行选项来使用。
cmp -l [file1] [file2]
例如:
cmp -l file1.txt file2.txt

输出(如上所示的例子)中的第一列表示差异字节的位置(字节编号)。第二列表示第一个文件中差异字节的字节数值,而第三列表示第二个文件中差异字节的字节数值。
5. 如何限制要比较的字节数
该工具还允许你限制想要比较的字节数量——例如,你可能只想比较最多 25 或 50 个字节。这可以通过使用 -n 命令行选项来实现。
$ cmp -n [number-of-bytes-to-be-compared] [file1] [file2]
例如:
$ cmp -n 25 file1.txt file2.txt
6. 使用 cmp 命令时如何显示进度条
在使用 cmp 比较大文件(甚至分区)时,你可能希望看到正在进行中的比较进度。这可以通过将 pv 命令与 cmp 命令配合使用来实现。以下是你可以使用的命令模板:
$ pv [file1] | cmp -l [file2] > [output-file]
例如:
$ pv file1.txt | cmp -l file3.txt > output.txt

请注意,output.txt 文件将包含 cmp 命令产生的所有输出。而进度条(你可以在上面的截图中看到)是由 pv 命令产生的。
pv 命令在 Linux 中通常不会预装(至少在 Ubuntu 上没有预装)。但你可以使用以下命令轻松地安装它:
sudo apt-get install pv
7. 如何让 cmp 抑制输出
该工具还允许你抑制其正常产生的输出。这可以通过使用 -s 命令行选项来实现。
$ cmp -s [file1] [file2]
例如:
$ cmp -s file1.txt file2.txt
在脚本中使用 cmp 工具时,这个选项可能会很方便。例如,根据文件是否完全相同(可以通过获取命令的退出码来判断),你可能希望显示一条自定义消息,而不是该工具通常产生的输出。
结语
在本文中,我们已经介绍了 cmp 命令的大部分选项,因此你需要多加练习,才能在日常工作中开始使用这个工具。如果还有任何疑问,请查阅 cmp 的手册页(man page)。