cmp Command in Linux with examples
Last Updated :
03 Sep, 2024
When working with Linux or UNIX systems, you may often need to compare files to check for differences. The 'cmp' command is a powerful tool that allows you to compare two files byte by byte, making it a crucial utility for developers, system administrators, and anyone needing precise file comparisons.
What is the 'cmp' Command?
'cmp' command in Linux/UNIX is used to compare the two files byte by byte and helps you to find out whether the two files are identical or not.
- When 'cmp' is used for comparison between two files, it reports the location of the first mismatch to the screen if a difference is found and if no difference is found i.e. the files compared are identical.
- 'cmp' displays no message and simply returns the prompt if the files compared are identical.
Syntax:
cmp [OPTION]... FILE1 [FILE2 [SKIP1 [SKIP2]]]
- 'FILE1' and 'FILE2': The names of the files you want to compare.
- 'SKIP1' and 'SKIP2': Optional arguments specifying the number of bytes to skip at the beginning of each file.
- 'OPTION': Various command-line options to modify the behavior of the cmp command.
The syntax of 'cmp' command is quite simple to understand. If we are comparing two files then obviously we will need their names as arguments (i.e as FILE1 & FILE2 in syntax). In addition to this, the optional 'SKIP1' and 'SKIP2' specify the number of bytes to skip at the beginning of each file which is zero by default and 'OPTION' refers to the options compatible with this command about which we will discuss later on.
cmp Command Example in Linux
As explained that the cmp command reports the byte and line number if a difference is found. Now let's find out the same with the help of an example. Suppose there are two files which you want to compare one is file1.txt and other is file2.txt :
$cmp file1.txt file2.txt
1. If the files are not identical
The output of the above command will be :
$cmp file1.txt file2.txt
file1.txt file2.txt differ: byte 9, line 2
/*indicating that the first mismatch found in
two files at byte 20 in second line*/
2. If the files are identical
You will see something like this on your screen:
$cmp file1.txt file2.txt
$ _
/*indicating that the files are identical*/
Options for the 'cmp' command
1. '-b'(print-bytes)
If you want cmp displays the differing bytes in the output when used with -b option.
//...cmp command used with -b option...//
$cmp -b file1.txt file2.txt
file1.txt file2.txt differ: 12 byte, line 2 is 154 l 151 i
/* indicating that the difference is in 12
byte ,which is 'l' in file1.txt and 'i' in file2.txt.*/
The values 154 and 151 in the above output are the values for these bytes, respectively.
2. '-i' [bytes-to-be-skipped]
Now, this option when used with cmp command helps to skip a particular number of initial bytes from both the files and then after skipping it compares the files. This can be done by specifying the number of bytes as argument to the '-i' command line option.
//...cmp command used with -i option...//
$cmp -i 10 file1.txt file2.txt
$_
/*indicating that both files are identical
after 10 bytes skipped from both the files*/
Note: In cases like these (where you use '-i' to skip bytes), the byte at which the comparison begins is treated as byte number zero.
3. '-i' [bytes to be skipped from first file] : [bytes to be skipped from second file]
This option is very much similar to the above '-i' [bytes to be skipped] option but with the difference that now it allows us to input the number of bytes we want to skip from both the files separately.
//...cmp command used with -i option...//
$cmp -i 10:12 file1.txt file2.txt
$_
/*indicating that both files are identical
after 10 bytes skipped from first file and
12 bytes skipped from second file*/
4. '-l' option
This option makes the cmp command print byte position and byte value for all differing bytes.
//...cmp command used with -l option...//
$cmp -l file1.txt file2.txt
20 12 56
21 124 12
22 150 124
23 151 150
24 163 151
25 40 163
26 146 40
27 150 151
28 12 24
29 124 145
30 157 163
/*indicating that files are different
displaying the position of differing
bytes along with the differing bytes
in both file*/
The first column in the output represents the position (byte number) of differing bytes. The second column represents the byte value of the differing byte in the first file, while the third column represents the byte value of the differing byte in the second file.
5. '-s' option
This allows you to suppress the output normally produced by 'cmp' command i.e it compares two files without writing any messages.
- Exit status 0: Files are identical.
- Exit status 1: Files are different.
- Exit status 2: An error occurred.
//...cmp command used with -s option...//
$cmp -s file1.txt file.txt
1
This compares only the first 50 bytes of both files, and since there is no output, they are identical within those 50 bytes.
6. '-n' [number of bytes to be compared] option
This option allows you to limit the number of bytes you want to compare ,like if there is only need to compare at most 25 or 50 bytes.
//...cmp command used with -n option...//
$cmp -n 50 file1.txt file2.txt
$_
/*indicating files are identical for starting
50 bytes*/
8. '--v' option
This gives the output information and exits.
cmp --version
9. '--help' option
This displays a help message and exits.
cmp --help
Conclusion
The 'cmp' command in Linux is an efficient tool for comparing files byte by byte. Its simplicity, combined with a range of options, makes it suitable for various file comparison needs, from basic text files to complex binaries. 'cmp' users can easily identify differences, validate file integrity, and troubleshoot issues related to file modifications.
Explore
Getting Started with Linux
Installation with Linux
Linux Commands
Linux File System
Linux Kernel
Linux Networking Tools
Linux Process
Linux Firewall
Shell Scripting & Bash Scripting
Linux Administrator System