Бывает появляется необходимость сравнить содержимое двух файлов (например, конфигураций), чтобы выявить внесенные изменения. В линукс это можно сделать многими способами. Но в этой статье мы рассмотрим утилиту diff.
Diff – это пакет из стандартного репозитория, который работает в консоли. Его использовать очень просто.
$ diff options file1 file2
Можно так же сравнивать более двух файлов.
$ diff options file1 file2 file3 file4
Опции у diff следующие:
-q – выводить только отличия файлов;
-s – выводить только совпадающие части;
-с – выводить нужное количество строк после совпадений;
-u – выводить только нужное количество строк после отличий;
-y – выводить в две колонки;
-e – вывод в формате ed скрипта;
-n – вывод в формате RCS;
-a – сравнивать файлы как текстовые, даже если они не текстовые;
-t – заменить табуляции на пробелы в выводе;
-l – разделить на страницы и добавить поддержку листинга (как у less);
-r – рекурсивное сравнение папок;
-i – игнорировать регистр;
-E – игнорировать изменения в табуляциях;
-Z – не учитывать пробелы в конце строки;
-b – не учитывать пробелы;
-B – не учитывать пустые строки.
В выводе сравнения файлов указываются символы, которые обозначают следующее:
a – добавлено
d – удалено
c – изменено
> – строка совпадает
< - строка отличается
Рассмотрим пример. У нас есть два файла. Посмотрим их содержимое:
$ cat file1
1
2
3
a
b
c
$ cat file2
1
a
2
a
3
c
Как видим, они отличаются. Попробуем их сравнить.
$ diff file1 file2
1a2
> a
3d3
< 3
5c5
< b
---
> 3
Но мне нравится больше в две колонки:
$ diff -y file1 file2
1 1
> a
2 2
3 <
a a
b | 3
c c
Как видно, diff - это очень удобный инструмент для сравнения двух и более файлов.