BusyBox ist auf eine ziemlich neue Art und Weise entworfen, die ziemlich verwirrend sein kann, wenn Sie anfangen, in Ihren / bin-Verzeichnissen herumzusuchen.
Wie von MSalters angegeben, ist BusyBox nur eine ausführbare Datei. Es hängt jedoch davon ab, dass für jeden "Befehl" eine symbolische Verknüpfung zu dieser ausführbaren Datei erstellt wird. Wenn der Name des Symlinks bekannt ist, mit dem er gestartet wurde, kann er die C-Funktion für diesen Befehl ausführen.
So sieht der Start meines PuppyLinux 5.2.8 Lucid / bin-Verzeichnisses aus wie ...
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
Beachten Sie, dass es sich bei den meisten Befehlen um Symlinks zu handelt busybox
. Dies schließt die ash
sehr minimalistische Shell ein, die vor allem bei Startvorgängen verwendet wird. Beachten Sie außerdem, dass der Distributionsautor die eigenständigen Befehle einbezog bunzip2
und bzcat
stattdessen die Busybox-Versionen verwendete. Die symbolischen Verweise bunzip-BB-NOTUSED
und bzcat-BB-NOTUSED
sind nicht wirklich notwendig, helfen aber zu dokumentieren, was gerade für die Kosten eines symbolischen Verweises los ist.
Beachten Sie auch, dass ein Verzeichnis, das Größen für das Ziel von Symlinks ( ls -lL
oder ls -l --dereference
) anstelle des Symlinks selbst angibt, die Größe jedes Befehls mit der von angibt busybox
. So zeigt die gleiche Liste mit der -L
Option ...
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
Das Ziel von BusyBox ist die maximale Wiederverwendung von Code in sich selbst, um den Speicher- und Plattenplatzbedarf (dh den "Platzbedarf") für einen allgemeinen Befehlssatz zu minimieren ... ohne eine Shell selbst zu benötigen.
Bash und andere Muscheln erreichen dasselbe. Dazu implementieren sie jedoch ihre eigene Befehlszeilenumgebung. Dieses Ziel ist auch einer der Gründe für einige der sehr archaischen Syntax für viele Shell-Funktionalitäten.
Ich verwende derzeit diese "BusyBox-Technik" für eine Bibliothek von Bash-Funktionen und einfachere Verwendung von Wrappern für verschiedene Bashismen . Damit kann ich Befehle einfach mit --help
Optionen "erweitern" und GUI-Versionen abfeuern, sofern verfügbar.