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

23

Eu me lembro que para Linux rodando em sistemas embarcados, devido a limitações de tamanho, ele não pode armazenar tantos comandos quanto em estações de trabalho comuns. Portanto, há um comando do tipo "faça tudo" que pode imitar quase todos os comandos (incluindo ls , cd , time , etc.), mas não me lembro de seu nome.

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

    
por wangshuaijie 27.06.2014 / 11:17

3 respostas

48

Os mais populares podem ser BusyBox , mas também há caixa de ferramentas (usada pelo Android), toybox e talvez outros.

    
por 27.06.2014 / 11:20
14

Você provavelmente está se referindo ao Busybox , um shell "all-in-one".

    
por 27.06.2014 / 11:20
3
O

BusyBox é projetado de uma maneira bastante inovadora que pode ser um pouco confusa quando você começa a vasculhar seus diretórios / bin.

Como MSalters indicaram, o BusyBox é apenas um executável. Mas isso depende de um link simbólico ser criado para esse executável para cada "comando" nele. Conhecendo o nome do symlink com o qual foi iniciado, ele sabe executar a função C desse comando.

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

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 shell ash very 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 bunzip2 e bzcat em vez de usar as versões do busybox. Os links simbólicos bunzip-BB-NOTUSED e bzcat-BB-NOTUSED não são realmente necessários, mas ajudam a documentar o que está acontecendo apenas pelo custo de um link simbólico.

Note também que uma lista de diretórios que relate tamanhos para o destino de links simbólicos ( ls -lL ou ls -l --dereference ) em vez do link simbólico, informará o tamanho de cada comando como o mesmo de busybox . Assim, a mesma lista com a opção -L 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 máxima reutilização de código em si, a fim de minimizar a memória e o espaço em disco necessários (ou seja, a "pegada") para um conjunto comum de comandos ... sem a necessidade de um shell.

Bash e outros shells realizam a mesma coisa. Mas, para isso, eles implementam seu próprio ambiente de linha de comando. Este objetivo é também uma das razões para algumas das sintaxes muito arcaicas para muitas funcionalidades do shell.

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

    
por 03.07.2014 / 06:35