Существует ли исходный код команды patch в Linux?

Существует ли исходный код команды patch в Linux?

Я ищу исходный код для команды patch, используемой в Linux. Кто-нибудь знает, есть ли он в наличии?

Я ищу что-то совместимое с POSIX или, точнее, с QNX v7.

решение1

Существует несколько реализаций patchкоманды в дикой природе, busyboxнапример, поставляется со своей собственной. Вероятно, вы ищете исходный код, patchс которым поставляется ваша система. Чтобы найти исходный код, вы должны знать, что вы ищете. Вам нужно проверить, какой пакет предоставляет patchкоманду и где находится апстрим. Вы не указали, какую ОС вы используете, но в Debian вы можете сделать:

root@64ee32ea5ee6:/# dpkg -S "$(command -v patch)"
patch: /usr/bin/patch
root@64ee32ea5ee6:/# dpkg -s patch
Package: patch
Status: install ok installed
Priority: standard
Section: vcs
Installed-Size: 238
Maintainer: Ubuntu Developers <[email protected]>
Architecture: amd64
Multi-Arch: foreign
Version: 2.7.6-2ubuntu1.1
Depends: libc6 (>= 2.17)
Suggests: ed, diffutils-doc
Description: Apply a diff file to an original
 Patch will take a patch file containing any of the four forms
 of difference listing produced by the diff program and apply
 those differences to an original file, producing a patched
 version.
Homepage: http://savannah.gnu.org/projects/patch/
Original-Maintainer: Laszlo Boszormenyi (GCS) <[email protected]>

А в Slackware, например:

$ grep $(sed 's,^/,,' <<< "$(command -v patch)" ) /var/log/packages/* | cut -d: -f1
/var/log/packages/metamail-2.7-x86_64-7
/var/log/packages/patch-2.7.6-x86_64-3
/var/log/packages/patchelf-0.10-x86_64-1
$ cat /var/log/packages/patch-2.7.6-x86_64-3
PACKAGE NAME:     patch-2.7.6-x86_64-3
COMPRESSED PACKAGE SIZE:     116K
UNCOMPRESSED PACKAGE SIZE:     290K
PACKAGE LOCATION: ./patch-2.7.6-x86_64-3.txz
PACKAGE DESCRIPTION:
patch: patch (apply a diff file to an original file or files)
patch:
patch: Patch is a utility used to apply diffs (or patches) to files, which
patch: are usually source code.
patch:
patch: Larry Wall wrote the original version of patch. Paul Eggert removed
patch: patch's arbitrary limits; added support for binary files, setting
patch: file times, and deleting files; and made it conform better to POSIX.
patch: Other  contributors include Wayne Davison, who added unidiff support,
patch: and David MacKenzie, who added configuration and backup support.
patch:

В обоих случаях используется патч GNU, а описание пакета Debian даже содержит ссылку на домашнюю страницу проекта. http://savannah.gnu.org/projects/patchно в данный момент это не работает.

Также возможно, что вы хотите получить исходный код, который patchвы в настоящее время используете в своей системе со всеми исправлениями и комментариями, добавленными сопровождающими пакетов. В Debian вы можете сделать:

$ apt-get source patch

решение2

Команда по умолчанию patchпо крайней мереДебиан(но, предположительно, также и в большинстве других дистрибутивов Linux) — GNU patch.

patch«Домашняя страница» проекта GNU — этоhttps://www.gnu.org/software/patch/

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

Зеркало репозитория программного обеспечения на Github доступно по адресуhttps://github.com/mirror/patch

Системы BSD имеют альтернативную реализацию. Реализацию OpenBSD можно посмотреть наhttps://cvsweb.openbsd.org/src/usr.bin/patch/

решение3

Если вы используете Linux, вы, скорее всего, используете GNU patch, см.http://www.gnu.org, но patchимеет долгую историю и существует в нескольких вариантах:

patch— программа, первоначально написанная Ларри Уоллом в мае 1985 года. Он опубликовал исходный код версии 1.3 в формате shar в группе новостей Usenet.mod.sources.

Версия 2.0 была опубликована в 1986 году Ларри Уоллом в сообщении comp.sources.unix(как mod.sourcesвпоследствии было переименовано), а последняя версия от Ларри Уолла была сделана в июне 1988 года.

Первоначальная лицензия от Ларри была следующей:

* This program may be copied as long as you don't try to make any
* money off of it, or pretend that you wrote it.

что не соответствует сегодняшним представлениям об ОСС, поскольку запрещает «зарабатывать» на этом деньги.

Поскольку такая сложная программа patchтребует внимания, существует несколько производных версий.

В 1990 году разработчики GNU выпустили версию GPLd, но, насколько мне известно, так и не удалось проверить, дал ли Ларри свое согласие на это изменение лицензии.

Версия с закрытым исходным кодом от IBM, HP, DEC и Sun была сделана в 1990-х годах. Она была сделана POSIX-совместимой, но так и не исправила все известные ошибки.

Около 10 лет назад OpenBSD и мной были созданы варианты без кода GPLd.

Примерно 5 лет назад Ларри дал разрешение разработчикам OpenBSD и мне использовать лицензию BSD с одним пунктом, чтобы сделать патч совместимым с OSS.

Хотя между мной и людьми из BSD существует своего рода обмен информацией об ошибках и проблемах безопасности, версия GNU существует отдельно.

Версия в schilytoolsвключает в себя дорогостоящий тестовый набор для исправления и сравнивает результаты с ожидаемыми результатами и с результатами локально установленной версии. Поскольку это (во многих случаях gpatch), ему нужно включать некоторые обходные пути каждый раз, когда он обнаруживает ошибку в установленной в системе версии ,-)

Страницу руководства для версии schilytools можно найти здесь:http://schilytools.sourceforge.net/man/man1/patch.1.html

Учитывая, что OP интересуется QNX, исходный код OpenBSD его не интересует, поскольку он непереносим. Schilytools весьма переносимы, хотя прошло уже много времени с момента последнего отзыва на компиляцию QNX. Так что если он больше не компилируется на QNX, отправьте намёк.

Кстати: патч GNU противоречит некоторым требованиям POSIX.

Связанный контент