È facile dare per scontati i comandi di Linux. Vengono forniti in bundle con il sistema quando installi Linux e spesso non ci chiediamo perché siano lì. Alcuni dei comandi di base, come cd
, kill
e echo
non sono sempre applicazioni indipendenti ma in realtà sono integrate nella tua shell. Altri, come ls
, mv
e cat
fanno parte di un pacchetto di utilità di base (spesso GNU coreutils
in particolare). Ma ci sono sempre delle alternative nel mondo dell'open source, e una delle più interessanti è BusyBox.
Cos'è BusyBox in Linux?
Più risorse Linux
- Comandi Linux cheat sheet
- Cheat sheet sui comandi avanzati di Linux
- Corso online gratuito:Panoramica tecnica RHEL
- Cheat sheet della rete Linux
- Cheat sheet di SELinux
- Cheat sheet dei comandi comuni di Linux
- Cosa sono i container Linux?
- I nostri ultimi articoli su Linux
BusyBox è un progetto open source (GPL) che fornisce semplici implementazioni di quasi 400 comandi comuni, inclusi ls
, mv
, ln
, mkdir
, more
, ps
, gzip
, bzip2
, tar
e grep
. Contiene anche una versione del linguaggio di programmazione awk
, l'editor di stream sed
, il controllo del filesystem fsck
, il rpm
e dpkg
gestori di pacchetti e, naturalmente, una shell (sh
) che fornisce un facile accesso a tutti questi comandi. In breve, contiene tutti i comandi essenziali necessari a un sistema POSIX per eseguire attività di manutenzione del sistema comuni, nonché molte attività utente e amministrative.
In effetti, contiene anche un init
comando che può essere lanciato come PID 1 per fungere da processo padre per tutti gli altri servizi di sistema. In altre parole, BusyBox può essere utilizzato come alternativa a systemd, OpenRC, sinit, init e altri demoni di lancio.
BusyBox è molto piccolo. Come eseguibile, è inferiore a 1 MB, quindi ha guadagnato gran parte della sua popolarità nello spazio incorporato, Edge e IoT, dove lo spazio su disco è prezioso. Nel mondo dei container e del cloud computing, è anche popolare come base per immagini container Linux minime.
Minimalismo
Parte del fascino di BusyBox è il suo minimalismo. Tutti i suoi comandi sono compilati in un unico binario (busybox
), e la sua pagina man è di sole 81 pagine (secondo il mio calcolo del piping man
a pr
) ma copre quasi 400 comandi.
Come esempio di confronto, ecco l'output di shadow
versione di useradd --help
:
-b, --base-dir BASE_DIR base directory for home
-c, --comment COMMENT GECOS field of the new account
-d, --home-dir HOME_DIR home directory of the new account
-D, --defaults print or change the default config
-e, --expiredate EXPIRE_DATE expiration date of the new account
-f, --inactive INACTIVE password inactivity
-g, --gid GROUP name or ID of the primary group
-G, --groups GROUPS list of supplementary groups
-h, --help display this help message and exit
-k, --skel SKEL_DIR alternative skeleton dir
-K, --key KEY=VALUE override /etc/login.defs
-l, --no-log-init do not add the user to the lastlog
-m, --create-home create the user's home directory
-M, --no-create-home do not create the user's home directory
-N, --no-user-group do not create a group with the user's name
-o, --non-unique allow users with non-unique UIDs
-p, --password PASSWORD encrypted password of the new account
-r, --system create a system account
-R, --root CHROOT_DIR directory to chroot into
-s, --shell SHELL login shell of the new account
-u, --uid UID user ID of the new account
-U, --user-group create a group with the same name as a user
Ed ecco la versione BusyBox dello stesso comando:
-h DIR Home directory
-g GECOS GECOS field
-s SHELL Login shell
-G GRP Group
-S Create a system user
-D Don't assign a password
-H Don't create home directory
-u UID User id
-k SKEL Skeleton directory (/etc/skel)
Il fatto che questa differenza sia o meno una caratteristica o una limitazione dipende dal fatto che tu preferisca avere 20 opzioni o dieci opzioni nei tuoi comandi. Per alcuni utenti e casi d'uso, il minimalismo di BusyBox fornisce quanto basta per ciò che deve essere fatto. Per altri, è un buon ambiente minimale da avere come ripiego o come base per l'installazione di strumenti più robusti come Bash, Zsh, GNU Awk e così via.
Installazione di BusyBox
Su Linux, puoi installare BusyBox usando il tuo gestore di pacchetti. Ad esempio, su Fedora e simili:
$ sudo dnf install busybox
Su Debian e derivati:
$ sudo apt install busybox
Su macOS, usa MacPorts o Homebrew. Su Windows, usa Chocolatey.
Puoi impostare BusyBox come shell usando chsh --shell
comando, seguito dal percorso di BusyBox sh
applicazione. Conservo BusyBox in /lib64
, ma la sua posizione dipende da dove è stata installata dalla tua distribuzione.
$ which busybox
/lib64/busybox/busybox
$ chsh --shell /lib64/busybox/sh
La sostituzione di tutti i comandi comuni all'ingrosso con BusyBox è un po' più complessa, perché la maggior parte delle distribuzioni sono "cablate" per cercare pacchetti specifici per comandi specifici. In altre parole, mentre è tecnicamente possibile sostituire init
con init
di BusyBox , il tuo gestore di pacchetti potrebbe rifiutarti di consentirti di rimuovere il pacchetto contenente init
per paura che il tuo sistema diventi non avviabile. Esistono alcune distribuzioni basate su BusyBox, quindi ricominciare da capo è probabilmente il modo più semplice per sperimentare un sistema basato su BusyBox.
Prova BusyBox
Non devi cambiare la tua shell in BusyBox in modo permanente solo per provarlo. Puoi avviare una shell BusyBox dalla tua shell attuale:
$ busybox sh
~ $
Il tuo sistema ha ancora le versioni dei comandi non BusyBox installate, quindi, per provare gli strumenti di BusyBox, devi emettere comandi come argomenti per busybox
eseguibile:
~ $ busybox echo $0
sh
~ $ busybox ls --help
BusyBox vX.YY.Z (2021-08-25 07:31:48 NZST) multi-call binary.
Usage: ls [-1AaCxdLHRFplinshrSXvctu] [-w WIDTH] [FILE]...
List directory contents
-1 One column output
-a Include entries that start with .
-A Like -a, but exclude . and ..
-x List by lines
[...]
Per l'esperienza "completa" di BusyBox, puoi creare collegamenti simbolici a busybox
per ogni comando. È più facile di quanto sembri, purché utilizzi un ciclo for:
$ mkdir bbx
$ for i in $(bbx --list); do \
ln -s /path/to/busybox bbx/$i \
done
Aggiungi la tua directory di collegamenti simbolici all'inizio del tuo percorso e avvia BusyBox:
$ PATH=$(pwd)/bbx:$PATH bbx/sh
Dai da fare
BusyBox è un progetto divertente e un esempio di quanto sia minimo l'informatica può essere. Sia che tu usi BusyBox come ambiente leggero per un vecchio computer che hai salvato, come userland per un dispositivo incorporato, per provare un nuovo sistema di inizializzazione, o semplicemente come curiosità, può essere divertente riacquistare familiarità con il vecchio familiare, ma in qualche modo nuovo, comandi.