Os mais populares podem ser BusyBox , mas também há caixa de ferramentas (usada pelo Android), toybox e talvez outros.
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?
Você provavelmente está se referindo ao Busybox , um shell "all-in-one".
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.
Tags command-line linux embedded