Дайте мне хорошую политику, и я вам дам хорошие финансы (А. Тюрго).

Сравнение файлов построчно с помощью команды diff в Linux: руководство для начинающих

01.05.2025
Сравнение файлов построчно с помощью команды diff в Linux руководство для начинающих

Если вы работаете с текстовыми файлами в системах Linux или Unix, то рано или поздно столкнётесь с командой diff . Команда diff — один из самых полезных инструментов для сравнения двух файлов и поиска изменений. В этой статье мы объясним, что делает команда diff , как использовать её для сравнения двух файлов и поиска различий в Linux на примерах.

 

Что такое команда diff?

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

 

Использование команды Linux diff

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

diff [OPTION]… FILES

 

Пример:

diff file1.txt file2.txt

 

Эта команда сравнивает file1.txt и file2.txt и показывает различия построчно.

 

Понимание вывода различий

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

  • Строки, начинающиеся с <, указывают содержимое из первого файла.
  • Строки, начинающиеся с >, указывают содержимое из второго файла.
  • Числа (подобные 3c3) показывают номера строк, в которых произошли изменения.

 

Часто используемые флаги различий

ОтметитьОписание
-uУнифицированный формат (используется в патчах и Git)
-yПараллельное сравнение
-qТихий режим – сообщает только о различиях в файлах
-rРекурсивное сравнение каталогов
--exclude=PATTERNПропускать соответствующие файлы / каталоги
-iИгнорируйте различия в регистре
-wИгнорируйте все различия в пробелах
-bИгнорировать изменения в количестве пробелов

 

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

Допустим, у вас есть два файла, file1.txt и file2.txt, со следующим содержимым:

file1.txt:

Строка 1: Это первая строка.
Строка 2: Это вторая строка.
Строка 3: Это третья строка.
Строка 4: Это четвёртая строка.

 

file2.txt:

Строка 1: Это первая строка.
Строка 2: Это вторая строка, но изменённая.
Строка 3: Это третья строка.
Строка 4: Это четвёртая строка, но другая.

 

Чтобы сравнить содержимое этих двух файлов с помощью diff, просто запустите:

diff file1.txt file2.txt

 

Это сравнение file1.txt и file2.txt. Если файлы совпадают, ничего не отображается. Если они отличаются, программа сообщает, как привести один файл в соответствие с другим с помощью дополнений и удалений.

 

Пример вывода:

2c2
< Строка 2: Это вторая строка.
---
> Строка 2: Это вторая строка, но изменённая.
4c4
< Строка 4: Это четвёртая строка.
---
> Строка 4: Это четвёртая строка, но другая.

Объяснение выходных данных:

  • 2c2: Указывает на то, что изменение находится во второй строке обоих файлов (т. е. file1.txt и file2.txt). c указывает на изменение.
  • < Строка 2: Это вторая строка.: Строка из file1.txt.
  • ---: Разделитель.
  • Строка 2: Это вторая строка, но измененная.: Строка из file2.txt.
  • 4c4: Указывает, что изменение находится в строке 4 в обоих файлах.
  • Строка 4: Это четвертая строка.: Строка из file1.txt.
  • ---: Разделитель.
  • > Строка 4: Это четвертая строка, но другая.: Строка из file2.txt.

 

Читать  Как запустить многоадресный трафик в Iperf

Всё ещё не понятно? Хорошо. Давайте рассмотрим другой пример.

Создайте еще два файла, а именно file3.txt и file4.txt с некоторым случайным содержимым.

file3.txt:

Привет, мир! 
Это тест. 
Linux — это весело.

 

file4.txt:

Привет, мир! 
Это демонстрация. 
Linux — отличная система.

 

Как вы можете видеть в приведённых выше файлах, кроме первой строки, остальные строки отличаются. Давайте посмотрим, что команда diff выдаст в этом примере.

diff file3.txt file4.txt

 

Пример вывода:

2,3c2,3
< Это тест. 
< Linux — это весело. 
---
> Это демонстрация. 
> Linux — это здорово.

 

Позвольте мне объяснить приведенный выше вывод.

Как мы уже сказали, строки, начинающиеся с <, взяты из file3.txt, а строки, начинающиеся с >, — из file4.txt.

2,3c2,3 означает, что строки 2-3 в file3.txt были заменены (c) на строки 2-3 в file4.txt.

 

Основные примеры команд diff для начинающих

Вот несколько важных diff команд и опций:

1. Показать разницу между файлами

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

diff -u file1.txt file2.txt

 

Пример вывода:

--- file1.txt 2025-05-01 12:47:19.349888344 +0530
+++ file2.txt 2025-05-01 12:47:30.757065330 +0530
@@ -1,4 +1,4 @@
 Строка 1: Это первая строка.
-Строка 2: Это вторая строка.
+Строка 2: Это вторая строка, но изменённая.
 Строка 3: Это третья строка.
-Строка 4: Это четвёртая строка.
+Строка 4: Это четвёртая строка, но другая.
Сравните и покажите Разницу между Файлами с помощью команды Linux diff

2. Сравнение без учета регистра

-iФлаг в команде diff делает сравнение нечувствительным к регистру, то есть при сравнении файлов прописные (A-Z) и строчные (a-z) буквы будут считаться одинаковыми.

diff -i file1.txt file2.txt

 

Читать  4 способа как получить размер каталога в Linux

Вы можете комбинировать -i с другими флагами, например -w (игнорировать пробелы), для более гибкого сравнения.

 

3. Игнорируйте все различия в пробелах

Флаг -w игнорирует ВСЕ различия в пробелах при сравнении файлов, в том числе:

  • Пробелы ( )
  • Вкладки (\t)
  • Окончания строк (\r\n vs \n)
  • Любая комбинация / количество пробелов
diff -w file1.txt file2.txt

 

4. Игнорируйте изменения в количестве пробелов

Флаг -b игнорирует различия в количестве символов пробела (пробелов/табуляции), но по-прежнему учитывает наличие/положение пробелов.

diff -b file1.txt file2.txt

 

5. Параллельное сравнение

diff -y file1.txt file2.txt

 

-y сравнивает два текстовых файла, file1.txt и file2.txt, и показывает их различия рядом друг с другом.

 

Пример вывода:

Строка 1: Это первая строка. Строка 1: Это первая строка.
Строка 2: Это вторая строка. | Строка 2: Это вторая строка, но изменённая.
Строка 3: Это третья строка. Строка 3: Это третья строка.
Строка 4: Это четвёртая строка. | Строка 4: Это четвёртая строка, но другая.

6. Показывать только в том случае, если файлы отличаются

Вы можете использовать флаг -q (режим завершения) с командой diff для отображения только различий в файлах без вывода самих различий.

diff -q file1.txt file2.txt

 

Если файлы идентичны, он печатает:

Files file1.txt and file2.txt are identical

 

Если файлы разные, он печатает:

Files file1.txt and file2.txt differ

 

Он не показывает изменения построчно — только ответ «да» или «нет».

Это полезно, когда:

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

 

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

Команда diff может рекурсивно сравнивать файлы в двух каталогах с помощью флага -r.

diff -r dir1/ dir2/

 

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

  • Какие файлы отличаются
  • Какие файлы существуют в одном каталоге, но не в другом
  • Необязательно: конкретные различия в строках, как и в случае с отдельными файлами.

 

Пример вывода:

Only in dir2/: file3.txt
Only in dir2/: file4.txt

 

Это очень полезно, когда:

  • Вы проверяете, совпадают ли две резервные копии
  • Вы сравниваете поэтапный контент с развернутым
  • Вам нужен краткий обзор без полных различий
Читать  Устранение проблем с производительностью NFS с помощью nfsiostat и nfsstat

 

8. Исключите определенные файлы или типы файлов

Чтобы исключить определённые файлы или типы файлов при использовании diff -r для сравнения каталогов, можно использовать параметр --exclude.

 

Синтаксис:

diff -r --exclude=PATTERN dir1/ dir2/

 

  • PATTERN может быть именем файла, расширением файла или шаблоном подстановочных знаков.
  • Вы можете использовать это несколько раз, чтобы исключить разные шаблоны.

 

Давайте рассмотрим несколько примеров использования опции --exclude с командой diff .

 

1. Исключите все .log файлы:

diff -r --exclude='*.log' dir1/ dir2/

 

2. Исключите скрытые файлы (dotfiles).:

diff -r --exclude='.*' dir1/ dir2/

 

3. Исключить каталогnode_modules:

diff -r --exclude='node_modules' dir1/ dir2/

 

4. Объедините несколько исключений:

diff -r --exclude='*.log' --exclude='*.tmp' --exclude='backup' dir1/ dir2/

 

Примечание:

  • Шаблон --exclude соответствует имени файла или каталога (не полному пути).
  • Он чувствителен к регистру, если не используется с --ignore-case, что влияет только на содержимое строк, а не на пути.

 

9. Сравнение выходных данных команд

Вы можете использовать подстановку процессов для сравнения выходных данных команд:

diff <(ls dir1) <(ls dir2)

 

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

 

10. Понимание кодов выхода

diff может использоваться в скриптах. Возвращает:

  • 0 если файлы одинаковы
  • 1 если файлы отличаются
  • 2 если произошла ошибка (например, файл отсутствует)

 

Вы можете использовать это в if операторах в Bash.

 

11. Создание исправлений

Вы можете сохранить diff выходные данные в файл и применить их позже, используя patch:

diff -u old.txt new.txt > changes.patch
patch old.txt < changes.patch

 

Это полезно при разработке программного обеспечения, резервном копировании и изменении конфигурации.

 

12. Показать справку по команде Linux diff

Чтобы отобразить раздел справки, используйте --help.

diff --help

 

Когда не следует использовать команду diff

Для больших каталогов или в случаях, когда вам нужны контрольные суммы или детальный контроль, лучше использовать rsynccmp, или md5sumdiff лучше всего подходит для поиска текстовых различий, а не двоичных данных или задач, требующих высокой производительности.

 

Заключение

Команда diff — это простой, но мощный инструмент для сравнения файлов и каталогов в Linux. Как только вы разберётесь с форматом вывода и основными параметрами, вы поймёте, что она полезна для устранения неполадок, программирования и системного администрирования.

Попробуйте поэкспериментировать с diff на своих собственных файлах. Вскоре поиск различий станет вашей второй натурой!

Есть вопросы или советы по использованию diff? Пожалуйста, поделитесь ими в комментариях ниже!

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
Если статья понравилась, то поделитесь ей в социальных сетях:

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

**ссылки nofollow

Это может быть вам интересно


Загрузка...

Спасибо!

Теперь редакторы в курсе.

Scroll to Top