diff - compare files line by line
| Use Case | Command | Description |
|---|---|---|
| Compare two files | diff file1 file2 | Show differences line by line (normal diff) |
| Unified diff with context | diff -u file1 file2 | Compact format with 3 lines context |
| Sideโbyโside comparison | diff -y file1 file2 | Twoโcolumn output, easier to read |
| Recursive directory diff | diff -r dir1 dir2 | Compare all files in subdirectories |
| Ignore whitespace | diff -w file1 file2 | Skip all whiteโspace differences |
| Only report if files differ | diff -q file1 file2 | Quiet mode, no detailed diff |
| Ignore case | diff -i file1 file2 | Caseโinsensitive comparison |
diff [OPTION]... FILES
Compare FILES line by line.
Mandatory arguments to long options are mandatory for short options too.
--normal ๐ output a normal diff (the default)-q, --brief ๐ report only when files differ-s, --report-identical-files โ
report when two files are the same-c, -C NUM, --context[=NUM] ๐ output NUM (default 3) lines of copied context-u, -U NUM, --unified[=NUM] ๐ฒ output NUM (default 3) lines of unified context-e, --ed ๐ output an ed script-n, --rcs ๐ฆ output an RCS format diff-y, --side-by-side โ๏ธ output in two columns-W, --width=NUM ๐ output at most NUM (default 130) print columns--left-column โฌ
๏ธ output only the left column of common lines--suppress-common-lines ๐ do not output common lines-p, --show-c-function ๐งฉ show which C function each change is in-F, --show-function-line=RE ๐ show the most recent line matching RE--label LABEL ๐ท๏ธ use LABEL instead of file name and timestamp (can be repeated)-t, --expand-tabs โน expand tabs to spaces in output-T, --initial-tab โ๏ธ make tabs line up by prepending a tab--tabsize=NUM ๐ tab stops every NUM (default 8) print columns--suppress-blank-empty ๐งน suppress space or tab before empty output lines-l, --paginate ๐ pass output through 'pr' to paginate it-r, --recursive ๐ recursively compare any subdirectories found--no-dereference ๐ don't follow symbolic links-N, --new-file ๐ treat absent files as empty--unidirectional-new-file โ๏ธ treat absent first files as empty--ignore-file-name-case ๐ก ignore case when comparing file names--no-ignore-file-name-case ๐ค consider case when comparing file names-x, --exclude=PAT ๐ซ exclude files that match PAT-X, --exclude-from=FILE ๐๐ซ exclude files that match any pattern in FILE-S, --starting-file=FILE ๐ start with FILE when comparing directories--from-file=FILE1 ๐ compare FILE1 to all operands; FILE1 can be a directory--to-file=FILE2 ๐ compare all operands to FILE2; FILE2 can be a directory-i, --ignore-case ๐ ignore case differences in file contents-E, --ignore-tab-expansion โน ignore changes due to tab expansion-Z, --ignore-trailing-space ๐งผ ignore white space at line end-b, --ignore-space-change ๐งฝ ignore changes in the amount of white space-w, --ignore-all-space ๐๏ธ ignore all white space-B, --ignore-blank-lines ๐ญ ignore changes where lines are all blank-I, --ignore-matching-lines=RE ๐ฏ ignore changes where all lines match RE-a, --text ๐ treat all files as text--strip-trailing-cr ๐ช strip trailing carriage return on input-D, --ifdef=NAME ๐ก๏ธ output merged file with '#ifdef NAME' diffs--GTYPE-group-format=GFMT format GTYPE input groups with GFMT--line-format=LFMT format all input lines with LFMT--LTYPE-line-format=LFMT format LTYPE input lines with LFMTThese format options provide fineโgrained control over the output of diff, generalizing -D/--ifdef.
LTYPE is 'old', 'new', or 'unchanged'. GTYPE is LTYPE or 'changed'.
GFMT (only) may contain:
%< lines from FILE1%> lines from FILE2%= lines common to FILE1 and FILE2%[-][WIDTH][.[PREC]]{doxX}LETTER printfโstyle spec for LETTERLETTERs are as follows for new group, lower case for old group:
%(A=B?T:E) if A equals B then T else E
LFMT (only) may contain:
%L contents of line%l contents of line, excluding any trailing newline%[-][WIDTH][.[PREC]]{doxX}n printfโstyle spec for input line numberBoth GFMT and LFMT may contain:
%% %%c'C' the single character C%c'\OOO' the character with octal code OOO-d, --minimal ๐ฌ try hard to find a smaller set of changes--horizon-lines=NUM ๐
keep NUM lines of the common prefix and suffix--speed-large-files โก assume large files and many scattered small changes--color[=WHEN] ๐จ color output; WHEN is 'never', 'always', or 'auto'; plain --color means --color='auto'--palette=PALETTE ๐จ the colors to use when --color is active; PALETTE is a colonโseparated list of terminfo capabilities--help โ display this help and exit-v, --version ๐ท๏ธ output version information and exitFILES are 'FILE1 FILE2' or 'DIR1 DIR2' or 'DIR FILE' or 'FILE DIR'. If --from-file or --to-file is given, there are no restrictions on FILE(s). If a FILE is '-', read standard input. Exit status is 0 if inputs are the same, 1 if different, 2 if trouble.
| Code | Meaning |
|---|---|
0 | Inputs are identical |
1 | Inputs are different |
2 | Trouble (e.g., file not found, invalid option) |
Written by Paul Eggert, Mike Haertel, David Hayes, Richard Stallman, and Len Tower.
Report bugs to: bug-diffutils AT gnu.org
GNU diffutils home page: <https://www.gnu.org/software/diffutils/>
General help using GNU software: <https://www.gnu.org/gethelp/>
Copyright ยฉ 2021 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.
wdiff(1), cmp(1), diff3(1), sdiff(1), patch(1)
The full documentation for diff is maintained as a Texinfo manual. If the info and diff programs are properly installed at your site, the command
info diff
should give you access to the complete manual.
Generated by phpman v4.9.22-1-g1b0fcb4 · Markdown · JSON · MCP Author: Che Dong Under GNU General Public License
2026-07-05 04:50 @216.73.216.52
CrawledBy Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
Enhanced by LLM: deepseek-v4-pro / taotoken.net / www.chedong.com - original format