23

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

Я просто смутно вспомнил что-то вроде "минибокса" или что-то вроде того, в названии которого есть "коробка", кто-нибудь знает, как ее зовут?

3 ответа3

48

Самым популярным может быть BusyBox, но есть также набор инструментов (используется Android), toybox и, возможно, другие.

14

Вы, вероятно, имеете в виду Busybox, оболочку «все в одном».

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 вместо использования версий busybox. 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 и более простую в использовании оболочку для различных bashisms. Это позволило мне легко "расширять" команды с помощью параметров --help и запускать версии GUI, когда они доступны.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .