Команда diff – сравнение файлов и каталогов в Linux

Может случиться такая ситуация, что необходимо сравнить два файла и понять в чем различия. Можно конечно прибегнуть либо к ручному сравнению, и построчно сравнивать их, либо, воспользоваться утилитой diff. Утилита diff присутствует в операционных системах Linux и позволяет сравнивать и выводить разницу не только в файлах, но и директорий. Diff это утилита командной строки, так что для работы с ней необходимо открыть терминал и все действия производить в нем.

Помимо этого, в diff имеются опции позволяющие не только сравнивать файлы, но и приводить их к одному ввиду. Синтаксис diff довольно простой, сначала указываем название утилиты “diff”, затем при необходимости задаем опцию, к примеру -q, которая указывает утилите diff вывести информацию о том, имеются ли различия в сравниваемых файлах. А затем указываем какие файлы необходимо сравнить, к примеру: diff -q file_1 file_2.

В утилите diff как уже писалось выше, имеются опции, о которых вы можете прочесть в так называемой справке. Вызвать которую можно командой diff –help.

Сравниваем файлы с помощью утилиты diff

Итак, давайте разберемся поподробнее как работать с этой утилитой в дистрибутивах Linux. Сразу оговорюсь, рассматривать все опции доступные в diff мы не станем. Ограничимся лишь некоторыми из них для понимания как работать с этой утилитой. Итак, для примера у нас имеются два файла: index.html и index2.html. Чтобы сравнить их, вводим название утилиты diff, а затем указываем название файлов, которые хотим сравнить и выяснить различия между ними:

diff index.html index2.html

Как вы можете увидеть ниже, разница имеется в строке <div class=”element”></div>, которая в первом файле отсутствует, но имеется во втором:

diff сравнение файлов и каталогов в Linux 1

Результаты сравнения утилитой diff можно вывести сразу в двух колонках в терминале, для наглядного сравнения файлов так сказать, для этого используем ключ -y:

diff -y index.html index2.html

Как видите, при использовании опции -y у нас в терминале вывелось все содержимое файлов:

diff сравнение файлов и каталогов в Linux 2

Перенаправление результаты команды diff в файл

Результаты, которые выдает утилита diff, можно перенаправить в отдельный файл. Для этого ставим знак: >, а затем указываем название файла с расширением .diff. Файлы с расширением .diff хорошо читаются многими текстовыми редакторами доступными в Linux. К примеру, изменим наш файл добавив в него еще несколько строк для наглядности полученных результатов. Зетем перенаправим полученные результаты в файл output.diff.

diff index.html index2.html > output.diff

Для просмотра воспользуемся текстовым редактором Nano, о котором вы можете подробно прочесть в отдельной статье, доступной по этой ссылке. В текстовом файле отобразится лишь то, чем отличаются эти два файла:

diff сравнение файлов и каталогов в Linux 3

Сравниваем содержимое директорий командой diff

Ну и напоследок давайте рассмотрим пример сравнения двух директорий. Предположим, у нас имеются такие директории как code и code2. Что бы сравнить директории используется ключ -r. Приступим, вводим команду на сравнения:

diff -r code code2
diff сравнение файлов и каталогов в Linux 4

Для того чтобы отсеять некоторые файлы из вывода, например все тот же uotput.diff. Можно создать файл с исключениями, а затем указать утилите diff этот файл, в котором находятся наши исключения, и они будут отсутствовать в конечном результате. Давайте создадим файл clearFiles и внесем в него файл output.diff, тут важно заметить, что мы можем исключать файлы из вывода как при помощи расширения, так и по названию файлов. Сумбурно немного, но щас разберемся.

У файла output.diff есть расширение – diff, что бы исключить файлы с таким расширение, вписываем его в наш clearFiles указав сначала звездочку: *, а затем расширение, которое хотим исключить:

.diff

diff сравнение файлов и каталогов в Linux 5

Затем укажем утилите diff данный файл используя опцию -X. Полная команда будет выглядеть следующи образом, сначала вызываем саму утилиту dif, затем указываем ключ -r, которые обозначает что мы будем сравнивать содержимое директорий. После чего указываем опцию -X и название файла с нашими исключениями. И конечными пунктами будут сами директории, которые хотим сравнить:

diff -r -X clearFile Code Code2

Как можно увидеть из скриншота ниже, наш файл output.diff в результатах вывода отсутствует:

diff сравнение файлов и каталогов в Linux 6

Исключить файлы по именам можно подобным образом, который мы рассмотрели чуть выше. Разница лишь в том, что вместо расширения указываем имя файлов которые хотим исключить. К примеру, исключим файл с именем index.html. Для этого в файле clearFile указываем имя index со звездочкой в конце. Звездочка будет обозначать, что мы исключаем все файлы с таким именем не зависимо от их расширения:

diff сравнение файлов и каталогов в Linux 7

Выполняем снова такую же команду и смотрим на вывод, в результате файл с именем index пропадет из результатов вывода:

diff -r -X clearFile Code Code2
diff сравнение файлов и каталогов в Linux 8

Заключение

Утилита diff будет полезна в первую очередь администраторам, которые работают с операционными системами Linux. Так как может сложиться ситуация, что необходимо сравнить два конфигурационных файла и выяснить различия между ними. Но, есть вероятность и того, что рядовой пользователь также найдет что-то полезное при использовании diff.

Как говорилось в начале статьи, утилита diff имеет множество опций, которые помогут при работе с ней. Узнать о всех ее возможностях можно выполнив команду:

diff –help

diff сравнение файлов и каталогов в Linux 9

А на этом сегодня все, если статья оказалась вам полезна, подписывайтесь на рассылку журнала в pdf формате, а так же на социальные сети журнала Cyber-X:

YouTube
ВКонтакте
Telegram

По вопросам работы сайта, сотрудничества, а так же по иным возникшим вопросам пишите на E-Mail. Если вам нравится журнал и вы хотите отблагодарить за труды, вы можете перечислить донат на развитие проекта.

С уважением, редакция журнала Cyber-X

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Мы используем cookie-файлы для наилучшего представления нашего сайта. Продолжая использовать этот сайт, вы соглашаетесь с использованием cookie-файлов.
Принять
Отказаться
Политика конфиденциальности