Главная > Обработка текста и поиск > diff

diff: Руководство по сравнению различий файлов/каталогов

Сравнивает различия между двумя объектами построчно и выводит их в удобочитаемом формате (унифицированный, контекстный, бок о бок). Широко используется для создания патчей, ревью кода и сравнения изменений конфигурации.

Обзор

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

Основные особенности

  • Построчное сравнение и предоставление удобочитаемого формата
  • Возможность рекурсивного сравнения между каталогами (-r)
  • Различные правила игнорирования, такие как пробелы/регистр/пустые строки
  • Поддержка унифицированного формата (-u), подходящего для создания патчей (.patch)
  • Предоставление опций для оптимизации производительности при сравнении больших файлов

Примеры сценариев использования

  • Ревью кода: извлечение только измененных файлов в виде патча
  • Отслеживание изменений в файлах конфигурации: сравнение настроек до и после развертывания
  • Сравнение резервных копий/снимков: проверка различий между определенными моментами времени
  • Обнаружение непреднамеренных изменений на этапе предварительной обработки документов/данных
  • Проверка безопасности: выявление подозрительных изменений в двоичных файлах/скриптах, развернутых извне

Форматы вывода diff

Формат вывода diff представляет собой инструкции по изменению первого файла во второй.

  • `a` (add): Строка, отсутствующая в первом файле, была **добавлена** во второй файл. (Пример: `1a2`)
  • `c` (change): Соответствующая строка была **изменена** в обоих файлах. (Пример: `1c2`)
  • `d` (delete): Строка, присутствующая в первом файле, была **удалена** из второго файла. (Пример: `1d2`)

Основные опции

Часто используемые опции сгруппированы по назначению.

1) Основное поведение и форматы вывода

2) Определение области/цели сравнения

3) Управление выводом/Правила игнорирования

4) Справка/Версия

Сгенерированная команда:

Комбинируйте команды.

Описание:

`diff` Запускает команду.

Комбинируйте эти опции, чтобы виртуально выполнять команды с помощью ИИ.

Примеры использования

Примеры часто используемых сценариев сравнения.

Создание патча в унифицированном формате

diff -u old.conf new.conf > change.patch

Рекурсивное сравнение каталогов

diff -ruN ./v1 ./v2

Сравнение с игнорированием различий в пробелах

diff -uw src_old.c src_new.c

Просмотр бок о бок + скрытие общих строк

diff -y --suppress-common-lines a.txt b.txt

Коды завершения

Используйте при обработке ветвлений в скриптах.

Коды завершения diff
Код Значение
0 Объекты идентичны
1 Есть различия
2 Произошла ошибка (ошибка использования/недоступность файла и т.д.)

Установка

В большинстве дистрибутивов включен по умолчанию, но если нет, установите пакет diffutils.

Debian/Ubuntu

sudo apt update && sudo apt install -y diffutils

RHEL/CentOS/Fedora

sudo dnf install -y diffutils

Arch Linux

sudo pacman -S --needed diffutils

openSUSE

sudo zypper install -y diffutils

Советы и примечания

Часто упускаемые моменты в практическом применении.

  • Формат патчей обычно использует -u в качестве стандарта. Git также внутренне использует аналогичный унифицированный формат.
  • Злоупотребление опциями обработки пробелов (-w, -b, -B) может скрывать действительно значимые изменения.
  • Различия в символах конца строки между Windows и Linux можно нормализовать с помощью --strip-trailing-cr для упрощения сравнения.
  • При сравнении каталогов используйте -r вместе с -x/-X (правила исключения) для фильтрации ненужных файлов.
  • Если вам нужно быстро проверить только наличие различий, используйте опцию -q. Подробная информация не будет выводиться.

Связанные команды

Функционально схожие или часто используемые команды.


Те же команды в категории