无论您的角色如何,如果您的常规工作涉及在Linux中的命令行中进行操作,您可能会发现自己处于一种情况,您希望使用命令行实用程序来比较两个文件。 有几个命令行工具可以让你这样做,其中一个是' cmp '命令。
在本教程中,我们将通过简单易懂的例子来讨论'cmp'。 但在我们这样做之前,值得一提的是,本教程中提到的所有示例和说明都已在Ubuntu 16.04LTS上进行了测试。
cmp命令
'cmp'命令允许您执行两个文件的逐字节比较。 该实用程序以命令行选项的形式提供了几个功能。 在本教程中,我们将讨论一些关键选项,让您(初学者)了解该工具的工作原理。
如何使用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跳过字节)的情况下,比较开始的字节被视为字节数为零。
继续,该工具还允许您从两个文件跳过不同数量的字节。 这可以通过以下方式进行:
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”手册页 。