Чи міркували ви колись, що з себе становлять комманди в терміналі? Це є не що інша як звичайні програми. І в даній статті ми розглянемо приклад того як знайти початковий код програм в 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/ .

Андрей

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

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

Коментувати

Вміст цього поля є приватним і не буде доступний широкому загалу.
  • Не дозволено жодних HTML теґів.
        dP  dP   dP  dP    dP  8888ba.88ba   888888P 
88 88 88 Y8. .8P 88 `8b `8b 88'
88 88aaa88 Y8aa8P 88 88 88 88baaa.
88 88 88 88 88 88 `88
88. .d8P 88 88 88 88 88 88
`Y8888' dP dP dP dP dP d88888P

Уведіть код, зображений у стилі Ascii-Арт.