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

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

5 min read Linux Обновлено 17 Dec 2025
Как сравнить файлы в Linux с помощью diff
Как сравнить файлы в Linux с помощью diff

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

Что такое diff?

diff — это утилита, которая показывает различия между двумя текстовыми файлами. Название происходит от английского слова “difference”. diff включён в POSIX-стандарт, поэтому доступен практически во всех Unix-подобных системах: на большинстве дистрибутивов Linux, на macOS и BSD.

Если у вас полноценный дистрибутив, скорее всего, вы видите GNU diffutils. В минимальных системах diff может входить в состав BusyBox или Toybox; в BSD — как отдельная реализация. Просмотреть версию и руководство можно через команду:

man diff

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

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

diff file1 file2

Вывод показывает блоки различий. Строки из первого файла помечаются символом “<”, из второго — “>”. Перед блоком указывается операция и номера строк: например, “1c1” означает “начиная с строки 1, изменить строку 1”. Буквы в этих обозначениях означают:

  • a — append (вставить/добавить)
  • c — change (заменить)
  • d — delete (удалить)

Пример: пусть file1 содержит:

Hello
World
Goodbye

а file2 содержит:

Hello
Earth
Goodbye

Команда diff file1 file2 выдаст примерно:

2c2
< World
---
> Earth

Это читабельно и полезно при ручном анализе изменений.

Вывод команды diff

Сравнение рядом и unified-формат

Чтобы увидеть файлы рядом (side-by-side), используйте опцию -y:

diff -y file1 file2

Это удобно для визуального сличения строк в виде двух колонок.

Вывод diff -y

Опция -u генерирует unified diff — компактный контекстный формат, который часто используют для патчей и для отправки изменений по почте:

diff -u file1 file2 > changes.patch

Unified-вывод содержит строки контекста и метки добавления/удаления (+/-). Исторически такой формат широко использовался в open-source: разработчики присылали .patch-файлы по email, а получатель применял их командой patch.

Вывод diff -u

Применение патчей и рабочий процесс

Типичная последовательность для создания и применения патча:

  1. Подготовьте чистую рабочую директорию и внесите изменения в локальные файлы.
  2. Создайте unified-патч:
diff -u original/file.c modified/file.c > myfix.patch
  1. Отлично: теперь отправьте myfix.patch или примените локально:
patch -p0 < myfix.patch

Или, если вы используете Git:

git apply myfix.patch

Важно: перед применением патча убедитесь, что контекст совпадает (строки вокруг изменений не сильно изменились), иначе patch сообщит конфликт.

Ограничения и случаи, когда diff не подойдёт

Important: diff работает с текстом. Он плохо подходит для бинарных файлов (например, изображений, PDF, сжатых архивов) — для них используйте специальные инструменты сравнения или конвертируйте в текстовый формат (например, hexdump).

Другие ограничения:

  • Порядок строк. diff выявляет изменения по строкам. Если строки просто переупорядочены, diff покажет удаление и добавление, а не «перемещение».
  • Различия в пробелах и окончаниях строк. Для игнорирования пробельных различий используйте опции:
    • -w — игнорировать все различия в пробелах
    • -b — игнорировать различия в количестве пробельных символов
    • -B — игнорировать пустые строки
    • -a — считать бинарные файлы как текстовые (с осторожностью)
  • Различия в кодировке и окончаниях строк (CRLF vs LF) тоже могут мешать; применяйте dos2unix или –strip-trailing-cr при необходимости.

Если вам нужно понимать перемещения блоков кода или семантические изменения, лучше подходят инструменты анализа AST или системное сравнение в VCS (git diff с опциями или специализированные дифф-инструменты).

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

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

Выбор зависит от задач: для простых проверок достаточно diff; для слияний и обзора кода — Git и графические инструменты.

Быстрый чек-лист для разработчика

  • Перед созданием патча: зафиксируйте состояние репозитория или отпишите текущие изменения.
  • Для человекочитаемых патчей используйте diff -u.
  • Проверяйте патч локально: patch -p0 < myfix.patch или git apply --check myfix.patch.
  • Для визуального сравнения используйте diff -y или GUI-инструмент.
  • Игнорируйте пробелы при форматных правках: diff -w.

Шпаргалка команд

  • diff file1 file2 — базовое сравнение
  • diff -y file1 file2 — вывод рядом (side-by-side)
  • diff -u file1 file2 — unified diff (патч)
  • diff -w / -b / -B — игнорировать пробельные различия
  • diff –strip-trailing-cr — удалить завершающие CR (если поддерживается)
  • patch -p0 < file.patch — применить патч
  • git apply file.patch — применить патч в Git

Мини-методология: как подготовить понятный патч

  1. Сделайте минимальные и атомарные изменения (одна логическая правка — один патч).
  2. Оставляйте контекст (не удаляйте лишние строки вокруг изменения).
  3. Используйте diff -u для генерации патча.
  4. Протестируйте патч локально и выполните git apply --check перед отправкой.
  5. В описании патча укажите цель и кратко — ключевые изменения.

1-строчный глоссарий

  • Unified diff — компактный контекстный формат патча с метками +/-.
  • Side-by-side — визуальное расположение сравниваемых строк в двух колонках.
  • Patch — файл, содержащий изменения, применяемые программой patch или git apply.

Итоги

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

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

Ключевые выводы:

  • diff показывает точечные отличия строк; -u и -y — самые полезные опции.
  • Для создания патчей используйте diff -u и применяйте patch/git apply.
  • При проблемах с пробелами и окончаниями строк применяйте специальные опции или преобразование формата.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

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

Как исправить чёрный экран на Chromebook
Устройства

Как исправить чёрный экран на Chromebook

Как сбросить контроллер PS5 — быстро и просто
Гейминг

Как сбросить контроллер PS5 — быстро и просто

Решение ошибок установки Microsoft 365 и Office 2021
Технологии

Решение ошибок установки Microsoft 365 и Office 2021

VirtualBox и Windows 10 на macOS — установка
Виртуализация

VirtualBox и Windows 10 на macOS — установка

Как узнать, кто подключён к вашей Wi‑Fi сети
Сеть

Как узнать, кто подключён к вашей Wi‑Fi сети

PuTTY на Linux: установка и использование
Linux

PuTTY на Linux: установка и использование