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