# diff - 比较给定的两个文件的不同

逐行比较两个文本文件,把文件的差异显示到标准输出。如果要指定要比较目录,那么diff命令会比较目录中相同文件名的文件,不会比较子目录。

diff命令 在最简单的情况下,比较给定的两个文件的不同。如果使用“-”代替“文件”参数,则要比较的内容将来自标准输入。diff命令是以逐行的方式,比较文本文件的异同处。如果该命令指定进行目录的比较,则将会比较该目录中具有相同文件名的文件,而不会对其子目录文件进行任何比较操作。

# 适用范围

RedHat
RHEL
Ubuntu
CentOS
Debian
Deepin
SUSE
openSUSE
Fedora
Linux Mint
Alpine Linux
Arch Linux

# 语法

diff  [选项]  files

# 选项

-m, --mode=MODE               # 设置目录的权限
-i, --ignore-case             # 比较的时候,忽略大小写
--ignore-file-name-case       # 在比较文件名的时候,忽略大小写
--no-ignore-file-name-case    # 比较文件名的时候,不能忽略大小写
-E, --ignore-tab-expansion    # 不比较tab
-b, --ingore-space-change     # 不比较空格数
-w, --ignore-all-space        # 忽略所有的空格
-B, --ignore-blank-lines      # 不比较空白行
-I res, --ignore-mathcing-lines=res # 不比较含有指定字符串res的行
--strip-trailing-cr           # 出去输入行尾随的东西
-a, --text                    # 将所有的文件都当做文本文件
-c  -C NUM  --context[=NUM]   # 显示不同之处的前后部分内容,默认是3行
-u  -U NUM  --unified[=NUM]   # 显示相同之处的前后部分内容,默认是3行
--label LABEL                 # 使用文件的标签,而不是名字
-p, --show-c-function         # 比较c语言文件的时候,显示不同之处所在的函数
-F RE,  --show-function-line=RE # 显示匹配RE的最近的行
-q, --brief                   # 只显示是否有差异,不显示详细内容
-e, --ed                      # 输出一个ed脚本
--normal                      # 输出一个正常的diff
-n, --rcs                     # 结果以rcs的方式显示
-y, --side-by-side            # 将两个文件已并列方式显示比较结果
-W num, --width=NUM           # 使用“-y”选项的时候,指定列宽
--left-column                 # 只输出公共行的左列
--suppress-common-lines       # 不要输出公共行
-D NAME, --ifdef=NAME         # 输出合并文件以显示‘#ifdef NAME’的差异
--GTYPE-group-format=GFMT     # 同上,但用GFMT格式化GTYPE输入组
--line-format=LFMT            # 同上,但用LFMT格式化GTYPE输入组
--LTYPE-line-format=LFMT      # 同上,但用LFMT格式化LTYPE输入行
-l, --paginate                # 将输出传递给pr”以分页
-t, --expand-tabs             # 将制表符展开为输出中的空格
-T, --initial-tab             # 通过预置选项卡使制表符对齐
-N, --new-file                # 将缺席文件视为空文件
--unidirectional-new-file     # 将缺席的第一批文件视为空文件
-s, --report-identical-files  # 当两个文件相同时报告
-X FILE, --exclude-from=FILE  # 排除与文件中任何模式匹配的文件
-S FILE, --starting-file=FILE # 从文件开始比较目录时
-r, --recursive               # 用递归的方式比较子目录下的所有文件
-x path                       # 不比较指定的文件
--from-file=FILE1             # 将FILE 1与所有操作数进行比较。FILE 1可以是一个目录
--to-file=FILE2               # 将所有操作数与文件2进行比较。文件2可以是一个目录
--horizon-lines=NUM           # 保持通用前缀和后缀的NUM行
-d  --minimal                 # 努力找出一组较小的变更
--speed-large-files           # 假设文件很大,并且有许多零散的小更改。

--help                           # 显示帮助文档
--version                        # 显示命令版本信息

# 举例

[sogrey@bogon demos]$ diff test.txt test2.txt
1,2d0
< 石家庄今日新增16例确诊病例
< 中国留美博士遇害 美驻华使馆慰问
4,6c2,3
< 理塘文旅公司回应丁真抽烟
< 北京一确诊者隐瞒行程不配合流调
< 山西晋中新增2例无症状感染者
---
> 
> 1月11日,美国第一夫人梅拉尼娅·特朗普通过白宫发表声明,谴责上周发生在美国国会的暴乱。
[sogrey@bogon demos]$ diff -y test.txt test2.txt
石家庄今日新增16例确诊病例				      <
中国留美博士遇害 美驻华使馆慰问				      <
特朗普夫人发文谴责国会暴乱					特朗普夫人发文谴责国会暴乱
理塘文旅公司回应丁真抽烟				      |
北京一确诊者隐瞒行程不配合流调				      |	1月11日,美国第一夫人梅拉尼娅·特朗普通过白宫发表声明,谴责上
山西晋中新增2例无症状感染者				      <
[sogrey@bogon demos]$ 
[sogrey@bogon 文档]$ diff backup demos
只在 demos 存在:test.c
[sogrey@bogon 文档]$ diff -q backup/test.txt demos/test.txt
文件 backup/test.txt 和 demos/test.txt 不同
[sogrey@bogon 文档]$