
Чи міркували ви колись, що з себе становлять комманди в терміналі? Це є не що інша як звичайні програми. І в даній статті ми розглянемо приклад того як знайти початковий код програм в 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> щоб дізнатись імʼя пакету цієї программи. Із нашего приклади видно, що программа ls входить до пакету coreutils.
$ ▶ 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.
$ ▶ 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
Чи зробити це в Ubuntu через аплікацію «Software & updates». Перевірити пункт Source code.
Якщо не впевнені в назві пакету, то його можна знайти на https://www.debian.org/distrib/packages
Наразі коли початковий код завантажен, його можна почитати і розібратись як працюють комманди, котрі ми використовуємо кожного дня.
Допомогти в цьому зможе цікавий сайт, де детально розглянута кожна комманда із пакета coreutils, з блок-схмами і кодом http://www.maizure.org/projects/decoded-gnu-coreutils/ .
Коментувати