Гид по технологиям

Как сравнивать файлы в Linux с помощью diff

5 min read Dev Tools Обновлено 12 Apr 2026
Сравнение файлов в Linux с diff
Сравнение файлов в Linux с diff

Женщина сравнивает два бумажных документа

Что такое diff?

diff — это утилита для поиска и отображения различий между двумя текстовыми файлами. Одним предложением: diff показывает, какие строки отличаются между двумя версиями текста.

Ключевая идея: diff не изменяет файлы сам по себе — он описывает различия в виде набора операций (append, change, delete), которые при желании можно применить автоматически.

Важно: diff реализован в рамках POSIX, поэтому присутствует почти во всех Unix-подобных системах (Linux, macOS, BSD). На большинстве дистрибутивов Linux доступна GNU-версия; на минимальных — реализация из BusyBox/Toybox.

Чтобы узнать, какая версия у вас установлена, откройте man:

man diff

Быстрое сравнение двух файлов

Чтобы сравнить два текстовых файла, просто передайте их пути как аргументы:

diff file1 file2

Вывод показывает строки, отличающиеся между двумя файлами. Строки из первого файла помечаются символом «<», строки из второго — «>». Дополнительно diff использует коды операций: a — add (добавить/append), c — change (изменить), d — delete (удалить). Например, 1c1 означает «в строке 1 первого файла изменить на строку 1 второго файла».

Пример типичного вывода:

1c1
< old line
---
> new line

Это говорит: заменить old line на new line.

Режимы отображения и полезные опции

  • Side-by-side (побочно): показывает файлы в двух колонках. Удобно для быстрого визуального сравнения.
diff -y file1 file2
  • Unified (объединённый, наиболее распространённый формат патчей): показывает контекстные строки и изменения в виде «hunk» — используется для создания патчей, которые легко читать и применять.
diff -u file1 file2

Вывод diff -u с подсветкой изменений

Опция -u часто используется в открытых проектах: авторы отправляют такие патчи по email, а получатели применяют их через patch или git apply.

Другие полезные флаги:

  • -r — рекурсивное сравнение директорий.
  • -q — кратко: сообщает только, разные ли файлы.
  • --strip-trailing-cr — игнорировать различия в символах перевода строки CR (полезно при смешанных CRLF/LF).
  • --ignore-all-space / --ignore-space-change — игнорировать пробелы/табуляции.

Создание и применение патчей

Создать unified-патч:

diff -u original.c modified.c > changes.patch

Применить патч с помощью программы patch:

patch < changes.patch

Или через Git (если патч совместим):

git apply changes.patch

Совет: перед применением патча всегда просмотрите содержимое changes.patch и протестируйте изменения в изолированной ветке.

Когда diff не подходит — ограничения и подводные камни

  • Бинарные файлы: базовый diff предназначен для текста; для двоичных данных нужны специальные инструменты (например, bsdiff, cmp, hexdump).
  • Большие файлы: при работе с очень большими файлами вывод может быть громоздким и медленным.
  • Порядок строк: diff чувствителен к порядку. Для сравнения наборов строк без порядка нужны другие подходы (сортировка + diff или специализированные утилиты).
  • Различия в кодировке и окончаниях строк (CRLF vs LF) могут давать ложные изменения — используйте фильтрацию или опции для игнорирования пробелов/концов строк.

Когда diff «не работает»: если требуется семантическое сравнение кода (изменение имени переменной без смысловой нагрузки, переструктурирование функций и т. п.), стоит использовать инструменты статического анализа или специализированные diff-движки для AST.

Альтернативы и сопутствующие инструменты

  • git diff — встроенный в Git, понимает контекст репозитория и индекс.
  • meld, kdiff3, beyond compare — графические инструменты для наглядного сравнения и слияния.
  • vimdiff — сравнениe в терминале с возможностью редактирования.
  • diff3 — для трёхстороннего слияния (полезно при конфликте).
  • colordiff — вывод diff с цветами для удобства чтения в терминале.
  • Онлайн-сервисы — удобно для быстрой проверки без установки.

Выбор зависит от сценария: для единичного сравнения подойдёт diff; для работы с историей и ветвлением — git diff; для визуального слияния — meld/vimdiff.

Ментальные модели и мини‑методология

Ментальная модель: думайте о diff как о рецепте преобразования — он описывает шаги, чтобы превратить file1 в file2.

Короткая методология при внесении изменений в проект:

  1. Локально сделайте изменения и проверьте их.
  2. Создайте unified-патч: diff -u original modified > changes.patch.
  3. Просмотрите патч: less changes.patch.
  4. Примените патч в целевой среде и запустите тесты.
  5. Во время ревью используйте diff -u или git diff для удобства.

Шпаргалка (cheat sheet)

КомандаЧто делает
diff file1 file2Базовое сравнение двух файлов
diff -y file1 file2Side-by-side сравнение
diff -u file1 file2Unified diff (патч)
diff -r dir1 dir2Рекурсивное сравнение директорий
diff --ignore-all-spaceИгнорировать все пробелы
patch < changes.patchПрименить патч

Пример быстрого рабочего процесса:

# создать патч
diff -u old.txt new.txt > fix.patch
# просмотреть патч
less fix.patch
# применить патч
patch < fix.patch

Ролевые чек-листы

Разработчик:

  • Сделать минимальные, тестируемые изменения.
  • Создать diff -u и проверить его.
  • Добавить поясняющий комментарий к патчу.

Ревьюер:

  • Применить патч в отдельной ветке или рабочем каталоге.
  • Проверить читаемость, безопасность, отсутствие побочных эффектов.
  • Запустить локальные тесты и линтеры.

Системный администратор:

  • Использовать diff -r для сравнения конфигураций.
  • Игнорировать служебные файлы и бэкапы при сравнении.

Критерии приёмки

  • Патч читаем и содержит минимально необходимые изменения.
  • Тесты проходят локально и в CI.
  • В документации или в описании коммита указана цель изменений.

Важно: не применять патчи без резервного копирования критичных системных файлов.

Заключение

diff — простой, но мощный инструмент для сравнения текста. Он остаётся полезным даже в эпоху распределённых систем контроля версий: diff -u формирует универсальные патчи, а diff -y облегчает визуальную оценку отличий. Для нетекстовых или семантически сложных сравнений используйте специализированные инструменты.

Краткое резюме

  • diff показывает строковые различия и поддерживает режимы side-by-side и unified.
  • Unified-формат удобен для создания патчей и коллективной работы.
  • Если требуется семантический анализ или работа с бинарными файлами, подберите альтернативу.

Примечание: если вы предпочитаете GUI или интегрированные инструменты, попробуйте meld, vimdiff или возможности сравнения в вашей IDE.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Фоны для портретов в Midjourney
Фотография

Фоны для портретов в Midjourney

Линия тренда в Google Sheets
Таблицы

Линия тренда в Google Sheets

Распознавание речи на Mac — настройка и советы
macOS

Распознавание речи на Mac — настройка и советы

Добавить панели настроек в Dock macOS
macOS

Добавить панели настроек в Dock macOS

Установка расширений в браузерах без магазина
Браузеры

Установка расширений в браузерах без магазина

Прокачайте Kindle с помощью IFTTT
Чтение

Прокачайте Kindle с помощью IFTTT