本页内容

  • 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

Linux cmp 命令初学者实用教程七个示例

正如你在上面的截图中所看到的,输出清楚地表明两个文件在第 1 行第 20 个字节处存在差异。

2. 如何让 cmp 打印差异字节

如果你愿意,还可以让 cmp 在输出中显示存在差异的字节。这可以使用 -b 命令行选项来实现。

cmp -b [file1] [file2]

例如:

cmp -b file1.txt  file2.txt

Linux cmp 命令初学者实用教程七个示例

在这种情况下,正如你在上方截图中所看到的,差异出现在第 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

Linux cmp 命令初学者实用教程七个示例

4. 如何让 cmp 显示所有差异字节的位置(及数值)

你还可以让 cmp 命令打印所有差异字节的字节位置和字节数值。这一功能可以通过 -l 命令行选项来使用。

cmp -l [file1] [file2]

例如:

cmp -l file1.txt  file2.txt

Linux cmp 命令初学者实用教程七个示例

输出(如上所示的例子)中的第一列表示差异字节的位置(字节编号)。第二列表示第一个文件中差异字节的字节数值,而第三列表示第二个文件中差异字节的字节数值。

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

Linux cmp 命令初学者实用教程七个示例

请注意,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)。