Доступен ли исходный код для команды patch в Linux?

Когда вы устанавливаете некоторые программы, вы можете установить их в своем собственном пользовательском пространстве (i. е. self -содержится в вашем домашнем каталоге ), а не в системе -. Таким образом, у вас не запрашиваются привилегии суперпользователя, потому что они вам не нужны для установки программы для собственного использования одним пользователем. Программа, установленная таким образом, действительно не сможет получить доступ к файлам, которым не предоставлено разрешение «не -владелец, не -члены группы могут читать это» при отсутствии повышения привилегий.

-1
26.11.2019, 16:11
3 ответа

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

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

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

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

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

.
4
28.01.2020, 05:06

Существует несколько реализаций команды 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 <ubuntu-devel-discuss@lists.ubuntu.com>
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) <gcs@debian.org>

И, например, в 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
4
28.01.2020, 05:06

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

patch— это программа, первоначально написанная Ларри Уоллом в мае 1985 года. Он разместил исходный код версии 1.3 в формате shar в группе новостей Usenetmod.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.

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

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

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

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

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

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

Несмотря на то, что мы с людьми из BSD обмениваемся мнениями об ошибках и проблемах безопасности, версия GNU существует отдельно.

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

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

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

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

3
28.01.2020, 05:06

Теги

Похожие вопросы