BusyBox sta diventando popolare in questi giorni, specialmente tra gli utenti Docker. Molte immagini Docker utilizzano BusyBox per fornire un'immagine minima.
E questo potrebbe lasciare molti utenti confusi, specialmente se dai per scontati i comandi di Linux. Pensi che ls, mv e altri comandi simili facciano parte di Linux, mentre la verità è che questi comandi fanno parte del pacchetto GNU Coreutils e la maggior parte delle distribuzioni Linux lo ha preinstallato.
GNU Coreutils è quasi il fornitore de facto di vari comandi UNIX/Linux. Quasi perché ci sono sempre alternative e BusyBox è una di queste alternative a GNU Coreutils.
Cos'è BusyBox?
BusyBox è un progetto open source che fornisce un'implementazione ridotta di circa 400 comandi UNIX/Linux comuni. Ridotta? Sì. L'implementazione di BusyBox rimuove le opzioni di comando non comuni e usate raramente. Tutto si adatta a meno di 1 MB e questa immagine minima è il motivo per cui ha guadagnato popolarità tra i sistemi embedded e il dominio IoT, nonché nel mondo del cloud computing.
Non andare per le sue dimensioni. BusyBox ha spazio per sed e awk come gli editor classici (versione ridotta di nuovo) e contiene anche la propria shell. Contiene anche un comando init che può essere lanciato come PID 1. Ciò significa che BusyBox può essere configurato come alternativa a Systemd, OpenRC ecc.
BusyBox è un'ottima alternativa a GNU Coreutils, specialmente nei casi in cui le dimensioni ridotte del sistema operativo contano molto.
🗒️BusyBox ti offre comandi Linux popolari come mv, mkdir, ls ecc. Ma contiene solo le opzioni comunemente utilizzate di questi comandi. Questo minimalismo è l'USP di BusyBox.È un problema che non si ottiene il comando Linux completo opzioni con BusyBox?
Dipende dalle tue necessità, davvero. La maggior parte delle persone non avrà mai bisogno di tutte le opzioni di un comando. Alcuni comandi Linux hanno più di 50 opzioni e scommetto che non hai mai usato tutte le opzioni nemmeno di un singolo comando Linux.
BusyBox riduce le opzioni utilizzate raramente. Ad esempio, il comando ls ha l'opzione G che rimuove il nome del gruppo dall'output dell'elenco lungo (ls -l).

Ora, penso che tu non abbia mai avuto bisogno di questa opzione. Questo è il motivo per cui non è presente nell'implementazione ls di BusyBox. Se hai davvero bisogno di un output in cui il nome del gruppo non sia incluso, tutto ciò che devi fare è usare il comando cut o awk a tale scopo.
Prendi un altro esempio. Questa è la pagina della guida del comando mv di GNU Coreutils:
Usage: mv [OPTION]... [-T] SOURCE DEST
or: mv [OPTION]... SOURCE... DIRECTORY
or: mv [OPTION]... -t DIRECTORY SOURCE...
Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.
Mandatory arguments to long options are mandatory for short options too.
--backup[=CONTROL] make a backup of each existing destination file
-b like --backup but does not accept an argument
-f, --force do not prompt before overwriting
-i, --interactive prompt before overwrite
-n, --no-clobber do not overwrite an existing file
If you specify more than one of -i, -f, -n, only the final one takes effect.
--strip-trailing-slashes remove any trailing slashes from each SOURCE
argument
-S, --suffix=SUFFIX override the usual backup suffix
-t, --target-directory=DIRECTORY move all SOURCE arguments into DIRECTORY
-T, --no-target-directory treat DEST as a normal file
-u, --update move only when the SOURCE file is newer
than the destination file or when the
destination file is missing
-v, --verbose explain what is being done
-Z, --context set SELinux security context of destination
file to default type
--help display this help and exit
--version output version information and exit
Ora, ecco la pagina della guida del comando mv da BusyBox:
Usage: mv [-fin] SOURCE DEST
or: mv [-fin] SOURCE... DIRECTORY
Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY
-f Don't prompt before overwriting
-i Interactive, prompt before overwrite
-n Don't overwrite an existing file
Vedi la differenza?
Come ottenere BusyBox?
Esistono vari modi per ottenere BusyBox.
Se vuoi semplicemente provare BusyBox sulla tua attuale distribuzione Linux, puoi installarlo usando il gestore di pacchetti della tua distribuzione come Apt o DNF o Yum.
Su Ubuntu, puoi usare questo comando per installare BusyBox:
sudo apt install busybox
Dopodiché, se vuoi eseguire la versione BusyBox di un comando, devi prima aggiungere busybox.
busybox cat sample.txt
Se un comando non è implementato da BusyBox, genera un errore "applet non trovata".
[email protected]:~$ busybox xyz
xyz: applet not found
In alternativa , puoi scaricare l'immagine Docker di BusyBox e sperimentarla in un contenitore in esecuzione.
Assicurati di aver installato Docker. Estrai l'immagine ufficiale della finestra mobile:
docker pull busybox
Esegui un contenitore dall'immagine e inserisci la shell BusyBox:
docker run -it --rm busybox
Ogni comando Linux che esegui qui proviene da BusyBox. Non è necessario specificarlo in modo esplicito.

Complessivamente, non hai bisogno di BusyBox su un normale sistema Linux. Hai già la versione completa dei comandi Linux da GNU Coreutils lì. Non è necessario installare una versione ridotta.
Ma BusyBox ha il suo utilizzo in aree speciali come quando si configura un sistema operativo Linux minimo per dispositivi embedded o IoT. Lo stesso vale quando vuoi mantenere piccole le dimensioni dell'immagine Docker.
Spero che tu abbia una migliore comprensione di BusyBox. Se hai bisogno di chiarimenti o di suggerimenti, faccelo sapere nei commenti.