Що таке команда Linux, яка інкапсулює майже всі інші команди?


23

Я пам’ятаю, що для Linux, що працює у вбудованих системах, через обмеження розміру він не може запакувати стільки команд, як на звичайних робочих станціях. Так що є робити-це все команди , які можуть імітувати майже всі команди ( в тому числі ls, cd, timeі т.д.), але я не пам'ятаю його імені.

Я просто невиразно запам’ятав щось на кшталт «міні-скриньки» чи чогось, схоже на те, що в його назві є «коробка», хтось знає, як його звуть?


12
Це називається busybox.
MariusMatutiae

6
Це не імітуватиме, cdале це неможливо.
Зупиніть шкодити Моніці

4
@OrangeDog: ... але це буде імітувати sh, що має cdвбудований.
Ільмарі Каронен

Той, хто їм усім править !!!
Шохет

5
О, я збирався сказати emacs...
R ..

Відповіді:


48

Найпопулярнішим може бути BusyBox , але є також панель інструментів (використовується Android), іграшка і, можливо, інші.


Варто уточнити, що Busybox - це інсталятор, а не один магічний бінарний файл. Принаймні, не для Android. Busybox - це програма для встановлення інструментів, які не є вродженими на пристрої. Він переглядає бінарні файли, які вже є на пристрої, і додає їх. Для мене він розмістив нові бінарні файли в / system / xbin /.
Corey Ogburn

1
@Corey ви впевнені? його про сторінці говорить «BusyBox об'єднує крихітні версії багато чого стандартного утиліта UNIX в один невеликий виконуваний файл.» .
RedGrittyBrick

Абсолютно. Я не так впевнений в iOS, але в Android вам доведеться встановити BusyBox. Сам додаток дозволить вам вибрати, яку версію зайнятих і де їх встановити. Наразі шахта каже, що "BusyBox v1.22.1-Stericson встановлений. BusyBox встановлений на / system / xbin". Ви можете переглянути список встановлених бінарних файлів та знайти їх у / system / xbin /. Це не оболонка, це не бінарне все-в-одному, це пакет бінарних файлів та простий інсталятор.
Corey Ogburn

2
@CoreyOgburn: Оригінальний BusyBox - це сама програма. Додаток Android, хоча і названий BusyBox, - це лише додаток, який встановлює "справжній" BusyBox. Сам BusyBox в основному такий же, будь то на Android, iOS, BSD або будь-якій іншій системі. Тільки інсталятори можуть відрізнятися.
Майкл Еренрейх

3
І "багато виконуваних файлів" також не відповідає дійсності; busybox створює безліч символічних посилань на себе. Наприклад , grepймовірно , є посилання на BusyBox. Єдиним винятком буде те cd, що має бути вбудована оболонка.
MSalters


3

BusyBox розроблений досить новим способом, який може бути дуже заплутаним, коли ви починаєте роптатися у своїх каталогах / bin.

Як вказували MSalters , BusyBox - це лише один виконуваний файл. Але це залежить від створення символічного посилання на цей виконуваний файл для кожної "команди" в ньому. Знаючи ім'я символьної посилання, з якого було розпочато, воно знає, що запустить функцію C для цієї команди.

Таким чином, початок роботи мого каталогу PuppyLinux 5.2.8 Lucid / bin виглядає як ...

sh-4.1# ls -l
total 4889
lrwxrwxrwx 1 root root      7 2011-08-17 10:49 [ -> busybox
lrwxrwxrwx 1 root root      7 2011-08-17 10:49 [[ -> busybox
lrwxrwxrwx 1 root root      7 2011-08-17 10:49 addgroup -> busybox
lrwxrwxrwx 1 root root      7 2011-08-17 10:49 adduser -> busybox
lrwxrwxrwx 1 root root      7 2011-08-17 10:49 ash -> busybox
-rwxr-xr-x 1 root root   2844 2011-08-17 11:04 autologinroot
lrwxrwxrwx 1 root root      4 2011-08-17 10:49 awk -> gawk
lrwxrwxrwx 1 root root      7 2011-08-17 10:49 basename -> busybox
-rwxr-xr-x 1 root root 805960 2011-08-17 11:04 bash
-r-xr-xr-x 1 root root   6835 2011-01-21 01:29 bashbug
lrwxrwxrwx 1 root root      7 2011-08-17 10:49 bbconfig -> busybox
-rwxr-xr-x 1 root root  30200 2011-08-17 11:04 bunzip2
lrwxrwxrwx 1 root root      7 2011-08-17 10:49 bunzip2-BB-NOTUSED -> busybox
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 busybox
-rwxr-xr-x 1 root root  30200 2011-08-17 11:04 bzcat
lrwxrwxrwx 1 root root      7 2011-08-17 10:49 bzcat-BB-NOTUSED -> busybox

Зауважте, що більшість команд є посиланнями на busybox. Сюди входить ashдуже мінімалістична оболонка, яка використовується переважно під час завантажувальних операцій. Також зауважте, що автор дистрибутива вирішив включити окремі команди bunzip2та bzcatзамість використання версій зайнятих. Символьні посилання bunzip-BB-NOTUSEDі bzcat-BB-NOTUSEDнасправді не потрібні, але допоможуть документувати, що відбувається лише за вартість символьної посилання.

Зауважте також, що каталог, що повідомляє розміри для цілі символьних посилань ( ls -lLабо ls -l --dereference) замість самого посилання, повідомлятиме про розмір кожної команди таким самим, як у busybox. Таким чином, той же список із -Lопцією показує ...

sh-4.1# ls -lL
total 60402
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 [
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 [[
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 addgroup
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 adduser
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 ash
-rwxr-xr-x 1 root root   2844 2011-08-17 11:04 autologinroot
-rwxr-xr-x 1 root root 317880 2011-08-17 11:04 awk
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 basename
-rwxr-xr-x 1 root root 805960 2011-08-17 11:04 bash
-r-xr-xr-x 1 root root   6835 2011-01-21 01:29 bashbug
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 bbconfig
-rwxr-xr-x 1 root root  30200 2011-08-17 11:04 bunzip2
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 bunzip2-BB-NOTUSED
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 busybox
-rwxr-xr-x 1 root root  30200 2011-08-17 11:04 bzcat
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 bzcat-BB-NOTUSED

Завдання BusyBox - максимальне повторне використання коду всередині себе, щоб мінімізувати необхідну пам’ять та дисковий простір (тобто "слід") для загального набору команд ... без необхідності самої оболонки.

Баш та інші снаряди досягають того ж самого. Але для цього вони реалізують власне середовище командного рядка. Ця мета також є однією з причин деяких дуже архаїчних синтаксисів багатьох функцій оболонок.

Зараз я використовую цю техніку "BusyBox" для бібліотеки функцій Bash і простіше використовувати обгортки для різних башизмів . Це дозволило мені легко "розширювати" команди за допомогою --helpпараметрів та звільняти версії GUI, коли вони доступні.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.