img

Linux: команда diff – как сравнить два файла и применить изменения с помощью команды patch

Представьте, что одним прекрасным днем вы просыпаетесь и понимаете, что ваш программный комплекс не работает, в нем есть ошибка, которую необходимо найти. Такое и в страшном сне не присниться.  

Кроме того, вы понимаете, что вам нужно сравнить код двух версий, и вы вынуждены вернуться к предыдущей версии системы. Все паникуют, и это абсолютно нормально!

Благо, есть такая утилита Linux под названием diff, которая прикроет вашу спину.

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

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

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

Помимо команды diff, у Linux также есть еще одна команда, с помощью которой вы можете применить изменения одного файла к другому, и это команда patch. В этой статье мы подробно рассмотрим эти многофункциональные и крайне интересные команды, чтобы узнать, как их можно применять.

Синтаксис команды diff

Ниже представлен синтаксис команды diff:

diff [options] file1 file2

Синтаксис diff

В зависимости от изменений, команда diff может отображать три символа:

Символ

Значение

c

CHANGE – необходимо внести изменения.

d

DELETE – необходимо что-то удалить.

a

ADD – необходимо что-то добавить. 

В выводе команды diff символ < указывает на первый файл, а символ > - на второй, который используется в качестве ссылки. 

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

Примеры использования команды diff

Для того, чтобы показать, что файлы одинаковы, вместе с командой diff мы используем флаг -s. В данном примере два файла (fileA и sameAsfileA) имеют одинаковое содержимое. 

image-63

В следующем примере у нас есть два файла, содержимое которых отличается. В выводе, продемонстрированном ниже, команда diff показывает, что в файле showList_v2.js необходимо изменить строки с номерами 11 и 14, чтобы они соответствовали строкам с номерами 11 и 13 в файле showList_v1.js.

image-64

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

Просто воспользуйтесь флагом -y, как показано ниже:

diff -y file1 file2

image-50

Наглядное сравнение файлов

Последний пример, который бы я хотел привести – это пример унифицированного вывода. Эти выходные данные зачастую используются в качестве входных данных для команды patch. Заодно мы посмотрим, как работает команда patch:

image-67

Унифицированный вывод, который используется в качестве входных данных для команды patch

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

  • -i - флаг позволяет игнорировать регистр. По умолчанию команда diff чувствительна к регистру. 
  • -w - флаг позволяет игнорировать пробелы в файле. По умолчанию пробелы тоже сравниваются.

Синтаксис команды patch

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

Использование команды patch - это самый безопасный способ передачи этих исправлений. 

Давайте взглянем, как работает команда patch:

patch file_to_change < patch_file

Синтаксис команды patch

Примеры использования команды patch

Вот пример внесения исправлений: допустим, что у нас есть простой код JavaScript [имя файла: print_in_js,js], который печатает строку.

image-68

И все-таки в этой функции печати что-то не так, и для того, чтобы выяснить, что именно, нам нужно провести тестирование. Отправляем файл print_in_js,js нашему коллеге, он его исправляет и отправляет обратно нам. 

Для начала наш коллега находит неправильный тип в строке под номером 3. Он исправляет файл. 

После того, как он исправил файл и убедился, что код работает, он создает «заплатку». 

diff -u print_in_js.js  print_in_js_Fixed.js > patched_print_js.diff

Создание «заплатки»

Давайте проверим содержимое этой «заплатки»:

image-69

Содержимое «заплатки»

Теперь, когда у нас есть «заплатка», мы можем ее применить:

patch print_in_js.js  < patched_print_js.diff

Применение «заплатки»

image-72

Исправленный код после применения «заплатки»

И да, наш код исправлен!

Заключение

Создавать и применять «заплатки» с помощью команд patch и diff довольно легко.  Аналогичный подход используют системы контроля версий, например, Git или SVN. Изучив основы, вы с легкостью сможете понять, как работает контроль версий, и начать его использовать, ведь именно он является важным аспектом разработки программного обеспечения.

Ссылка
скопирована
Программирование
Скидка 25%
Python Advanced. Продвинутый курс
Освойте асинхронное и метапрограммирование, изучите аннотацию типов и напишите собственное приложение на FastAPI. Улучшите свои навыки Python, чтобы совершить быстрый рост вашего грейда до уровня middle.
Получи бесплатный
вводный урок!
Пожалуйста, укажите корректный e-mail
отправили вводный урок на твой e-mail!
Получи все материалы в telegram и ускорь обучение!
img
Еще по теме:
img
  Больше всего WebSocket-серверы подходят для коммуникационных соединений реального времени, так как они обходят ограничения
img
  Python – это один из самых популярных языков программирования, предназначенных для управления и анализа данных. Одна из его си
img
  В этой статье мы поговорим с вами о том, что такое отладка, как отлаживать код и как можно оптимизировать данный процесс.
img
Подмодули Git – это способ добавления одного репозитория Git в качестве подкаталога другого репозитория. Такая вложенная структу
img
  Отслеживание версий программного обеспечения – довольно сложная задача, и Git помогает с ней справиться. С помощью теговой сис
img
  Переменные CSS – это пользовательские переменные, которые вы можете создавать самостоятельно и использовать многократно в
Комментарии
ЛЕТНИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59