Обзор
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
Коды завершения
Используйте при обработке ветвлений в скриптах.
Код | Значение |
---|---|
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. Подробная информация не будет выводиться.