Что такое команда Linux, которая инкапсулирует почти все другие команды?


23

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

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


12
Это называется busybox.
MariusMatutiae

6
cdХотя это не будет имитировать , это невозможно.
Стоп Harm Monica

4
@OrangeDog: ... но он будет имитировать sh, который имеет cdвстроенный.
Ильмари Каронен

Тот, кто правит ими всеми !!!
Шохет

5
О, я собирался сказать emacs...
R ..

Ответы:


48

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


Стоит уточнить, что Busybox - это установщик, а не отдельный магический бинарный файл. По крайней мере, не для Android. Busybox - это установщик для инструментов, которые изначально не установлены на устройстве. Он смотрит на двоичные файлы уже на устройстве и добавляет к ним. Для меня он поместил новые двоичные файлы в / system / xbin /.
Кори Огберн

1
@ Кори, ты уверен? его о странице говорит «BusyBox объединяет крошечные версии многого стандартного утилита UNIX в один небольшой исполняемый файл.» ,
RedGrittyBrick

Абсолютно. Я не так уверен насчет iOS, но в Android вы должны установить BusyBox. Само приложение позволяет вам выбрать, какая версия busybox и где их установить. Мой в настоящее время говорит: «BusyBox v1.22.1-Stericson установлен. BusyBox установлен в / system / xbin». Вы можете посмотреть список установленных двоичных файлов и найти их в / system / xbin /. Это не оболочка, это не все-в-одном двоичный файл, это набор двоичных файлов и простой установщик.
Кори Огберн

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не использовать версии 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, когда они доступны.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.