Profile picture for Admin

Задумывались ли вы когда-то что из себя представляют команды в терминале? Это есть не что иное как обычные программы. И в данной статье мы расмотрим пример как найти и скачать исходный код программ в 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.

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

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

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

Андрей

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

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

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

Содержимое данного поля является приватным и не предназначено для показа.
 dP     dP  .d8888P   888888ba   d8888b.         dP 
88 88 88' 88 `8b `88 88
88 88 88baaa. a88aaaa8P' .aaadP' 88
88 88 88` `88 88 88' 88
Y8. .8P 8b. .d8 88 88. 88. .d8P
`Y88888P' `Y888P' dP Y88888P `Y8888'

Введите код, изображенный в стиле ASCII-арт.