Введение
Ни для кого не секрет, что в нашей стране 90% установленных программ на компьютерах не являются лицензионными. Программы уже взломаны, но чтобы их установить требуются некоторые навыки. В статье рассмотрены самые распространенные способы установки пиратских программ. Как пользоваться keygen? Как пользоваться crack? Что такое request code? Как пользоваться patch?
Изучаем содержимое папки с установочным файлом
Открываем папку с установочными файлами программы и изучаем ее содержимое. Возможно, в ней вы найдете папку crack, тогда открываем ее. Вот возможные варианты, что вы можете найти.
- Текстовый файл (.txt)
- Файл с инструкцией (readme, инструкция, . )
- Файл с серийным номером (serial, ключ, . )
- Файл-приложение (.exe). Открываем.
- В нем генерируется серийный номер (keygen, crack, . )
- В нем есть поле Request code и еще одно поле (keygen, crack, . )
- В нем нет полей для серийного номера. Есть кнопка Patch, Apply patch или Crack (patch, keygen, crack, . )
- В папке нет ничего кроме установочного файла
- Поиск решения в интернете
1. Инструкция по установке в текстовом файле
Первое, на что надо обратить внимание, есть ли в этой папке файл «readme.txt» или «прочти меня.txt» (могут быть и другие названия). Очень часто в нем написана инструкция по правильной установке программы. Если файл с инструкцией есть, то, смело, открываем его и следуем инструкции. Если файла нет, то ситуация немного усложняется.
2. Серийный номер в текстовом файле
Для подтверждения прав на программу иногда требуется серийный номер. Имея его, вы сможете установить программу бесплатно.
Серийный номер может потребоваться либо при установке программы, либо при первом запуске уже после установки. Пропустить этот шаг вы не сможете, дальше программа не пойдет, пока вы не введете серийный номер (рис.1).
Пример серийного номера: ADE-R119-F196-k9BA-17CD
В папке с программой (в той же папке что и установочный файл) может находиться файл с серийным номером. Чаще всего он называется «Серийный номер», «Serial number», «Ключ», «key», «crack». Открываем этот файл, копируем серийный номер и вставляем его в нужное место.
-
Последовательность действий:
- Начать установку программы, пока не потребует серийный номер
- Открыть текстовый файл, скопировать серийный номер (Cntr+C)
- Вставить его в то место, где требуется (Cntr+V)
- Все
3. Как пользоваться keygen
В папке с программой может находиться файл-программа (keygen, crack, . ).
Вот пример такой программы, если ее запустить (рис.2):
Нажимаем на кнопку «Generate» (рис.3)
Копируем серийный номер, вставляем в нужное место и все готово. Продолжаем установку, либо нажимаем “Ок” (возможно “Готово”, “далее” . ), если установка уже завершена.
-
Последовательность действий:
- Начать установку программы, пока не потребует серийный номер
- Открыть файл Keygen
- Сгенерировать серийный номер и скопировать (Cntr+С)
- Вставить его в то место, где требуется (Cntr+V)
- Все
4.Получение доступа при помощи “Request code”
Еще один вариант. Во время установки программы или после запуска установленной программы, на экране появляется окно с регистрацией. В папке с установочным файлом должен быть keygen.exe, crack.exe или что-то еще.
Пример окна регистрации (рис.4):
Иногда нужно выбрать режим регистрации, например, выбрать «ввести серийный номер». На экране появляется окно для ввода серийного номера. (рис.5)
В данном случае:
— Get an activation code – получить код активации
— Enter an activation code – ввести код активации (нужный нам вариант)
Открываем из папки с установкой программы файл keygen.exe (crack.exe, . ) (рис.6).
Теперь нам нужно скопировать “Request code” из окна на рис.4 (рис.5) и вставить в окно на рис.6. Выделяем Request code и нажимаем Cntr+C (горячая клавиша копировать).
Вставляем в последнее окно скопированный код (Cntr+V).
Обратите внимание.
Код скопировался не полностью, а только первая строчка. Вторую строчку кода нужно скопировать отдельно, в окне на рис.6 нужно поставить пробел, скопировать и вставить оставшуюся часть “Request code”. Должно получиться так (рис.7):
После этого в программе на рис.7 нажимаем кнопку «Calculate» (иногда называется Generate). Должно получиться так (рис.8):
Копируем “Auth code” из программы рис.7 в окно на рис.5 и получаем так (рис.9):
Нажимаем Next или Ok. Нам должны сообщить, что регистрация прошла успешно. Теперь программой можно пользоваться бесплатно.
Такая ситуация встречается довольно часто. Главное не забывайте, что Request code состоит из двух строчек.
-
Последовательность действий:
- Установить программу
- Запустить программу
- Выбрать режим ввода серийного номера (Enter …)
- Открыть keygen
- Скопировать “Request code” из программы в “keygen” (обе строчки)
- В “keygen” нажать кнопку сгенерировать
- Скопировать код, полученный в “keygen”
- Вставить его в требуемое место в программе (Cntr+V)
- Нажать готово
- Все
5. Как пользоваться patch
Иногда для бесплатной установки программы нельзя просто сгенерировать серийный номер. В таких случаях используют специальные программы, которые изменяют файлы так, чтобы программа не требовала денег. В папке с установщиком программы должен находиться файл “Patch” (он может называться — patch, keygen, crack, . ). Это и есть программа, которую еще называют патч.
Первое, что мы должны сделать, это установить программу (ту, которую мы хотим сделать бесплатной). После установки открывать программу не надо.
Дальше, надо переписать patch (или другой файл-патч) в папку, в которую мы установили программу. Скорее всего это диск С, папка Program files, папка с название программы (C:/Program files/«название программы»).
Дальше открываем файл patch (или другой файл-патч)
Вот пример файла patch.exe (рис.10):
Чаще всего в этом файле только одна кнопка. В данном случае это кнопка Apply patch. В некоторых случаях она может называться Crack. Нажимаем на эту кнопку и программой можно пользоваться бесплатно.
-
Последовательность действий:
- Установить программу
- Скопировать Patch.exe в папку, куда установили программу
- Открыть Patch.exe
- Нажать единственную кнопку в программе “Patch”
- Запустить программу
- Все
6. Файлы, для установки программы бесплатно, отсутствуют
Может быть и такое, что программу вы скачали без пиратского «лекарства». То есть, без готовых серийных номеров, кейгенов или патчей. Тогда задача усложняется. Лучше конечно скачивать программы с готовыми «лекарствами». Но что если все-таки такая проблема встала?
-
Последовательность действий:
- Устанавливаем программу
- Узнаем полную версию программы. (Например, Daemon Tools Lite 4.35.6)
Чаще всего в названии установочного файла присутствует полное название. Если программа уже установлена, то в пункте меню «Справка» есть строка «О программе». Там можно тоже узнать полную версию программы. Если не получилось найти полное название, вводите в поиск неполное. - Если при установке или после требует серийный номер, то в поиске, например yandex.ru, вводим: серийный номер для «полное название программы» Если требуются другие виды регистрации, то в строке поиска, например yandex.ru, вводим: crack для «полное название программы»
- Перебираем всевозможные ссылки до тех пор, пока не скачаем подходящее лекарство или серийный номер
Заключение
Возможно совмещение нескольких способов регистрации. Например, в папке с установочным файлом может быть серийный номер в текстовом документе, а также Patch. В таком случае при установке вводите серийный номер, а после установки используете Patch. Но для этого надо знать как пользоваться keygen, crack, patch, серийным номером по отдельности.
Предупреждаю, что материал этой статьи является ознакомительным. Использование программ без лицензии влечет за собой уголовную ответственность.
Если вы нашли ошибку в тексте, то выделите текст и нажмите Cntr+Enter.
По любым вопросам по данной статье пишите в комментариях. Также если вам понравилась статья, напишите это в комментариях.
Как пользоваться keygen, crack, patch
Ни для кого не секрет, что в нашей стране 90% установленных программ на компьютерах не являются лицензионными. Программы уже взломаны, но чтобы их установить требуются некоторые навыки. В статье рассмотрены самые распространенные способы установки пиратских программ. Как пользоваться keygen? Как пользоваться crack? Что такое request code? Как пользоваться patch?
1. Инструкция по установке в текстовом файле
Первое, на что надо обратить внимание, есть ли в этой папке файл «readme.txt» или «прочти меня.txt» (могут быть и другие названия). Очень часто в нем написана инструкция по правильной установке программы. Если файл с инструкцией есть, то, смело, открываем его и следуем инструкции. Если файла нет, то ситуация немного усложняется.
2. Серийный номер в текстовом файле
Для подтверждения прав на программу иногда требуется серийный номер. Имея его, вы сможете установить программу бесплатно.
Серийный номер может потребоваться либо при установке программы, либо при первом запуске уже после установки. Пропустить этот шаг вы не сможете, дальше программа не пойдет, пока вы не введете серийный номер (рис.1).
Пример серийного номера: ADE-R119-F196-k9BA-17CD
В папке с программой (в той же папке что и установочный файл) может находиться файл с серийным номером. Чаще всего он называется «Серийный номер», «Serial number», «Ключ», «key», «crack». Открываем этот файл, копируем серийный номер и вставляем его в нужное место.
- Начать установку программы, пока не потребует серийный номер
- Открыть текстовый файл, скопировать серийный номер (Cntr+C)
- Вставить его в то место, где требуется (Cntr+V)
- Все
3. Как пользоваться keygen
В папке с программой может находиться файл-программа (keygen, crack, . ).
Вот пример такой программы, если ее запустить (рис.2):
Нажимаем на кнопку «Generate» (рис.3)
Копируем серийный номер, вставляем в нужное место и все готово. Продолжаем установку, либо нажимаем “Ок” (возможно “Готово”, “далее” . ), если установка уже завершена.
- Начать установку программы, пока не потребует серийный номер
- Открыть файл Keygen
- Сгенерировать серийный номер и скопировать (Cntr+С)
- Вставить его в то место, где требуется (Cntr+V)
- Все
4.Получение доступа при помощи “Request code”
Еще один вариант. Во время установки программы или после запуска установленной программы, на экране появляется окно с регистрацией. В папке с установочным файлом должен быть keygen.exe, crack.exe или что-то еще.
Пример окна регистрации (рис.4):
Иногда нужно выбрать режим регистрации, например, выбрать «ввести серийный номер». На экране появляется окно для ввода серийного номера. (рис.5)
В данном случае:
— Get an activation code – получить код активации
— Enter an activation code – ввести код активации (нужный нам вариант)
Открываем из папки с установкой программы файл keygen.exe (crack.exe, . ) (рис.6).
Теперь нам нужно скопировать “Request code” из окна на рис.4 (рис.5) и вставить в окно на рис.6. Выделяем Request code и нажимаем Cntr+C (горячая клавиша копировать).
Вставляем в последнее окно скопированный код (Cntr+V).
Обратите внимание.
Код скопировался не полностью, а только первая строчка. Вторую строчку кода нужно скопировать отдельно, в окне на рис.6 нужно поставить пробел, скопировать и вставить оставшуюся часть “Request code”. Должно получиться так (рис.7):
После этого в программе на рис.7 нажимаем кнопку «Calculate» (иногда называется Generate). Должно получиться так (рис.8):
Копируем “Auth code” из программы рис.7 в окно на рис.5 и получаем так (рис.9):
Нажимаем Next или Ok. Нам должны сообщить, что регистрация прошла успешно. Теперь программой можно пользоваться бесплатно.
Такая ситуация встречается довольно часто. Главное не забывайте, что Request code состоит из двух строчек.
- Установить программу
- Запустить программу
- Выбрать режим ввода серийного номера (Enter …)
- Открыть keygen
- Скопировать “Request code” из программы в “keygen” (обе строчки)
- В “keygen” нажать кнопку сгенерировать
- Скопировать код, полученный в “keygen”
- Вставить его в требуемое место в программе (Cntr+V)
- Нажать готово
- Все
5. Как пользоваться patch
Иногда для бесплатной установки программы нельзя просто сгенерировать серийный номер. В таких случаях используют специальные программы, которые изменяют файлы так, чтобы программа не требовала денег. В папке с установщиком программы должен находиться файл “Patch” (он может называться — patch, keygen, crack, . ). Это и есть программа, которую еще называют патч.
Первое, что мы должны сделать, это установить программу (ту, которую мы хотим сделать бесплатной). После установки открывать программу не надо.
Дальше, надо переписать patch (или другой файл-патч) в папку, в которую мы установили программу. Скорее всего это диск С, папка Program files, папка с название программы (C:/Program files/«название программы»).
Дальше открываем файл patch (или другой файл-патч)
Вот пример файла patch.exe (рис.10):
Чаще всего в этом файле только одна кнопка. В данном случае это кнопка Apply patch. В некоторых случаях она может называться Crack. Нажимаем на эту кнопку и программой можно пользоваться бесплатно.
- Установить программу
- Скопировать Patch.exe в папку, куда установили программу
- Открыть Patch.exe
- Нажать единственную кнопку в программе “Patch”
- Запустить программу
- Все
6. Файлы, для установки программы бесплатно, отсутствуют
Может быть и такое, что программу вы скачали без пиратского «лекарства». То есть, без готовых серийных номеров, кейгенов или патчей. Тогда задача усложняется. Лучше конечно скачивать программы с готовыми «лекарствами». Но что если все-таки такая проблема встала?
С патчами мы сталкиваемся не так часто, но и не так редко. В этой статье мы научимся патчить и создавать патчи. Патчить на самом деле легче, чем можно себе представить.
1) Учимся патчить.
Патчить будем на примере уязвимости для FreeBSD (http://www.securitylab.ru/vulnerability/368343.php). Качаем оттуда патч (wget http://security.FreeBSD.org/patches/SA-09:05/telnetd.patch). После этого нужно выяснить, куда же его положить, что бы патч прошёл успешно. Для этого можно вывести на экран первые несколько строк:
Index: contrib/telnet/telnetd/sys_term.c
===================================================================
— contrib/telnet/telnetd/sys_term.c (revision 188667)
+++ contrib/telnet/telnetd/sys_term.c (working copy)
@@ -1271,8 +1271,18 @@
Смотрим внимательно и видим, какой файл он патчит. Поскольку путь начинается с contrib/telnetто можно предполодить, что файл должен находится в папке /usr/src. Копируем его туда и пробуем патчить:
Если после этого у вас на экран вывелось похожее на то, что ниже — значит всё удалось. Обычно стоит прочесть, вывод и удостоверится, что всё прошло succeed:
Hmm. Looks like a new-style context diff to me.
The text leading up to this was:
—————————
|*** ../convert.sh Fri Dec 5 17:00:52 2008
|— convert.sh Sat Apr 11 13:52:43 2009
—————————
Patching file convert.sh using Plan A.
Hunk #1 succeeded at 6.
done
Если вдруг патчу не удаётся найти нужный файл, он выдаёт запрос на указания пути вручную:
Hmm. Looks like a new-style context diff to me.
The text leading up to this was:
—————————
|*** convert1.sh Sat Apr 11 13:40:58 2009
|— convert.sh Fri Dec 5 17:00:52 2008
—————————
File to patch:
после введения пути:
File to patch: ../convert.sh
Patching file ../convert.sh using Plan A.
Reversed (or previously applied) patch detected! Assume -R?
Hunk #1 succeeded at 6.
done
Хочу заметить, что утилита patch имеет так же параметры, которые можно использовать. Например, довольно позным может оказаться ключ -C (—check), который позволяет посмотреть, какие изменения будут произведены с файлом, но не пропатчит.
2) Создание патчей.
— обычный
Создание патчей происходит немного сложнее, чем патчить. Для этого берём 2 версии одного и того же файла, помещаем их в разные директории, называем одинаково. После этого будем пользоваться командой diff для выявления разницы между файлами. Здесь самое главное соблюсти порядок в котором подаются имена файлов. ИСХОДНЫЙ_ФАЙЛ — эталонный файл, ИЗМЕНЁННЫЙ_ФАЙЛ — файл, который содержит изменения.
$diff -u ИСХОДНЫЙ_ФАЙЛ ИЗМЕНЁННЫЙ_ФАЙЛ > file.patch
где -u — означает унифицированный вывод, то есть с —/+++.
После такой операции будет создан файл file.patch, который собственно будет патчем. Файл патча можно так же открыть в текстовом редакторе и подредактировать пути к файлам, если необходимо.
Вот это и всё. Если хотите большего функционала — читайте man к указанным здесь бинарникам.
— через svn
Расскажу на примере коммита . Это исправление не вышло в качестве патча, зато вошло в коммит 269687. Наша идея такова: делаем diff между 2-мя соседними (нашим 269687 и предыдущим 269686) коммитами и накладываем патч:
# svn diff -r269686:269687 svn://svn.freebsd.org/base/stable/9 > /path/to/openssl.patch
# cd /usr/src && patch
Оригинал статьи здесь.
Опубликовано с разрешения редакции журнала RootUA и газеты FOSS News
В мире Linux широко используется пара программ diff
и patch. diff создает файл, в который записываются различия между 2
файлами или 2 каталогами (т.н. патч), а patch позволяет “наложить” этот
патч, т.е. имея патч и один из двух файлов (каталогов), получить другой.
Основное применение этих программ – создание, распространение и
применение патчей к исходным текстам программ. Например, я нашел ошибку в
к.-л. программе и после изучения ее исходного кода понял, что для
исправления этой ошибки надо добавить 2 строчки, а еще в одной поменять
несколько символов. Я хочу сообщить разработчику об этом, но каким
образом указать ему на требуемые изменения? Можно это сделать обычным
языком, но гораздо лучше (и удобнее для нас обоих) сделать патч и
выслать его разработчику.
Или другой пример. Ядро Linux, упакованное в
.tar.bz2, весит более 30 Мб независимо от его версии. Но файл различий
между версиями 2.6.6 и 2.6.7, упакованный в .bz2, весит всего 3 Мб,
поэтому для получения исходников ядра 2.6.7 из исходников ядра 2.6.6
достаточно скачать лишь 3 Мб, не выкачивая все 32 Мб заново.
Впрочем, часто нужно просто посмотреть различия
2 почти одинаковых файлов, и для этого тоже удобно использовать diff,
выводя результат его работы не в файл, а прямо на экран.
А теперь посмотрим работу этих утилит на
практике. Возьмите какой-нибудь текстовый файл и сделайте его копию, а
затем отредактируйте эту копию – 1-2 строчки удалите, что-нибудь
добавьте, пару строчек просто поменяйте. Затем запустите diff
старый_файл новый_файл. Получите файл различий в обычном формате. В нем
выводятся только измененные строки, и изменения помечены символами < и
> (означающими, что соответствующая строка принадлежит левому или
правому файлу в командной строке). Этот формат пригоден только для
изучения человеком небольших различий между 2 файлами. Для создания
патчей используются другие форматы вывода, задаваемые дополнительными
опциями, при этом результат работы diff перенаправляется в файл патча
стандартными средствами оболочки.
Добавьте к строке вызова diff ключ -u. Теперь
вывод программы будет представлять собой патч в унифицированном формате,
который используется в большинстве случаев (есть еще контекстный
формат, включаемый ключом -c, но он используется намного реже). В такой
патч включаются и несколько соседних неизмененных строк (т.н. контекст),
помогающие программе patch найти место в файле, где произошло
изменение. Добавленные во 2-м файле строки помечаются плюсами, удаленные
– минусами. Если строка изменилась, она выводится 2 раза – старый
вариант с минусом и новый с плюсом. Кроме того, в начале добавляется
заголовок, в котором указываются имена и даты изменения обоих файлов.
diff позволяет получить различия между двумя
каталогами. Это используется, как правило, чтобы получить общий патч ко
всему дереву исходников программы, если было изменено несколько файлов.
Для этого используются ключи -urN, а вместо 2 файлов указываются имена 2
каталогов (старого и измененного). При этом корректно обрабатываются
ситуации с созданными/удаленными файлами (файл, отсутствующий в одном из
каталогов, считается существующим и пустым).
Чтобы наложить патч, надо перейти в каталог, где находится старый файл/каталог, и выполнить команду
patch < файл_патча
При использовании патчей к каталогам обычно
делают так: патч создается, как описано выше (тогда в заголовках патчей к
отдельным файлам путь к ним будет начинаться с имени нового каталога), а
прикладывается он внутри изменяемого каталога. Тогда команда будет
выглядеть так:
patch -p1 < файл_патча
Здесь -p1 означает, что из заголовков патча
надо убрать начальный каталог. Поясню всё это на примере. У нас имеется
дерево исходников ядра 2.6.0. Это каталог linux-2.6.0, в котором
содержатся каталоги drivers, arch и т.д. И у нас есть патч до версии
2.6.1, в котором содержатся такие заголовки:
— a/drivers/acpi/Kconfig Thu Jan 8 23:00:24 2004
+++ b/drivers/acpi/Kconfig Thu Jan 8 23:00:24 2004
Видим, что при создании патча старый и новый
каталоги назывались a и b соответственно. У нас же каталог называется
по-другому, и patch ничего сделать не сможет. Поэтому заходим в каталог
linux-2.6.0 и выполняем указанную выше команду. Теперь заголовки будут
интерпретироваться как
— drivers/acpi/Kconfig Thu Jan 8 23:00:24 2004
+++ drivers/acpi/Kconfig Thu Jan 8 23:00:24 2004
Практически каждый разработчик программного обеспечения (ПО), программист или верстальщик сталкивается (и довольно часто) с необходимостью модификации некоторой части рабочего проекта или даже нескольких строк кода. Особенно это актуально, когда в разработке участвует несколько человек, которые могут вносить правки в разных частях проекта. Для удобства и автоматизации действий по составлению таких правок используются специализированные утилиты. Одной из таких является утилита patch и о ней более подробно будет рассказано в данной статье.
Содержание
- Что такое патч?
- Синтаксис и основные опции команды patch
- Применение патчей к отдельным файлам
- Работа с проектами
- Откат патчей
- Заключение
Что такое патч?
Говоря о патчах вкупе с утилитой patch, следует подразумевать, что это касается исключительно текстовых данных. Другими словами, происходит работа с исходными кодами проекта, будь то код C++, PHP, HTML и т. д. Вообще, все самые «суровые» программисты или разработчики в процессе своей совместной работы над проектом обмениваются исключительно отдельными правками, а не пересылают друг другу актуальные версии проектов целиком.
Сама правка, т. е. текстовые изменения в исходном коде проектов (для одного его файла или сразу для нескольких) и есть патч или «заплатка». Патч, помимо самих изменений кода содержит также и некоторую служебную информацию, необходимую для правильного «наложения заплатки», т. е. для установки патча. Таким образом, патч — это текстовый файл определённого формата, содержащий в себе данные и инструкции для приведения конечного файла (или проекта) к нужному или актуальному виду.
Утилита patch умеет быстро и эффективно распоряжаться данными из файла-патча, используя для этого хранящиеся в нём инструкции. И таким образом выполняет все рутинные действия по редактированию. Пользователю (разработчику) необходимо лишь правильно выполнить соответствующую команду, задав все необходимые аргументы и опции.
Нет ничего удивительного в том, что утилита patch относится к категории ПО, которое обязательно должно быть установлено на любой машине для разработки программ, да и вообще для ведения разработки. Практически любой дистрибутив Linux предоставляет утилиту patch предустановленной по-умолчанию.
Стоит также отметить, что по своей функциональности, patch довольно сложна и обладает, без преувеличения, просто огромным набором опций. По этой причине в данной статье будут приведены только самые распространённые приёмы при работе с этой утилитой и только сопутствующие им опции команд. Синтаксис команды patch следующий:
patch [options] [originalfile] [patchfile]
Здесь originalfile – это файл, который необходимо «пропатчить» до актуального состояния. А patchfile – файл-патч. Сразу возникает вопрос: а откуда берётся этот файл-патч? Ответ: он генерируется другой утилитой — diff, которая находит построчные различия между файлами. Либо же патч может быть составлен вручную, автором, если он знаком с соответствующим форматом. Но это бывает крайне редко, обычно прибегают к помощи diff или её аналогов.
В следующей таблице приведены опции команды patch, которые используются наиболее часто:
<td»>Помещает неудавшиеся (отклонённые) изменения в отдельный файл rejecfile вместо файла .rej по-умолчанию.
Опция | Значение |
-i patchfile | Читает информацию из патч-файла, указываемого параметром patchfile. |
-r rejectfile, —reject-file=rejectfile | |
-N, —forward | Когда патч не применяется, то утилита patch обычно пытается определить, выглядит ли ситуация так, как если бы патч уже был применён. Опция -N отключает такое поведение. |
-pnum, strip=num | Обрезает части пути к файлу, разделяемые символом косой черты до уровня, указанного в параметре num. Например: p0 оставит путь /u/john/src/blurfl/blurfl.cpp неизменным, а p4 обрежет тот же путь до blurfl/blurfl.cpp. |
-o outputfile, —output=outputfile | Отправляет вывод в указываемый в параметре outputfile файл. Не следует использовать эту опцию, если в качестве outputfile указывается файл, который должен быть пропатчен. Если в качестве outputfile указать символ дефиса «-», то вывод будет направляться в стандартный поток STD_OUT. |
-E, —remove-empty-file | Удаляет файлы, оказавшиеся пустыми после применения патча. Эта опция имеет смысл, когда используемые патчи имеют не контекстный формат. |
—dry-run | Печатает результаты применения патча без реальной модификации файлов. Полезно для быстрого и безопасного тестирования патчей. |
-R, —reverse | Откатывает все изменения (если они возможны), т. е. отменяет установку патча. |
-c, —context | Интерпретирует файл патча как обычный контекстный формат, генерируемый утилитой diff. |
-b, —backup | Создаёт резервную копию оригинального файла вместо его удаления. |
Применение патчей к отдельным файлам
Прежде, чем начать рассмотрение практических примеров, необходимо сказать несколько слов о той самой утилите, которая и создаёт патчи — diff. Она может генерировать патчи трёх типов — простой, контекстный и контекстный унифицированный. Простой гораздо более компактный по размеру, чем контекстные, но последние гораздо более удобочитаемы и понятны для восприятия пользователем. Для того, чтобы сгенерировать простой патч, для команды diff никаких специальных опций не требуется. А для генерации контекстного или унифицированного контекстного патчей предназначены опции -с и -u соответственно:
$ diff oldfile newfile > patch $ diff -c oldfile newfile > contextpatch $ diff -u oldfile newfile > upatch
Пусть имеется файл с кодом C++ ChildClass.cpp:
#include "../include/ChildClass.h" ChildClass::ChildClass() : BaseClass() { //ctor } ChildClass::ChildClass(char* inputBase[]) : BaseClass(inputBase) { } void ChildClass::valueSqr() { value *= value; } ChildClass::~ChildClass() { //dtor }
И пусть в этот файл было внесено следующее изменение: метод valueSqr() был переименован в calcSqr(). Тогда контекстный патч (файл contextpatch) будет выглядеть следующим образом:
*** ChildClass.cpp 2018-11-13 15:13:08.000000000 +0400 --- ChildClass_new.cpp 2019-06-04 19:34:41.176769204 +0400 *************** *** 10,16 **** } ! void ChildClass::valueSqr() { value *= value; } --- 10,16 ---- } ! void ChildClass::calcSqr() { value *= value; } *************** *** 18,21 **** ChildClass::~ChildClass() { //dtor ! } В конце файла нет новой строки --- 18,21 ---- ChildClass::~ChildClass() { //dtor ! }
Теперь, чтобы пропатчить старую версию ChildClass.cpp, нужно выполнить команду:
$ patch ChildClass.cpp -i contextpatch -o ChildClass_new.cpp
В результате будет получен файл ChildClass_new.cpp с актуальным содержимым.
Работа с проектами
С помощью утилиты patch можно также применять патчи для нескольких файлов, причём расположенных в разных каталогах. Это удобно, когда изменения проводятся в масштабах целого проекта. Но в этом случае и сам патч должен быть особым образом подготовлен утилитой diff.
Пусть имеется старый проект в каталоге base-project. Внутри него имеются подкаталоги include и src, в которых, в свою очередь находятся файлы с изменениями — ChildClass.h (в каталоге include) и ChildClass.cpp (в каталоге src). Сам изменённый (актуальный) проект был помещён в отдельный каталог new-project. Подготовка патча будет выглядеть следующим образом:
$ diff -r -c ./base-project ./new-project > project-patch
Сгенерированный файл-патч project-patch:
diff -r -c ./base-project/include/ChildClass.h ./new-project/include/ChildClass.h *** ./base-project/include/ChildClass.h 2019-06-04 17:55:15.081868602 +0400 --- ./new-project/include/ChildClass.h 2019-06-04 17:56:42.929902111 +0400 *************** *** 9,15 **** public: ChildClass(); ChildClass(char* inputBase[]); ! void valueSqr(); virtual ~ChildClass(); protected: --- 9,15 ---- public: ChildClass(); ChildClass(char* inputBase[]); ! void calcSqr(); virtual ~ChildClass(); protected: diff -r -c ./base-project/src/ChildClass.cpp ./new-project/src/ChildClass.cpp *** ./base-project/src/ChildClass.cpp 2019-06-04 16:52:34.884229162 +0400 --- ./new-project/src/ChildClass.cpp 2019-06-04 17:57:01.798768449 +0400 *************** *** 10,16 **** } ! void ChildClass::valueSqr() { value *= value; } --- 10,16 ---- } ! void ChildClass::calcSqr() { value *= value; } *************** *** 18,21 **** ChildClass::~ChildClass() { //dtor ! } В конце файла нет новой строки --- 18,21 ---- ChildClass::~ChildClass() { //dtor ! }
Следует обратить внимание, что в данных примерах указываются относительные пути. Файл-патч будет помещён в текущий активный каталог.
Чтобы применить патч нужно выполнить следующую команду:
$ patch -p0 < project-patch patching file ./base-project/include/ChildClass.h patching file ./base-project/src/ChildClass.cpp
Как видно, вместо ключа -i можно использовать символ «<» для перенаправления потока из файла на вход команды patch. Здесь также нужно обратить внимание и понимать, что при выполнении команды patch активным каталогом должен быть каталог уровнем выше, чем каталог проекта, к которому применяется патч, ведь используются относительные пути. Параметр -p0 (см. таблицу из главы «Синтаксис и основные опции команды patch») указывает, что применение патча должно затрагивать весь проект. Если бы этот параметр был бы равен -p1, то патч применялся не выше уровня каталогов include и src. Нередко бывают случаи, когда кроме изменений в содержимом файлов меняется также и содержимое каталогов проекта. Другими словами, добавляются новые или удаляются ранее существовавшие файлы и подкаталоги. Пусть, например, в проект из предыдущего примера в каталог include был добавлен файл Readme.txt с содержанием «This is Readme content.». В этом случае подготовка патча будет выглядеть следующим образом:
$ diff -r -c -N ./base-project ./new-project > project-patch
Сгенерированный файл-патч project-patch:
diff -r -c -N ./base-project/include/Readme.txt ./new-project/include/Readme.txt *** ./base-project/include/Readme.txt 1970-01-01 04:00:00.000000000 +0400 --- ./new-project/include/Readme.txt 2019-06-04 17:25:22.383487767 +0400 *************** *** 0 **** --- 1 ---- + This is Readme content.
Теперь можно пропатчить проект:
$ patch -p0 -E < project-patch patching file ./base-project/include/Readme.txt
Откат патчей
Если по каким-то причинам патч оказался бесполезен и необходимо вернуться к предыдущей версии файлов (проекта), то можно сделать откат изменений, используя опцию -R:
$ patch -p0 -R < project-patch patching file ./base-project/include/Readme.txt
В результате будет удалён файл Readme.txt, который был внесён в проект в примере из предыдущей главы, т. е. фактически откат изменений.
Рекомендуется перед применением патчей проверять, подходят ли они. Для этого используется опция —dry-run:
$ patch -p0 --dry-run < patch
При возникновении каких-либо ошибок во время применения патча, утилита patch создаёт файлы *.rej, по которым можно восстановить исходную версию файла. Однако, следует учитывать, что восстановление содержимого файлов таким способом — довольно долгое и нудное занятие. Практичнее создавать резервные копии файлов, указывая в команде patch опцию -b:
$ patch -b -p0 < project-patch
Заключение
В заключение необходимо отметить, что значение использования утилиты patch двоякое. С одной стороны гораздо меньше хлопот с редактированием файлов и проектов. Не нужно вручную переписывать много кода, когда изменений довольно много. С другой стороны, необходимо использовать данную утилиту с особой осторожностью, чтобы не испортить результаты собственных трудов. Но это уже фактор, зависящий в большей степени от самого пользователя.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
patch — это команда для добавления файлов исправлений в исходный код или текстовые файлы. Он принимает ввод в виде файла исправления и применяет различия к исходным файлам. Мы используем инструмент «diff», чтобы увидеть разницу.
«diff» сокращенно обозначается «differences» и используется для сравнения содержимого двух файлов и перечисления изменений в стандартном выводе.
Набор исходных кодов составляет часть программного обеспечения. Разработчики создают исходный код, который со временем развивается. Получать новый файл для каждого обновления нереально или требует много времени. Поэтому самый безопасный метод — распространять только улучшения. В старый файл вносятся изменения, а затем создается новый или исправленный файл для новой версии программного обеспечения.
В этой статье показано, как использовать команду «diff» для создания файла исправления, а затем применить его с помощью команды «patch».
Синтаксис:
Синтаксис команды « patch » следующий:
$ patch [options] [originalfile [patchfile]] $ patch -pnum <patchfile>
Создание файла патча с помощью «diff»:
Файл исходного кода 1:
Во-первых, для создания файла исправления требуются две разные версии исходного кода. Созданный мной файл исходного кода называется «myfile.c»: s
#include <stdio.h> int main() { printf("Hello andreyexn"); }
Файл исходного кода 2:
Теперь скопируйте содержимое myfile.c в new_myfile.c, используя:
$ cp myfile.c new_myfile.c
Внесите некоторые изменения во вновь созданный файл:
#include <stdio.h> void main(){ printf(" Hello Andrey"); printf("Welcome to andreyex"); }
Проверка разницы:
Давайте создадим файл patch с именем myfile.patch:
$ diff -u myfile.c new_myfile.c < myfile.patch
Вы можете распечатать файл patch, выполнив команду ниже:
Применение файла исправления:
Чтобы применить patch, используйте:
Убедитесь, что файл исправления находится в каталоге, в котором размещен файл исходного кода.
Используйте параметр «-b» для создания резервной копии файла исправления:
$ patch -b < myfile.patch
Установка версии файла резервной копии
Если вам нужно несколько резервных копий одного файла резервной копии, используйте параметр «-V». Он устанавливает номер версии каждого файла резервной копии. Выполните команду, указанную ниже:
$ patch -b -V numbered < myfile.patch
Проверить файлы исправлений
Если вы хотите проверить или понаблюдать за результатом установки исправлений, используйте опцию «–dry-run». Он не вносит никаких изменений в исходный файл:
$ patch --dry-run < myfile.patch
Отменить/отменить patch
Параметр «-R» используется для отмены или отмены уже примененного patch.
$ patch < file.patch $ ls –l myfile.c $ patch –R < myfile.patch $ ls –l myfile.c
Заключение:
В операционной системе Linux «patch» — это команда, которая позволяет нам применять файлы исправлений к исходным кодам или файлам конфигурации. Файл patch используется для обновления программного обеспечения. Разница между исходным и новым файлами содержится в файлах исправлений, а команда «diff» используется для получения разницы или исправления. Мы обсудили использование команд «diff» и «patch» с рядом параметров, таких как создание резервных копий, запуск всухую и реверсирование примененного исправления.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Существует множество программ, которые могут создать патч diff, но у меня есть время, пытаясь применить его. Я пытаюсь распространять патч, и у меня вопрос от пользователя о том, как его применять. Поэтому я попытался выяснить это самостоятельно и выяснил, что у меня нет подсказки, и большинство инструментов, которые я могу найти, это командной строки. (Я могу обрабатывать командную строку, но многие люди будут потеряны без приятного и дружелюбного графического интерфейса. Поэтому для этой цели это не хорошо.)
Я попытался использовать TortoiseSVN. У меня есть патч, который я бы хотел применить. Я нажимаю правой кнопкой мыши на патче, и есть опция под подменю TortoiseSVN, в которой говорится “Применить патч”. Все, что он делает, это вытащить пустое окно.
Поэтому я попытался открыть Open. Он имеет два варианта: объединить и применить унифицированный diff. (Патч находится в унифицированном формате diff, к счастью.) Но параметр apply просто не работает: он запрашивает патч и папку. Как-то забыл попросить файл применить патч к! Так что TortoiseSVN просто не работает. Есть ли утилита на основе Windows GUI, которая будет использовать патч и файл и применять его правильно?
РЕДАКТИРОВАТЬ: Если посмотреть на ответы до сих пор, кажется, что Tortoise будет делать это правильно, если это файл, который уже был версией. Это не так. Мне нужно иметь возможность применить патч к файлу, который не вышел из репозитория SVN. Я просто пытался использовать Tortoise, потому что я знаю, что SVN использует diffs и должен знать, как их создавать и применять.