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

Команда diff в Linux — как сравнивать файлы в терминале

• 5 min read • Linux • Обновлено 22 Nov 2025
diff в Linux — сравнение файлов в терминале
diff в Linux — сравнение файлов в терминале

Сравнение файлов в терминале: пример вывода команды diff

Введение

Если вы работаете в Linux без графического интерфейса, привычные GUI-инструменты для сравнения файлов (например, Gedit или Meld) недоступны. В таких условиях приходят на помощь консольные утилиты. Наиболее базовая и повсеместно доступная — команда diff. Она проста по принципу, но её вывод требует небольшого обучения.

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

Важно: diff ориентирован на текстовые файлы. Для бинарных данных используйте cmp или специализированные инструменты.

Синтаксис

diff [OPTION]... FILES
  • OPTION — опции команды (например, -u для unified-формата).
  • FILES — два сравниваемых файла (обычно: оригинал и изменённый).

Для полной документации можно использовать texinfo-версию, если она установлена:

info diff

Как читать вывод diff — основные принципы

Вывод diff описывает набор изменений, необходимых для преобразования первого файла в второй. Общая структура:

  • Каждая группа изменений начинается с строки вида N[a|d|c]M или N1,N2[a|d|c]M1,M2.
    • Первая часть (до буквы) — номер(ы) строки в первом файле (оригинал).
    • Буква: a — added (добавить), d — deleted (удалить), c — changed (заменить).
    • Вторая часть — номер(ы) строки во втором файле (новый).
  • После этой строки идут конкретные строки:
    • Строки из первого файла начинаются с ‘<’.
    • Строки из второго файла начинаются с ‘>’.
    • Разделитель между ними — строка с ‘—‘.

Пример и объяснение ниже помогут закрепить понимание.

Простой пример

file1:

test
 test2
 test3

file2:

test
 test23
 test3

Команда:

diff file1 file2

Вывод:

2c2
< test2
---
> test23

Разбор: 2c2 означает, что строка 2 в первом файле заменена на строку 2 во втором файле. Строки с ‘<’ и ‘>’ показывают старую и новую версии.

Пример с диапазонами

file1:

Hi all,
This is a diff command tutorial
from HowtoForge.
Hope you'll benefit from it.
Thanks.

file2:

Hi all,
Welcome to HowtoForge.
In this tutorial, we'll discuss the diff tool.
Hope you'll find it beneficial.
Thanks.

Команда и вывод:

diff file1 file2
2,4c2,4
< This is a diff command tutorial
< from HowtoForge.
< Hope you'll benefit from it.
---
> Welcome to HowtoForge.
> In this tutorial, we'll discuss the diff tool.
> Hope you'll find it beneficial.

Разбор: 2,4c2,4 означает, что строки 2–4 первого файла заменяются на строки 2–4 второго файла.

Добавление и удаление блоков

Если во втором файле вставлен новый блок до существующих строк, diff покажет операцию добавления с номером 0 в первом файле:

Пример вывода при вставке в начало:

0a1,5
> Welcome to HowtoForge.
> In this tutorial, we'll discuss the diff tool.
> Hope you'll find it beneficial.
> Thanks.
>

0a1,5 означает: в первый файл нужно добавить (append) строки 1–5 из второго файла перед началом содержимого.

Если после этого требуется удалить строку из первого файла, появится операция удаления, например:

4d8
< Thanks.

4d8 читается как: строка 4 первого файла должна быть удалена, чтобы синхронизировать файлы до положения вокруг строки 8 второго файла.

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

  • sdiff — показывает различия рядом друг с другом в колонках; удобно для визуального сравнения в терминале.
  • vimdiff — использует vim и подсвечивает различия; полезно для редактирования при сравнении.
  • diff -u — unified формат, часто используемый в патчах и git.
  • git diff — если файлы находятся в git-репозитории, даёт контекст и интеграцию с историей.
  • cmp — быстрый побайтовый сравнение бинарных файлов.

Важно: цветные обёртки типа colordiff делают вывод diff читаемее, но не меняют смысл.

Пример: unified diff и применение патча

Unified-формат (-u) даёт контекст вокруг изменений. Пример:

diff -u file1 file2 > changes.patch

Результат можно применить с помощью patch:

patch file1 < changes.patch

Это полезно при отправке исправлений или обмене патчами.

Когда diff не подойдёт

  • Бинарные файлы: diff ориентирован на текст. Для бинарных используйте cmp или специализированные средства.
  • Большие файлы без контекста: вывод может быть громоздким; используйте -U N для увеличения контекста или фильтруйте вывод.
  • Семантические отличия: diff сравнивает строки, но не смысл. Для семантического сравнения кода используйте статический анализ или форматирование перед сравнением.

Быстрые рекомендации и приёмы (cheat sheet)

  • Базовый запуск: diff old new
  • Показывать только, отличаются ли файлы: diff -q old new
  • Unified формат (патчи): diff -u old new
  • Игнорировать пробелы: diff -w old new
  • Показать различия в виде колонок: sdiff old new
  • Цветной вывод: colordiff old new (если установлен)

Пошаговая методика для рутинной работы

  1. Скопируйте файлы в рабочую папку.
  2. Сначала выполните diff -q, чтобы понять, отличаются ли файлы.
  3. Если отличаются, используйте diff -u для патча или sdiff для визуального сравнения.
  4. Примените patch или внесите правки в редакторе (vimdiff удобен для одновременного редактирования).
  5. Повторите diff, чтобы убедиться, что файлы синхронизированы.

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

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

    • Проверил, что файлы текстовые.
    • Использовал diff -q для быстрой проверки.
    • При необходимости применил patch и проверил сервисы.
  • Разработчик:

    • Использовал diff -u для создания патча.
    • Проверил код линтером/форматером до сравнения.
    • Протестировал изменения локально.
  • Ревьювер:

    • Изучил diff -u с достаточным контекстом.
    • Убедился, что изменения малоблоковые и понятные.
    • Попросил доработки при неочевидных изменениях.

Ментальные модели: как думать о diff

  • «Инструкции преобразования»: думайте о выводе как о пошаговом рецепте, как сделать первый файл вторым.
  • «Контекст важнее содержания»: наличие соседних строк помогает понять смысл изменения.
  • «Строки ≠ смысл»: строки могут отличаться из‑за форматирования, не из‑за логики.

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

  • Вывод diff не содержит несоответствий после правок.
  • Для текстовых файлов diff возвращает отсутствие различий.
  • Для патчей patch применился без ошибок.

Короткий глоссарий

  • diff — утилита сравнения файлов построчно.
  • unified diff — формат с контекстными строками, удобный для патчей.
  • patch — утилита для применения unified-диффов.
  • sdiff — бок о бок сравнение в терминале.
  • cmp — побайтовое сравнение (для бинарных файлов).

Заключение

Вывод diff может показаться запутанным сначала, но он следует простой логике: какие строки удалить, добавить или заменить. Освоив чтение строк вида 2c2, 0a1,5 или 4d8, вы сможете эффективно сравнивать файлы на чистом CLI. Для повседневных задач используйте сочетание diff, sdiff и vimdiff; для обмена исправлениями — diff -u и patch.

Примечание: это руководство даёт базу. В man-странице и info diff вы найдёте дополнительные опции и более сложные сценарии.

Ключевые шаги: начните с diff -q, затем diff -u или sdiff по необходимости, и применяйте patch при обмене исправлениями.

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

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

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро