Скажем, меня интересует источник одной конкретной утилиты Linux, например factor. Где я могу найти исходный код этой утилиты?





Обычно исходный код можно найти на веб-сайте программы, если она имеет открытый исходный код. В этом случае здесь, поскольку фактор является частью coreutils.
Я напечатал
man factor
Спустился вниз и нашел «GNU coreutils 6.10». Итак, я погуглил "coreutils" и ... нашел сайт, на который только что ссылался joschi.
Спасибо, это (общее объяснение того, как найти исходный код для данной программы) - это то, что я искал.
Это не может быть хорошей идеей для всех вещей. Некоторые дистрибутивы могли модифицировать оригинал для своего распространения. Возможно, лучше использовать программное обеспечение для управления пакетами, которое поставляется с вашей системой (управление пакетами может получать как исходные, так и двоичные файлы). См. «Saua» ниже.
Вы также можете узнать, в каком пакете находится двоичный файл, из загрузки, которая содержит исходный код.
В Debian (и Ubuntu, и во всем остальном, основанном на Debian) вы делаете это следующим образом:
$ dpkg -S /usr/bin/factor coreutils: /usr/bin/factor $ apt-get source coreutils
Первая команда проверит, какой пакет содержит файл, который вы ищете (используйте «which factor», чтобы узнать, какой двоичный файл выполняется, когда вы просто набираете «factor»).
Вторая команда загрузит и распакует исходники (включая исправления, примененные для сборки пакета) в текущий каталог, поэтому ее следует выполнять в выделенном или временном каталоге.
Я почти уверен, что в дистрибутивах на основе rpm есть похожий механизм, но я не знаю их команд.
Спасибо, это хороший вариант, не относящийся к Google. Я знаю, что Google всегда будет рядом, но по какой-то причине мне все еще нравится знать, как жить без него.
Мне это удобно, потому что мне даже не нужно запускать браузер. Он просто получает все, что я хочу.
В Gentoo просто посмотрите ебилд, с которым вы скомпилировали пакет: D.
Если вы не уверены?
# which factor
/usr/bin/factor
# grep '/usr/bin/factor' /var/db/pkg/*/*/CONTENTS
/var/db/pkg/sys-apps/coreutils-6.12-r2/CONTENTS:obj /usr/bin/factor 5aaf903daa4345efb11618b3cb47e9a5 1224224574
/var/db/pkg/sys-apps/coreutils-6.12-r2/CONTENTS:obj /usr/lib64/debug/usr/bin/factor.debug 517d965636850633e9b15926dde8c222 1224224575
# cat /var/db/pkg/sys-apps/coreutils-6.12-r2/SRC_URI
ftp://alpha.gnu.org/gnu/coreutils/coreutils-6.12.tar.lzma mirror://gnu/coreutils/coreutils-6.12.tar.lzma mirror://gentoo/coreutils-6.12.tar.lzma mirror://gentoo/coreutils-6.12-patches-1.0.tar.lzma http://dev.gentoo.org/~vapier/dist/coreutils-6.12-patches-1.0.tar.lzma
# cat /var/db/pkg/sys-apps/coreutils-6.12-r2/HOMEPAGE
http://www.gnu.org/software/coreutils/
Но, конечно, исходный код, вероятно, все еще доступен в /usr/portage/distfiles.
Чтобы найти пакет, из которого был получен двоичный файл, в системе на основе rpm вы можете ввести:
$ rpm -qf /usr/bin/factor
который напечатает имя пакета. Вместо этого с:
$ rpm -qif /usr/bin/factor
вы также получите информацию о пакете, включая во многих случаях его домашнюю страницу.
Исходные пакеты RPM также существуют, но как их получить, зависит от высокоуровневого менеджера пакетов, используемого поверх RPM (yum, urpmi, apt-get4 для rpm, ...).
В большинстве систем также / usr / share / doc / содержит некоторую документацию по программе, и ссылка на веб-сайт довольно часто находится где-то там, возможно, в README.
Обычно я нахожу ссылку на источник, домашнюю страницу и другую полезную информацию, выполняя поиск по свежее мясо.
Вы можете проверить SourceForge.net.
Другой, очень хороший подход - использовать Google Code Search. Например, поиск фактор coreutils (см. Справочную страницу или factor --help, чтобы узнать, что это из coreutils) дал пакет в качестве второго результата. В двух щелчках мыши я просматривал factor.c в Интернете.
Google Code Search выполняет поиск по большинству общедоступных исходных кодов. Вы можете использовать регулярные выражения и множество параметров расширенного поиска, включая ограничение по языку и лицензии.
Хороший. Что мне действительно нравится в этом, так это то, что любые #included файлы отображаются в виде ссылок в исходном коде, что упрощает навигацию по сложному исходному коду.
Спасибо за ссылку.