Qual è il comando Linux che incapsula quasi tutti gli altri comandi?


23

Ricordo che per Linux in esecuzione in sistemi embedded, a causa delle limitazioni di dimensione, non può contenere tanti comandi quanti ne siano le normali workstation. Quindi non v'è un fai-da-tutti i comandi che possono mimare quasi tutti i comandi (tra cui ls, cd, time, etc.), ma non ricordo il suo nome.

Ho appena ricordato vagamente qualcosa come "minibox" o qualcosa del genere, sembra che abbia una "scatola" nel suo nome, qualcuno sa come si chiama?


12
Si chiama busybox.
MariusMatutiae,

6
Non imiterà cdperò, non è possibile.
Smetti di fare del male a Monica il

4
@OrangeDog: ... ma imiterà sh, che ha cdcome incorporato.
Ilmari Karonen,

Quello che li governa tutti !!!
Shokhet,

5
D'oh, stavo per dire emacs...
R ..

Risposte:


48

Il più popolare potrebbe essere BusyBox , ma ci sono anche toolbox (usato da Android), toybox e forse altri.


Vale la pena chiarire che Busybox è un programma di installazione, non un singolo binario magico. Almeno non per Android. Busybox è un programma di installazione per strumenti che non sono nativi sul dispositivo. Guarda i binari già presenti sul dispositivo e li aggiunge. Per me, ha inserito i nuovi binari in / system / xbin /.
Corey Ogburn,

1
@Corey sei sicuro? sulla sua pagina dice "BusyBox combina minuscole versioni di molte comuni utility UNIX in un unico piccolo eseguibile". .
RedGrittyBrick,

Assolutamente. Non sono sicuro di iOS, ma in Android devi installare BusyBox. L'app stessa ti consente di scegliere quale versione di busybox e dove installarli. Il mio attualmente dice "BusyBox v1.22.1-Stericson è installato. BusyBox è installato su / system / xbin". Puoi guardare l'elenco dei file binari installati e trovarli in / system / xbin /. Non è una shell, non è un binario all-in-one, è un insieme di file binari e un semplice programma di installazione.
Corey Ogburn,

2
@CoreyOgburn: l'originale BusyBox è l'applicazione stessa. L'app Android, sebbene chiamata BusyBox, è solo un'app che installa il "vero" BusyBox. BusyBox stesso è sostanzialmente lo stesso, sia su Android, iOS, BSD o qualsiasi altro sistema. Solo gli installatori possono differire.
Michael Ehrenreich,

3
E neanche i "molti eseguibili" sono veri; busybox crea una tonnellata di collegamenti simbolici a se stesso. Ad esempio, grepprobabilmente è un collegamento a busybox. L'unica eccezione sarà cdquella che deve essere una shell integrata.
MSalters,


3

BusyBox è progettato in un modo abbastanza nuovo che può essere abbastanza confuso quando inizi a frugare nelle tue directory / bin.

Come indicato da MSalters , BusyBox è solo un eseguibile. Ma dipende da un collegamento simbolico creato a quell'eseguibile per ogni "comando" in esso. Conoscendo il nome del collegamento simbolico con cui è stato avviato, sa eseguire la funzione C per quel comando.

Quindi, l'inizio della mia directory Lucid / bin PuppyLinux 5.2.8 sembra ...

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

Si noti che la maggior parte dei comandi sono collegamenti simbolici a busybox. Ciò include la ashshell molto minimalista utilizzata principalmente durante le operazioni di avvio. Si noti inoltre che l'autore della distribuzione ha scelto di includere i comandi autonomi bunzip2e bzcatinvece di utilizzare le versioni di busybox. I collegamenti simbolici bunzip-BB-NOTUSEDe bzcat-BB-NOTUSEDnon sono realmente necessari, ma aiutano a documentare ciò che sta accadendo al solo costo di un collegamento simbolico.

Si noti inoltre che un elenco di directory che riporta le dimensioni per la destinazione dei collegamenti simbolici ( ls -lLo ls -l --dereference) anziché il collegamento simbolico stesso, riporterà la dimensione di ciascun comando uguale a quella di busybox. Quindi la stessa lista con l' -Lopzione 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

L'obiettivo di BusyBox è il massimo riutilizzo del codice al suo interno al fine di ridurre al minimo la memoria e lo spazio su disco richiesti (ovvero "footprint") per un insieme comune di comandi ... senza richiedere una shell stessa.

Bash e altri gusci realizzano la stessa cosa. Ma per farlo, implementano il loro ambiente a riga di comando. Questo obiettivo è anche uno dei motivi di alcune sintassi molto arcaiche per molte funzionalità della shell.

Attualmente sto usando questa "tecnica BusyBox" per una libreria di funzioni Bash e wrapper più facili da usare per vari bashismi . Mi ha permesso di "estendere" facilmente i comandi con le --helpopzioni e di attivare le versioni della GUI quando disponibili.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.