The diff
command in Linux is a powerful tool that allows users to compare files and directories. With the help of this command, one can identify differences between files, and perform tasks like code reviews, configuration management, and version control.
This tutorial will guide users through what is the diff
command, its possible methods, and practical examples.
The diff
command is used in Linux to compare the content of two files line by line. When executed, this command analyzes the two files and outputs the differences in a specific format. The output shows which lines need to be added, deleted, or changed to make the files identical.
The basic syntax for the Linux diff command is provided below:
diff [options] file1 file2
Here,
diff
is the command itself.
[options]
are optional flags used to modify the behavior of the diff
Linux command.
file1
and file2
are the two files used for Linux file comparison.
The following table describes a few options that can be used with diff
:
Option |
Description |
|
Process every file as a text file and perform a line-by-line comparison. |
|
Does not consider white space differences. |
|
Show differences with a few lines of context around them. |
|
Opt for a different algorithm to pinpoint a more concise set of changes. |
|
Output an |
|
Ignore changes due to tab expansion. |
|
Compare files in binary mode. |
|
Ignore case differences in file contents. |
|
Paginate the output through |
|
Treat absent files as empty. |
|
Report only when files differ. |
|
Report when files are identical. |
|
Display output in a unified format, showing differences more compactly. |
|
Ignore all white space. |
For more details and to explore more options, the users can get help by opening the diff manual using the following command:
man diff
There are two ways to compare files on Linux with diff
.
The basic way to use the diff
in Linux is to compare two files line by line and display their differences. To compare two text files, file1.txt
and file2.txt
, one can use the following command:
diff file1.txt file2.txt
This command will output the differences between file1.txt
and file2.txt
.
For a more readable format, the -u
option can be used with diff
. This option provides a unified format that includes a few lines of context around the differences. This makes it easier to understand the changes. Follow the command provided below:
diff -u file1.txt file2.txt
The unified format output includes line numbers, context lines, and change indicators. Lines starting with -
indicate deletions, lines starting with +
indicate additions and lines starting with a space are unchanged context lines.
The Linux command diff
can also be used to compare directories, it can be done using the -r
option. For example:
diff -r dir1 dir2
The above command when executed will recursively compare all files and subdirectories within dir1
and dir2
.
The diff
output uses specific symbols to indicate changes, these are provided below:
---
: Denotes the first file.
+++
: Denotes the second file.
@@ -1,4 +1,4 @@
: This line is part of the unified diff format. It gives context about where the changes are happening in the files. @@
indicates the start of a change hunk. -1,4
means the chunk starts at line 1 in the first file and spans 4 lines. +1,4
means the chunk starts at line 1 in the second file and spans 4 lines.
<
: This marker signifies lines that exist in the first file but not in the second one. Such lines must be removed from the first file to match the second file exactly.
>
: This marker indicates lines that are in the second file but not in the first one. These lines should be added to the first file to make it identical to the second file.
-
: This marker shows lines that have been deleted from the first file.
+
: This marker indicates lines that have been inserted into the second file.
Let’s look at an example to make it clearer.
Suppose there are two files, file1.txt
and file2.txt
.
Contents of file1.txt
:
apple
banana
cherry
date
Contents of file2.txt
:
apple
banana
date
raspberry
Running the command diff file1.txt file2.txt
will produce the following output:
Here’s how to interpret this output:
3d2
: This means that line 3 in file1.txt
(cherry) needs to be deleted to match file2.txt
. The d
stands for "delete".
< cherry
: This indicates that cherry is present in file1.txt
but not in file2.txt
.
4a4
: This means that after line 4 in file1.txt
, users need to add "raspberry" to match file2.txt
. The a
stands for "add".
> raspberry
: This indicates that raspberry is present in file2.txt
but not in file1.txt
.
To create a patch file, the -u
(unified) option is used, which provides a more readable format by showing a few lines of context around the changes. The output is then redirected to a file, typically with a .patch
extension. For example:
diff -u file1.txt file2.txt > changes.patch
diff -u
: Compares file1.txt
and file2.txt
and generates a unified diff
.
>
: Redirects the output to a file named changes.patch
.
To apply the patch, use the patch command like this:
patch file1.txt < changes.patch
The diff
also supports multiple output formats, here are a few examples.
This format gives users a snapshot of the changes with a few lines of context before and after each change. It’s great for quickly seeing what was added or removed.
diff -u file1.txt file2.txt
This format shows more surrounding lines for each change and gives users a bigger picture of where the changes happened.
diff -c file1.txt file2.txt
This format places the two files next to each other and makes it easy to compare them line by line.
diff -y file1.txt file2.txt
This format gives a summary of whether the files differ but does not show the actual changes.
diff -q file1.txt file2.txt
Here are some practical examples of using the diff
command in Linux.
When comparing files, sometimes the case of the letters might differ, but the content is essentially the same. The -i
option is used to ignore case differences. For example:
diff -i file3.txt file4.txt
In this example, diff
will treat "Hello" and "hello" as identical, ignoring the case difference.
White space differences, such as extra spaces or tabs, can be ignored using the -w
option. This is useful when formatting changes have been made but the content remains the same. For example:
diff -w file1.txt file2.txt
Here, diff
will ignore all white spaces, treating "Hello World" and "Hello World" as identical.
The diff
in Linux can also be used to compare binary files using the --binary
option. This is helpful when users need to check if two binary files are identical or not. For example:
diff --binary file1.bin file2.bin
In this case, diff will compare the binary data of file1.bin
and file2.bin
and report any differences.
To ignore blank lines when comparing files, simply use the -B
option, which is useful when blank lines have been added or removed.
diff -B file1.txt file2.txt
The diff
is a versatile command in Linux for comparing files and directories. By understanding its syntax, options, and output formats, users can efficiently identify differences and manage changes. Whether for code reviews, configuration management, or version control, the diff
command is an essential part of any Linux user’s toolkit.