Как пользоваться патчем для Linux

Обновлено: 03.07.2024

Бывший автор Lifewire Юрген Хаас – разработчик программного обеспечения, специалист по данным и поклонник операционной системы Linux.

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

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

Процесс исправления

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

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

Затем полученный файл различий изменяет исходный код с помощью инструмента исправления.

Применение исправлений: пример

Рассмотрите типичную программу "Hello World". Исходный код на C выглядит так:

Чтобы изменить распечатываемое сообщение на Привет, вселенная!, разработайте альтернативную версию кода следующим образом:

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

Вы увидите, что файл исправления выглядит следующим образом:

В файле исправления перечислены все сравниваемые файлы. Он предлагает символы --- и +++, идентифицирующие каждое имя файла с датой его последней редакции. Затем он суммирует расположение изменений между парой символов @@. Наконец, он перечисляет исходный код, помечая различные строки отмеченными символами плюса и минуса. Как правило, знак "минус" указывает на то, что строка удалена в пропатченном файле, а знак "плюс" представляет собой замену, если строка будет заменена.

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

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

Чтобы отменить исправление, используйте параметр -R:

Соображения

Такой подход к исправлению исходного кода встречается реже, чем раньше. Современные системы управления исходным кодом, такие как Git и Subversion, автоматически управляют версиями с течением времени, в том числе в различных ветвях разработки и тестирования, так что ручная проверка различий и исправление файлов теперь управляются инструментом контроля версий. Если вы должны следовать формальной структуре кодирования или соответствовать стандартам командного кодирования, вместо этого используйте такой инструмент, как Git.

Однако один из эффективных вариантов использования системы сравнения и исправления на локальном компьютере связан с изменением всего каталога файлов. Например, если вы разработали веб-сайт, но вам нужно внести изменения только в одну строку (например, в строку об авторских правах), система обновит все эти страницы одновременно.

«Заплатка» — это команда для добавления файлов заплат в исходный код или текстовые файлы. Он принимает входные данные в виде файла исправления и применяет различия к исходным файлам. Мы используем инструмент «diff», чтобы получить разницу.

"diff" (сокращенно "differences") используется для сравнения содержимого двух файлов и перечисления изменений в стандартном выводе.

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

В этом руководстве показано, как использовать команду «diff» для создания файла исправления, а затем применить его с помощью команды «patch».

Синтаксис:

Синтаксис команды «исправить» следующий:

$ патч [параметры] [исходный файл [файл патча]]

$ patch -pnum файл исправления >

Создание файла исправления с помощью «diff»:

Файл исходного кода 1:

Во-первых, для создания файла исправления требуются две разные версии исходного кода. Созданный мной файл исходного кода называется «myfile.c»:s

printf("Привет, LinuxHint\n");


Файл исходного кода 2:

Теперь скопируйте содержимое myfile.c в new_myfile.c, используя:

Внесите некоторые изменения во вновь созданный файл:

printf("Привет Linux подсказка");

printf("Добро пожаловать в linuxhint");


Проверка различий:

Давайте создадим файл исправления с именем myfile.patch:


Вы можете распечатать файл исправления, выполнив следующую команду:


Применение файла исправления:

Чтобы применить патч, используйте:


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

Сделайте резервную копию перед применением исправления:

Используйте параметр «-b» для создания резервной копии файла исправления:


Установка версии файла резервной копии

Если вам нужно несколько резервных копий одного файла резервной копии, используйте параметр «-V». Он устанавливает номер версии каждого файла резервной копии. Выполните приведенную ниже команду:


Проверка файлов исправлений

Если вы хотите проверить или понаблюдать за результатом исправления, используйте параметр «–пробный запуск». Он не вносит никаких изменений в исходный файл:

Отменить/отменить исправление

Опция "-R" используется для отмены или отмены уже примененного исправления.

$ patch –R myfile.patch


Вывод:

В операционной системе Linux «заплатка» — это команда, которая позволяет нам применять файлы заплат к исходным кодам или файлам конфигурации. Файл исправления используется для обновления программного обеспечения. Разница между исходным и новым файлами хранится в файлах исправлений, и для получения разницы или исправления используется команда «diff». Мы обсудили использование команд «diff» и «patch» с рядом параметров, таких как создание резервных копий, пробный запуск и отмена примененного исправления.

Об авторе

Акса Макбул

Как инженер-программист, я с удовольствием пишу о различных
статьях, связанных с ИТ, но глубоко интересуюсь Linux. Я провожу большую часть своего времени за чтением блогов, связанных с Linux, и книг, связанных с ИТ. Я хочу служить миру своими писательскими способностями.

Когда для определенного программного обеспечения доступно исправление безопасности, мы обычно выполняем бинарное обновление с помощью инструментов управления пакетами, таких как yum или apt-get.

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

Как в такой ситуации применить исправление безопасности к программному обеспечению?

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

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

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

1. Создайте файл исправления, используя diff

Чтобы понять это, давайте создадим небольшую программу на C с именем hello.c

Теперь скопируйте hello.c в hello_new.c

Внесите небольшие изменения в файл hello_new.c, как показано ниже:

Наконец, создайте файл исправления с помощью команды diff, как показано ниже:

Приведенная выше команда создаст файл исправления с именем «hello.patch».

2. Применить файл исправления с помощью команды исправления

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

Используйте команду patch, как показано ниже, чтобы применить hello.patch к исходному исходному коду hello.c.

Файл hello.patch содержит имя файла для исправления. После того, как файл будет исправлен, и hello.c, и hello_new.c будут иметь содержимое.

3. Создание исправления из исходного дерева

Приведенный выше пример настолько прост, что работает только с одним файлом. Мы увидим, как создать и применить патч для всего исходного дерева, взяв в качестве примера исходный код «openvpn».

Я скачал 2 версии openvpn, openvpn-2.3.2 и openvpn-2.3.4.

Теперь мы создадим патч с помощью следующей команды.

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

4. Применить файл исправления к дереву исходного кода

Для применения исправления к исходному дереву можно использовать следующие команды исправления.

Обратите внимание, что мы выполняем команду из /usr/src/. Файл исправления содержит все имена файлов в формате абсолютного пути (от корня). Поэтому, когда мы выполняем из /usr/src без опции «-p», это не будет работать должным образом.

-p3 указывает команде исправления пропустить 3 начальных косых черты в именах файлов, присутствующих в файле исправления. В нашем случае имя файла в файле патча — «/usr/src/openvpn-2.3.2/aclocal.m4», так как вы указали «-p3», 3 начальных косых черты, то есть до тех пор, пока /usr/src/ не будет проигнорировано.

5.Сделайте резервную копию перед применением исправления, используя -b

Вы можете сделать резервную копию исходного файла перед применением команды исправления, используя параметр -b, как показано ниже.

Теперь у вас будет имя файла «hello.c.orig», которое является резервной копией исходного файла hello.c.

Вы также можете использовать -V, чтобы выбрать формат имени файла резервной копии, как показано ниже. Теперь у вас будет имя файла «hello.c.~1~».

6. Проверка исправления без применения (пробный файл исправления)

Вы можете выполнить пробный запуск команды patch, чтобы увидеть, возникают ли какие-либо ошибки, без исправления файла с помощью параметра –dry-run, как показано ниже.

Вы видите, что hello.c вообще не изменился.

7. Отменить уже примененное исправление (отменить исправление)

Вы можете использовать параметр -R, чтобы отменить уже примененное исправление.

По размеру файла вы можете заметить, что исправление, которое уже было применено, перевернуто, когда мы использовали параметр -R.

Patch — это команда, которая используется для применения файлов исправлений к таким файлам, как исходный код, конфигурация. Файлы исправлений содержат разницу между исходным файлом и новым файлом. Чтобы получить разницу или патч, мы используем инструмент diff.

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

Справка

Справка

Теперь на этом шаге мы создадим файл патча, но нам нужен простой исходный код с двумя разными версиями. Мы называем имя файла исходного кода myapp.c .

myapp_old.c

myapp.c

Теперь мы создадим файл исправления с именем myapp.patch .

Создать файл исправления

Создать файл исправления

Мы можем распечатать файл myapp.patch с помощью следующей команды

Теперь у нас есть файл исправления, и мы предполагаем, что мы передали этот файл исправления в систему, которая содержит старый исходный код с именем myapp_old.patch . Мы просто применим этот патч-файл. Вот что содержит файл патча

Одной из полезных функций является создание резервных копий перед применением исправлений. Мы будем использовать опцию -b для резервного копирования. В нашем примере мы исправим файл исходного кода с помощью myapp.patch .

Создайте резервную копию перед применением исправления

Сделайте резервную копию перед применением исправления

Имя резервной копии будет таким же, как и у файла с исходным кодом, только с добавлением расширения .orig. Таким образом, имя файла резервной копии будет myapp.c.orig

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

Установить версию файла резервной копии

Установить версию файла резервной копии

Как видно из снимка экрана, новый файл резервной копии имеет номер вроде myapp.c.~1~

Мы можем захотеть только проверить или увидеть результат исправления. Для этой функции есть опция. Мы будем использовать параметр --dry-run, чтобы только эмулировать процесс исправления, но не изменять какой-либо файл на самом деле.

Иногда нам может понадобиться установить патч в обратном порядке. Таким образом, процесс применения будет обратным. Мы можем использовать параметр -R для этой операции. В примере мы исправим myapp_old.c, а не myapp.c

Обратный патч

Обратный патч

Читайте также: