BusyBox wird heutzutage immer beliebter, insbesondere bei Docker-Benutzern. Viele Docker-Images verwenden BusyBox, um Ihnen ein minimales Image bereitzustellen.
Und dies könnte viele Benutzer verwirren, insbesondere wenn Sie Linux-Befehle als selbstverständlich ansehen. Sie denken, dass ls, mv und andere derartige Befehle Teil von Linux sind, während die Wahrheit ist, dass diese Befehle Teil des GNU Coreutils-Pakets sind und die meisten Linux-Distributionen es vorinstalliert haben.
GNU Coreutils ist praktisch der De-facto-Anbieter verschiedener UNIX/Linux-Befehle. Fast, weil es immer Alternativen gibt und BusyBox eine solche Alternative zu GNU Coreutils ist.
Was ist BusyBox?
BusyBox ist ein Open-Source-Projekt, das eine abgespeckte Implementierung von rund 400 gängigen UNIX/Linux-Befehlen bereitstellt. Vereinfachte? Ja. Die BusyBox-Implementierung entfernt die ungewöhnlichen, selten verwendeten Befehlsoptionen. Alles passt unter 1 MB und dieses minimale Bild ist der Grund, warum es bei eingebetteten Systemen und im IoT-Bereich sowie in der Cloud-Computing-Welt an Popularität gewonnen hat.
Gehen Sie nicht nach seiner Größe. BusyBox hat Spielraum für sed und awk wie klassische Editoren (wieder abgespeckte Version) und enthält auch eine eigene Shell. Es enthält sogar einen Init-Befehl, der als PID 1 gestartet werden kann. Das bedeutet, dass BusyBox als Alternative zu Systemd, OpenRC usw. konfiguriert werden kann.
BusyBox ist eine hervorragende Alternative zu GNU Coreutils, insbesondere in Fällen, in denen die geringe Größe des Betriebssystems eine große Rolle spielt.
🗒️BusyBox bietet Ihnen beliebte Linux-Befehle wie mv, mkdir, ls usw., enthält jedoch nur die häufig verwendeten Optionen dieser Befehle. Dieser Minimalismus ist der USP von BusyBox.Ist es ein Problem, dass Sie nicht den vollständigen Linux-Befehl erhalten Optionen mit BusyBox?
Das hängt wirklich von Ihrem Bedarf ab. Die meisten Menschen werden nie alle Optionen eines Befehls benötigen. Einige Linux-Befehle haben mehr als 50 Optionen und ich wette, Sie haben nie alle Optionen eines einzigen Linux-Befehls verwendet.
BusyBox reduziert die selten verwendeten Optionen. Beispielsweise hat der Befehl ls die Option G, die den Gruppennamen aus der Ausgabe der langen Liste entfernt (ls -l).
Nun, ich denke, Sie haben diese Option nie gebraucht. Aus diesem Grund ist es in der ls-Implementierung von BusyBox nicht vorhanden. Wenn Sie wirklich eine Ausgabe benötigen, in der der Gruppenname nicht enthalten ist, brauchen Sie zu diesem Zweck nur den Befehl cut oder awk zu verwenden.
Nehmen Sie ein anderes Beispiel. Dies ist die Hilfeseite des mv-Befehls von 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
Hier ist nun die Hilfeseite für den mv-Befehl von 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
Sieh den Unterschied?
Wie bekomme ich BusyBox?
Es gibt verschiedene Möglichkeiten, BusyBox zu erhalten.
Wenn Sie BusyBox einfach auf Ihrer aktuellen Linux-Distribution erleben möchten, können Sie es mit dem Paketmanager Ihrer Distribution wie Apt oder DNF oder Yum installieren.
Unter Ubuntu können Sie diesen Befehl verwenden, um BusyBox zu installieren:
sudo apt install busybox
Wenn Sie danach die BusyBox-Version eines Befehls ausführen möchten, müssen Sie busybox davor hinzufügen.
busybox cat sample.txt
Wenn ein Befehl nicht von BusyBox implementiert wird, wirft es einen Fehler, dass 'Applet nicht gefunden'.
[email protected]:~$ busybox xyz
xyz: applet not found
Alternativ , können Sie das Docker-Image von BusyBox herunterladen und in einem laufenden Container testen.
Bitte stellen Sie sicher, dass Sie Docker installiert haben. Ziehen Sie das offizielle Docker-Image:
docker pull busybox
Führen Sie einen Container aus dem Image aus und rufen Sie die BusyBox-Shell auf:
docker run -it --rm busybox
Jeder Linux-Befehl, den Sie hier ausführen, kommt von BusyBox. Sie müssen es nicht explizit angeben.
Insgesamt brauchen Sie BusyBox auf einem normalen Linux-System nicht. Sie haben dort bereits die Vollversion der Linux-Befehle von GNU Coreutils. Es besteht keine Notwendigkeit, eine abgespeckte Version zu installieren.
BusyBox wird jedoch in speziellen Bereichen verwendet, z. B. wenn Sie ein minimales Linux-Betriebssystem für eingebettete oder IoT-Geräte konfigurieren. Das Gleiche gilt, wenn Sie die Größe Ihres Docker-Images klein halten möchten.
Ich hoffe, Sie haben ein besseres Verständnis von BusyBox. Wenn Sie eine Klärung benötigen oder einen Vorschlag haben, lassen Sie es mich bitte in den Kommentaren wissen.