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 ash
shell molto minimalista utilizzata principalmente durante le operazioni di avvio. Si noti inoltre che l'autore della distribuzione ha scelto di includere i comandi autonomi bunzip2
e bzcat
invece di utilizzare le versioni di busybox. I collegamenti simbolici bunzip-BB-NOTUSED
e bzcat-BB-NOTUSED
non 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 -lL
o 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' -L
opzione 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 --help
opzioni e di attivare le versioni della GUI quando disponibili.