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

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

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

Содержимое данного поля является приватным и не предназначено для показа.
  • HTML-теги не обрабатываются и показываются как обычный текст
 dP    dP   888888ba    .d888888   8888ba.88ba   888888ba  
Y8. .8P 88 `8b d8' 88 88 `8b `8b 88 `8b
Y8aa8P a88aaaa8P' 88aaaaa88a 88 88 88 88 88
88 88 88 88 88 88 88 88 88
88 88 88 88 88 88 88 88 88
dP dP 88 88 dP dP dP dP dP

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