Linux diff命令介绍
diff是英文difference的缩写,它是一个常用的Linux命令,用于逐行比较两个文件或目录的内容,并显示它们之间的差异。diff命令可以帮助你找出文件之间的修改、添加或删除,并生成一个补丁文件,用于将一个文件更新为另一个文件。diff命令还可以比较目录中相同文件名的文件,但不会比较子目录¹。
适用的Linux版本
diff命令是GNU diffutils软件包的一部分,它在大多数Linux发行版中都是默认安装的。你可以使用diff --version
命令来查看你的系统中安装的diff版本²。如果你没有安装diff,你可以使用以下命令来安装:
- 在基于Debian或Ubuntu的系统中,使用
sudo apt install diffutils
命令。 - 在基于Red Hat或CentOS的系统中,使用
sudo yum install diffutils
命令(CentOS 7或更低版本)或sudo dnf install diffutils
命令(CentOS 8或更高版本)。 - 在基于Arch Linux的系统中,使用
sudo pacman -S diffutils
命令。
[linux@bashcommandnotfound.cn ~]$ diff --version
diff (GNU diffutils) 3.7
...
[linux@bashcommandnotfound.cn ~]$ sudo apt install diffutils
...
Linux diff命令的基本用法
diff命令的基本语法格式如下:
diff [选项] 文件1 文件2
其中,文件1和文件2可以是普通文件或目录。选项可以用来控制diff命令的输出格式、比较方式和其他功能。如果不指定任何选项,diff命令会以默认格式显示两个文件之间的差异。
Linux diff命令的常用选项说明
diff命令有很多选项,可以根据不同的需求来使用。以下是一些常用选项的说明:
选项 | 说明 |
---|---|
-i | 忽略大小写差异 |
-b | 忽略空格数量差异 |
-B | 忽略空白行 |
-w | 忽略所有空格 |
-q | 只显示有无差异,不显示详细信息 |
-s | 如果没有发现任何差异,仍然显示信息 |
-y | 以并排方式显示文件的差异 |
-c | 显示上下文格式的差异 |
-u | 显示合并格式的差异 |
-r | 如果比较目录,递归比较子目录中的文件 |
Linux diff命令的实例
以下是一些使用diff命令的实例,你可以根据自己的需要进行修改和尝试。
比较两个文件
假设有两个文件file1.txt和file2.txt,它们的内容如下:
[linux@bashcommandnotfound.cn ~]$ cat file1.txt
Hello world!
This is a test file.
Goodbye!
[linux@bashcommandnotfound.cn ~]$ cat file2.txt
hello world!
This is a test file.
See you!
我们可以使用diff命令来比较它们:
[linux@bashcommandnotfound.cn ~]$ diff file1.txt file2.txt
1c1
< Hello world!
---
> hello world!
3c3
< Goodbye!
---
> See you!
输出结果中,第一行表示第一个文件(file1.txt)和第二个文件(file2.txt)在第一行(1)有差异,需要修改(c)。第二行表示第一个文件的内容,以<开头。第三行表示两个文件的分隔符,由---组成。第四行表示第二个文件的内容,以>开头。同理,第五行到第七行表示两个文件在第三行的差异。
忽略大小写差异
如果我们不想区分大小写,可以使用-i选项来忽略大小写差异:
[linux@bashcommandnotfound.cn ~]$ diff -i file1.txt file2.txt
3c3
< Goodbye!
---
> See you!
输出结果中,只显示了第三行的差异,因为第一行的大小写差异被忽略了。
以并排方式显示差异
如果我们想要以并排的方式显示两个文件的差异,可以使用-y选项:
[linux@bashcommandnotfound.cn ~]$ diff -y file1.txt file2.txt
Hello world! | hello world!
This is a test file. This is a test file.
Goodbye! | See you!
输出结果中,每一行都显示了两个文件的内容,中间用|分隔。如果两个文件在某一行内容相同,则没有|符号。
显示合并格式的差异
如果我们想要以合并的方式显示两个文件的差异,可以使用-u选项:
[linux@bashcommandnotfound.cn ~]$ diff -u file1.txt file2.txt
--- file1.txt 2023-10-24 15:07:59.000000000 +0800
+++ file2.txt 2023-10-24 15:08:09.000000000 +0800
@@ -1,3 +1,3 @@
-Hello world!
+hello world!
This is a test file.
-Goodbye!
+See you!
输出结果中,前两行显示了两个文件的名称和修改时间。第三行显示了两个文件的比较范围,以@@开头和结尾。接下来的几行显示了两个文件的内容,以-开头的是第一个文件的内容,以+开头的是第二个文件的内容。
比较两个目录
假设有两个目录dir1和dir2,它们的结构如下:
[linux@bashcommandnotfound.cn ~]$ tree dir1 dir2
dir1
├── file1.txt
├── file2.txt
└── sub1
└── file3.txt
dir2
├── file1.txt
├── file4.txt
└── sub2
└── file5.txt
2 directories, 5 files
我们可以使用diff命令来比较它们:
[linux@bashcommandnotfound.cn ~]$ diff dir1 dir2
Only in dir1: file2.txt
Only in dir2: file4.txt
diff dir1/file1.txt dir2/file1.txt
1c1
< Hello world!
---
> hello world!
Only in dir1: sub1
Only in dir2: sub2
输出结果中,显示了两个目录中不同的文件和子目录。如果要递归比较子目录中的文件,可以使用-r选项:
[linux@bashcommandnotfound.cn ~]$ diff -r dir1 dir2
Only in dir1: file2.txt
Only in dir2: file4.txt
diff dir1/file1.txt dir2/file1.txt
1c1
< Hello world!
---
> hello world!
Only in dir1/sub1: file3.txt
Only in dir2/sub2: file5.txt
Linux diff命令的注意事项
- diff命令只能比较文本文件或目录,不能比较二进制文件或压缩文件。
- diff命令只能显示两个文件或目录之间的差异,不能直接修改或合并它们。如果要修改或合并文件,可以使用patch命令或其他工具。
评论区