Es ist einfach, Linux-Befehle als selbstverständlich hinzunehmen. Sie werden mit dem System gebündelt, wenn Sie Linux installieren, und wir hinterfragen oft nicht, warum sie da sind. Einige der grundlegenden Befehle, wie z cd
, kill
, und echo
sind nicht immer unabhängige Anwendungen, sondern sind tatsächlich in Ihre Shell integriert. Andere, wie z ls
, mv
, und cat
sind Teil eines zentralen Dienstprogrammpakets (oft GNU coreutils
speziell). Aber es gibt immer Alternativen in der Welt von Open Source, und eine der interessantesten ist BusyBox.
Was ist BusyBox unter Linux?
BusyBox ist ein Open-Source-Projekt (GPL), das einfache Implementierungen von fast 400 gängigen Befehlen bietet, einschließlich ls
, mv
, ln
, mkdir
, more
, ps
, gzip
, bzip2
, tar
, und grep
. Es enthält auch eine Version der Programmiersprache awk
, der Stream-Editor sed
, der Dateisystem-Checker fsck
, das rpm
und dpkg
Paketmanager und natürlich eine Shell (sh
), die einen einfachen Zugriff auf all diese Befehle bietet. Kurz gesagt, es enthält alle wesentlichen Befehle, die ein POSIX-System benötigt, um allgemeine Systemwartungsaufgaben sowie viele Benutzer- und Verwaltungsaufgaben auszuführen.
Tatsächlich enthält es sogar ein init
Befehl, der als PID 1 gestartet werden kann, um als übergeordneter Prozess für alle anderen Systemdienste zu dienen. Mit anderen Worten, BusyBox kann als Alternative zu systemd, OpenRC, sinit, init und anderen Start-Daemons verwendet werden.
BusyBox ist sehr klein. Als ausführbare Datei ist sie unter 1 MB groß, daher hat sie im Embedded-, Edge- und IoT-Bereich viel an Popularität gewonnen, wo der Festplattenspeicher knapp ist. In der Welt der Container und Cloud Computing ist es auch als Grundlage für minimale Linux-Container-Images beliebt.
Minimalismus
Ein Teil des Reizes von BusyBox ist sein Minimalismus. Alle seine Befehle sind in eine einzige Binärdatei kompiliert (busybox
), und die Manpage ist nur 81 Seiten lang (nach meiner Berechnung von Rohrleitungen) man
zu pr
) umfasst aber fast 400 Befehle.
Als Beispielvergleich hier die Ausgabe des shadow
Version von 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
Und hier ist die BusyBox-Version desselben Befehls:
-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)
Ob dieser Unterschied ein Feature oder eine Einschränkung ist oder nicht, hängt davon ab, ob Sie lieber 20 Optionen oder zehn Optionen in Ihren Befehlen haben möchten. Für einige Benutzer und Anwendungsfälle bietet der Minimalismus von BusyBox gerade genug für das, was getan werden muss. Für andere ist es eine gute minimale Umgebung als Fallback oder als Grundlage für die Installation robusterer Tools wie Bash, Zsh, GNU Awk und so weiter.
BusyBox installieren
Unter Linux können Sie BusyBox mit Ihrem Paketmanager installieren. Zum Beispiel auf Fedora und ähnlichem:
$ sudo dnf install busybox
Auf Debian und Derivaten:
$ sudo apt install busybox
Verwenden Sie unter macOS MacPorts oder Homebrew. Verwenden Sie unter Windows Chocolatey.
Sie können BusyBox als Ihre Shell festlegen, indem Sie die chsh --shell
Befehl, gefolgt vom Pfad zur BusyBox sh
Anwendung. Ich behalte BusyBox in /lib64
, aber der Speicherort hängt davon ab, wo Ihre Distribution es installiert hat.
$ which busybox
/lib64/busybox/busybox
$ chsh --shell /lib64/busybox/sh
Das Ersetzen aller gängigen Befehle en gros durch BusyBox ist etwas komplexer, da die meisten Distributionen “fest verdrahtet” sind, um nach bestimmten Befehlen in bestimmten Paketen zu suchen. Mit anderen Worten, während es technisch möglich ist, zu ersetzen init
mit BusyBox’s init
, kann Ihr Paketmanager Ihnen das Entfernen des Pakets verweigern, das . enthält init
aus Angst, dass Ihr System dadurch nicht mehr bootfähig wird. Es gibt einige Distributionen, die auf BusyBox basieren, daher ist ein Neuanfang wahrscheinlich der einfachste Weg, um ein System zu erleben, das auf BusyBox basiert.
Testen Sie BusyBox
Sie müssen Ihre Shell nicht dauerhaft auf BusyBox umstellen, nur um es auszuprobieren. Sie können eine BusyBox-Shell von Ihrer aktuellen Shell aus starten:
$ busybox sh
~ $
Auf Ihrem System sind jedoch immer noch die Nicht-BusyBox-Versionen von Befehlen installiert. Um die Tools von BusyBox zu nutzen, müssen Sie Befehle als Argumente an die busybox
ausführbar:
~ $ 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
[...]
Für das “vollständige” BusyBox-Erlebnis können Sie Symlinks zu . erstellen busybox
für jeden Befehl. Das ist einfacher als es klingt, solange Sie eine for-Schleife verwenden:
$ mkdir bbx
$ for i in $(bbx --list); do
ln -s /path/to/busybox bbx/$i
done
Fügen Sie Ihr Symlink-Verzeichnis unter der . hinzu Anfang Ihres Pfades und starten Sie BusyBox:
$ PATH=$(pwd)/bbx:$PATH bbx/sh
Beschäftige dich
BusyBox ist ein lustiges Projekt und ein Beispiel dafür, wie es geht minimal Rechnen sein kann. Egal, ob Sie BusyBox als leichtgewichtige Umgebung für einen alten Computer, den Sie gerettet haben, als Benutzerland für ein eingebettetes Gerät, zum Testen eines neuen Init-Systems oder einfach nur als Kuriosität verwenden, es kann Spaß machen, Altbekanntes wiederzuerlangen, aber irgendwie neu, Befehle.