Was ist der Linux-Befehl, der fast alle anderen Befehle kapselt?

23

Ich erinnere mich, dass Linux auf eingebetteten Systemen aufgrund von Größenbeschränkungen nicht so viele Befehle packen kann wie auf normalen Workstations. So gibt es einen Do-it-all - Befehl, der alle nachahmen können fast die Befehle (einschließlich ls, cd, time, etc.), aber ich erinnere mich nicht seinen Namen.

Ich erinnerte mich nur vage an etwas wie "Minibox" oder so, es scheint, als hätte es eine "Box" im Namen, weiß jemand, wie es heißt?

Wangshuaijie
quelle
12
Es heißt Busybox.
MariusMatutiae
6
Es wird aber nicht nachahmen cd, das ist nicht möglich.
Hören Sie auf, Monica am
4
@OrangeDog: ... aber es wird nachahmen sh, was cdso ein eingebautes hat.
Ilmari Karonen
Derjenige, der sie alle regiert !!!
Shokhet
5
D'oh, ich wollte sagen emacs...
R ..

Antworten:

48

Die beliebteste könnte BusyBox sein , aber es gibt auch Toolbox (von Android verwendet), Toybox und vielleicht andere.

LatinSuD
quelle
Es sollte klargestellt werden, dass Busybox ein Installationsprogramm ist und keine einzelne magische Binärdatei. Zumindest nicht für Android. Busybox ist ein Installationsprogramm für Tools, die nicht auf dem Gerät installiert sind. Es werden die bereits auf dem Gerät vorhandenen Binärdateien angezeigt und hinzugefügt. Für mich hat es die neuen Binärdateien in / system / xbin / abgelegt.
Corey Ogburn
1
@ Corey sind Sie sicher? Auf der About- Seite heißt es: "BusyBox kombiniert winzige Versionen vieler gängiger UNIX-Dienstprogramme in einer einzigen kleinen ausführbaren Datei." .
RedGrittyBrick
Absolut. Ich bin mir bei iOS nicht so sicher, aber bei Android muss BusyBox installiert werden. Über die App selbst können Sie auswählen, welche Version von busybox Sie wo installieren möchten. Meins sagt derzeit "BusyBox v1.22.1-Stericson ist installiert. BusyBox ist in / system / xbin installiert". Sie können sich die Liste der installierten Binärdateien ansehen und sie in / system / xbin / finden. Es ist keine Shell, es ist keine All-in-One-Binärdatei, es ist ein Paket von Binärdateien und ein einfaches Installationsprogramm.
Corey Ogburn
2
@CoreyOgburn: Die ursprüngliche BusyBox ist die Anwendung selbst. Die Android-App heißt zwar BusyBox, ist jedoch nur eine App, die die "echte" BusyBox installiert. BusyBox selbst ist im Grunde dasselbe, sei es auf Android, iOS, BSD oder einem anderen System. Nur die Installer können abweichen.
Michael Ehrenreich
3
Und die "vielen ausführbaren Dateien" sind auch nicht wahr; busybox erstellt eine Menge symbolischer Links zu sich selbst. ZB ist grepwahrscheinlich ein Link zur Busybox. Die einzige Ausnahme wird sein, cdda dies eine eingebaute Shell sein muss.
MSalters
14

Sie beziehen sich wahrscheinlich auf Busybox , eine All-in-One-Shell.

Daniel B
quelle
3

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 ashsehr minimalistische Shell ein, die vor allem bei Startvorgängen verwendet wird. Beachten Sie außerdem, dass der Distributionsautor die eigenständigen Befehle einbezog bunzip2und bzcatstattdessen die Busybox-Versionen verwendete. Die symbolischen Verweise bunzip-BB-NOTUSEDund bzcat-BB-NOTUSEDsind 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 -lLoder 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 -LOption ...

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 --helpOptionen "erweitern" und GUI-Versionen abfeuern, sofern verfügbar.

DocSalvager
quelle