Qual é o comando do Linux que encapsula quase todos os outros comandos?

23

Lembro que, para o Linux executando em sistemas embarcados, devido a limitações de tamanho, ele não pode carregar tantos comandos quanto em estações de trabalho comuns. Portanto, há um do-it-all comando que pode imitar quase todos os comandos (incluindo ls, cd, time, etc.), mas eu não me lembro seu nome.

Acabei de me lembrar vagamente de algo como "minibox" ou algo assim, parece que tem uma "caixa" em seu nome, alguém sabe qual é o seu nome?

wangshuaijie
fonte
12
Chama-se busybox.
MariusMatutiae
6
Não vai imitar cd, porém, isso não é possível.
parar de prejudicar Monica
4
@ OrangeDog: ... mas ele irá imitar sh, que tem cdcomo um built-in.
Ilmari Karonen
O único a governar todos eles !!!
Shokhet
5
Ah, eu ia dizer emacs...
R ..

Respostas:

48

O mais popular pode ser o BusyBox , mas também existem caixas de ferramentas (usadas pelo Android), caixas de brinquedos e talvez outras.

LatinSuD
fonte
Vale esclarecer que o Busybox é um instalador, não um único binário mágico. Pelo menos não para Android. O Busybox é um instalador de ferramentas que não estão nativas no dispositivo. Ele analisa os binários já existentes no dispositivo e os adiciona. Para mim, ele colocou os novos binários em / system / xbin /.
Corey Ogburn
1
@ Corey você tem certeza? sua página sobre diz "BusyBox combina pequenas versões de muitos utilitários UNIX comuns em um único pequeno executável". .
RedGrittyBrick
Absolutamente. Não tenho tanta certeza sobre o iOS, mas no Android você precisa instalar o BusyBox. O aplicativo em si permite escolher qual versão do busybox e onde instalá-los. O Mine atualmente diz "BusyBox v1.22.1-Stericson está instalado. BusyBox está instalado em / system / xbin". Você pode olhar a lista de binários instalados e encontrá-los em / system / xbin /. Não é um shell, não é um binário tudo em um, é um pacote de binários e um instalador fácil.
Corey Ogburn
2
@ CoreyOgburn: O BusyBox original é o próprio aplicativo. O aplicativo Android, embora chamado de BusyBox, é apenas um aplicativo que instala o BusyBox "real". O próprio BusyBox é basicamente o mesmo, seja no Android, iOS, BSD ou qualquer outro sistema. Somente os instaladores podem diferir.
Michael Ehrenreich
3
E os "muitos executáveis" também não são verdadeiros; O busybox cria uma tonelada de links simbólicos para si mesmo. Por exemplo, grepprovavelmente é um link para o busybox. A única exceção será cdque tem que ser um shell embutido.
MSalters
14

Você provavelmente está se referindo ao Busybox , um shell "tudo em um".

Daniel B
fonte
3

O BusyBox foi projetado de uma maneira bastante nova que pode ser bastante confusa quando você começa a vasculhar os diretórios / bin.

Como MSalters indicou, o BusyBox é apenas um executável. Mas isso depende da criação de um link simbólico com o executável para cada "comando" nele. Ao saber o nome do link simbólico com o qual foi iniciado, ele sabe executar a função C para esse comando.

Assim, o início do meu diretório PuppyLinux 5.2.8 Lucid / bin se parece com ...

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

Observe que a maioria dos comandos são links simbólicos para busybox. Isso inclui o ashshell muito minimalista usado principalmente durante as operações de inicialização. Observe também que o autor da distribuição optou por incluir os comandos independentes bunzip2e, em bzcatvez de usar as versões do busybox. Os links simbólicos bunzip-BB-NOTUSEDe bzcat-BB-NOTUSEDnão são realmente necessários, mas ajudam a documentar o que está acontecendo apenas pelo custo de um link simbólico.

Observe também que um diretório que relate os tamanhos para o destino dos links simbólicos ( ls -lLou ls -l --dereference) em vez do próprio link simbólico, relatará o tamanho de cada comando como o mesmo de busybox. Assim, a mesma lista com a -Lopção mostra ...

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

O objetivo do BusyBox é a reutilização máxima de código dentro de si, a fim de minimizar a memória e o espaço em disco necessários (ou seja, a "área ocupada") para um conjunto comum de comandos ... sem exigir o próprio shell.

Bash e outras conchas realizam a mesma coisa. Mas, para isso, eles implementam seu próprio ambiente de linha de comando. Esse objetivo também é um dos motivos de algumas das sintaxes muito arcaicas de muitas funcionalidades do shell.

Atualmente, estou usando essa "técnica BusyBox" para uma biblioteca de funções do Bash e mais fácil de usar wrappers para vários bashismos . Ele me permitiu "estender" facilmente comandos com --helpopções e disparar versões da GUI, quando disponíveis.

DocSalvager
fonte