The diff command is a very important tool on Linux to compare the contents of a file, especially to compare two different versions of files to find the changes. Diff prints each line's changes on the command line. The latest version of diff also supports binary files. The output of the diff program is called Patch, because there is also a patch program in the Linux system that updates the contents of the A.C file to B.C based on the diff output. Diff is an integral part of version control tools like SVN, CVS, and Git.
1. Command format :
diff[parameter [file 1 or directory 1][file 2 or directory 2]
2. Command function :
The diff command can compare individual files or directory contents. If you specify that the comparison is a file, it is only valid if the input is a text file. Compare the similarities and differences of text files in a row-by-line manner. If you specify a table of contents, the diff command compares a text file with the same name in two directories. Lists the different binaries, common subdirectories, and files that appear only in one directory.
3. Command Parameters :
-Specify how many lines of text to display. This parameter must be used in conjunction with the-C or-u parameter.
The-A or--text diff preset will only compare text files line by row.
-B or--ignore-space-change do not check for differences in whitespace characters.
-B or--ignore-blank-lines does not check for blank lines.
-C Displays all the text and marks the difference.
-C or--context is the same as executing the "-c-" directive.
-D or--minimal use different algorithms to compare in smaller units.
-D or ifdef the output format of this parameter is available for the predecessor Processor macro.
-E or--ed the output format of this parameter is available for the ed script file.
The-f or-forward-ed output is formatted like an ED script file, but is displayed differently in the order of the original files.
-h or--speed-large-files can speed up when comparing large files.
-L or--ignore-matching-lines if two files are different in a few lines, and these lines both contain the characters or strings specified in the option, the differences between the two files are not displayed.
-I or--ignore-case do not check for differences in case.
-L or--paginate the results to the PR program for paging.
-N or--rcs displays the comparison results in RCS format.
-N or--new-file when comparing directories, if file a only appears in a directory, the preset will display: Only in directory: file A If you use the-n parameter, diff will compare file A with a blank file.
-P If the file is compared to a C language code file, the name of the function where the difference is displayed.
-P or--unidirectional-new-file is similar to-N, but this file is compared to a blank file only if the second directory contains a file that is not in the first directory.
-Q or--brief display only if there is no difference, no detailed information is displayed.
-R or--recursive to compare files in subdirectories.
-S or--report-identical-files if no differences are found, the message is still displayed.
-S or--starting-file when comparing directories, start comparing from the specified file.
-T or--expand-tabs expands the tab character when it is output.
-T or--initial-tab the tab character before each line to align.
-u,-u or--unified= displays the different contents of the file in a merged manner.
-V or--version displays version information.
-W or--ignore-all-space ignores all whitespace characters.
-W or--width specifies the column width when using the-y parameter.
-X or--exclude does not compare the files or directories specified in the options.
-X or--exclude-from you can save the file or directory type as a text file, and then specify the text file in =.
-Y or--side-by-side displays the similarities and differences of the files in a parallel manner.
--help display Help.
--left-column when using the-y parameter, if the contents of one row of two files are the same, the contents of that row are displayed only in the field on the left.
--suppress-common-lines displays only the differences when using the-y parameter.
4. Usage examples :
Example 1: Comparison of two files
Command :
Output :
[email protected] test3]# diff log2014.log Log2013.log 3c3 < 2014-03 --- > 2013-038c8 < 2013-07 --- > 2013-0811,12D10 < 2013-11 < 2013-12
Description :
The "3c3" and "8c8" above indicate that Log2014.log and Log20143log files differ in rows 3 and 8th, and "11,12D10" means that the first file is 11th and 12 rows longer than the second file.
the normal display format for diff has three tips :
A-add
C-change
D-delete
Example 2: Side-by format output
Command :
Diff Log2013.log Log2014.log-y-W 50
Output :
[[Email protected] test3]# diff log2014.log Log2013.log-y-w 502013-01 2013-012013-02 2013-022014-03 | 2013-032013-04 2013-042013-05 2013-052013-06 2013-062013-07 2013-072013-07 | 2013-082013-09 2013-092013-10 2013-102013-11<2013-12<[[email protected] test3]# diff log2013.log Log2014.log-y-w 502013-01 2013-012013-02 2013-022013-03 | 2014-032013-04 2013-042013-05 2013-052013-06 2013-062013-07 2013-072013-08 | 2013-072013-09 2013-092013-10 2013-10>2013-11 > 2013-12
Description :
| Indicates that the contents of the front and back 2 files are different
"<" indicates that the following file is 1 lines less than the previous file
">" indicates that the following file has 1 lines more than the previous file
Example 3: Context output format
Command :
Diff Log2013.log Log2014.log-c
Output :
[[Email protected] test3]# diff log2013.log Log2014.log -c*** log2013.log 2012-12-07 16:36:26.000000000 +0800--- Log2014.log 2012-12-07 18:01:54.000000000 +0800****************** 1,10 * * * 2013-01 2013-02! 2013-03 2013-04 2013-05 2013-06 2013-07! 2013-08 2013-09 2013-10---1,12---- 2013-01 2013-02! 2014-03 2013-04 2013-05 2013-06 2013-07! 2013-07 2013-09 2013-10+ 2013-11+ 2013-12[ [Email protected] test3]# diff log2014.log Log2013.log -c*** log2014.log 2012-12-07 18:01:54.000000000 +0800--- Log2013.log 2012-12-07 16:36:26.000000000 +0800****************** 1,12 * * * 2013-01 2013-02! 2014-03 2013-04 2013-05 2013-06 2013-07! 2013-07 2013-09 2013-10-2013-11-2013-12---1,10---- 2013-01 2013-02! 2013-03 2013-04 2013-05 2013-06 2013-07! 2013-08 2013-09 2013-10[[email protected] test3]#
Description :
In this way, a description of the comparison file is made in the first two lines, here are three special characters:
The "+" comparison of the latter of the files is more than the previous line
"-" compares the latter of the file with a smaller line than the previous
“! "Compare files with two different lines
Example 4: Unified format Output
Command :
Diff Log2014.log Log2013.log-u
Output :
[[Email protected] test3]# diff log2014.log Log2013.log- u---log2014.log 2012-12-07 18:01:54.000000000 +0800+++ Log2013.log 2012-12-07 16:36:26.000000000 +0800@@ -1,12 +1,10 @@ 2013-01 2013-02-2014-03+2013-03 2013-04 2013-05 2013-06 2 013-07-2013-07+2013-08 2013-09 2013-10-2013-11-2013-12
Description :
The first part of it is also the basic information of the file:
---log2014.log 2012-12-07 18:01:54.000000000 +0800
+ + + log2013.log 2012-12-07 16:36:26.000000000 +0800
"---" means the document before the change, and "+ + +" means the document after the change.
The second part, the position of the change with two @ as the first and end.
@@ -1,12 +1,10 @@
The preceding " -1,12" is divided into three parts: the minus sign indicates the first file (that is, Log2014.log), "1" means line 1th, and "12" means 12 rows in a row. Together, it means that the following is the first file, starting from line 1th, 12 consecutive lines. Similarly, "+1,10" means that after a change, the second file becomes a row of 10 lines starting from line 1th.
Example 5: Compare folders differently
Command :
Diff Test3 Test6
Output :
[[email protected "test]# diff test3 Test6only in test6:linklog.logOnly in Test6:log2012.logdiff test3/log2013.log test6/log2013.log1,10c1,3 < 2013-01 < 2013-02< 2013-03< 2013-04< 2013-05< 2013-06< 2013-07< 2013-08< 2013-09< 2013-10--- > Hostnamebaidu =baidu.com> hostnamesina=sina.com> hostnames=truediff test3/log2014.log test6/log2014.log1,12d0 < 2013-01 < 2013-02< 2014-03< 2013-04< 2013-05< 2013-06< 2013-07< 2013-07< 2013-09< 2013-10< 2013-11< 2013-12only in Test6:log2015.logOnly in Test6:log2016.logOnly in test6:log2017.log[[email protected] test]#
View Code
Description :
Example 6: Compare two different files and produce patches
Command :
Diff-run Log2013.log Log2014.log >patch.log
Output :
[[email protected] test3]# diff-run log2013.log log2014.log >patch.log[[email protected] test3]# ll Total 12-rw-r--r--2 R Oot root 12-07 16:36 log2013.log-rw-r--r--1 root root 12-07 18:01 log2014.log-rw-r--r--1 root root 248 12- 21:33 Patch.log[[email protected] test3]# cat patc.logcat:patc.log: No file or directory [[email protected] test3]# cat Patch.log ---log2013.log 2012-12-07 16:36:26.000000000 +0800+++ log2014.log 2012-12-07 18:01:54.000000000 +0800@@ -1,10 +1,12 @@ 20 13-01 2013-02-2013-03+2014-03 2013-04 2013-05 2013-06 2013-07-2013-08+2013-07 2013-09 2013-10+2013-11+2013-12[[email Protected] test3]#
Description
Example 7: Patching
Command :
Output :
[email protected] test3]# cat log2013.log2013-012013-022013-032013-042013-052013-062013-072013-082013-092013-10[[ Email protected] test3]# patch log2013.log patch.log patching file Log2013.log[[email protected] test3]# [[Email protected ] test3]# cat Log2013.log 2013-012013-022014-032013-042013-052013-062013-072013-072013-092013-102013-112013-12[[ Email protected] test3]#
One Linux command per day: diff command