рУССКИЙ
ИДИ НАХУЙ

Задумывались ли вы когда-то что из себя представляют команды в терминале? Это есть не что иное как обычные программы. И в данной статье мы расмотрим пример как найти и скачать исходный код программ в Linux. Для вас это может иметь смысл если вы хотите написать подобную программу, разобраться в исходниках “для себя” либо есть желание контрибьютить в ядро.

Первая задача это поиск исходников.

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

Идентификация комманд.

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

type, which, help, man и info.

Комманда type выводит тип комманды из списка alias, keyword, function, builtin, disk file, и not found. Для примера, комманда type выводит два инстанса комманды ls:

$ ▶ type -a ls
ls is aliased to `ls --color=auto'
ls is /usr/bin/ls
ls is /bin/ls

which - выводит полный путь к искомой комманде.

$ ▶ which ls
/usr/bin/ls

help - выводит краткую информацию об искомой комманде.

$ ▶ help echo
echo: echo [-neE] [arg ...]
Write arguments to the standard output.

manвыводит документацию из системной записи. Выдает больше информации, чем комманда help.

$ ▶ man ls

Ссылка на исходники

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

Но первое и основное место для поиска и скачивания исходников это конечно же использование Менеджера Пакетов. Рассмотрим пример на debian подобном дистрибутиве.

Используем dpkg -S <command path> чтоб узнать имя пакета этой программы.

$ ▶ dpkg -S /bin/ls
coreutils: /bin/ls

Далее мы используем комманду apt-get source <package name> для скачивания исходников в текущую директорию. Если обратиться к документации, то стандартная папка для исходников это /usr/src.

$ ▶ apt source coreutils
Reading package lists... Done
Need to get 5,401 kB of source archives.
Get:1 http://us.archive.ubuntu.com/ubuntu focal/main coreutils 8.30-3ubuntu2 (dsc) [2,048 B]
Get:2 http://us.archive.ubuntu.com/ubuntu focal/main coreutils 8.30-3ubuntu2 (tar) [5,360 kB]
Get:3 http://us.archive.ubuntu.com/ubuntu focal/main coreutils 8.30-3ubuntu2 (diff) [39.6 kB]
Fetched 5,401 kB in 3s (1,840 kB/s)

Если apt source выдает ошибку, следует проверить конфигурации.

$ ▶ apt-get source coreutils
Reading package lists... Done
E: You must put some 'deb-src' URIs in your sources.list

Для этого проверьте файл /etc/apt/sources.list чтоб в нем были раскомментированы пакеты из deb-src реп. Например,

# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://us.archive.ubuntu.com/ubuntu/ focal main restricted
deb-src http://us.archive.ubuntu.com/ubuntu/ focal main restricted

Или из Ubnutu через приложение «Software & updates». Чекнуть пункт Source code.

Ubuntu Software Updates Source code enable

Если не уверены в названии пакета, его можно найти на https://www.debian.org/distrib/packages

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

В помощь этому есть интересный сайт, где подробно рассмотрена каждая команда из пакета coreutils, с блок-схемами и разбором кода. http://www.maizure.org/projects/decoded-gnu-coreutils/

Андрей

пн, 05/10/2021 - 10:54

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

Добавить комментарий

Содержимое данного поля является приватным и не предназначено для показа.
  • HTML-теги не обрабатываются и показываются как обычный текст
     o8o        .o8                      .o8    .ooooo.        .   
`"' "888 "888 888' `Y88. .o8
oooo .oooo888 ooo. .oo. .oooo888 888 888 .o888oo
`888 d88' `888 `888P"Y88b d88' `888 `Vbood888 888
888 888 888 888 888 888 888 888' 888
888 888 888 888 888 888 888 .88P' 888 .
888 `Y8bod88P" o888o o888o `Y8bod88P" .oP' "888"
888
.o. 88P
`Y888P
Введите код, изображенный в стиле ASCII-арт.
рУССКИЙ
ИДИ НАХУЙ