Quelle est la commande Linux qui encapsule presque toutes les autres commandes?

23

Je me souviens que pour Linux fonctionnant dans des systèmes embarqués, en raison de limitations de taille, il ne peut pas contenir autant de commandes que sur les postes de travail ordinaires. Donc , il y a un do-it-all qui peut imiter presque toutes les commandes (y compris ls, cd, time, etc.), mais je ne me rappelle pas son nom.

Je me suis juste souvenu vaguement de quelque chose comme "minibox" ou quelque chose, il semble avoir une "boîte" dans son nom, quelqu'un sait-il quel est son nom?

wangshuaijie
la source
12
Cela s'appelle la boîte occupée.
MariusMatutiae
6
Cela n'imitera pas cdcependant, ce n'est pas possible.
Arrêtez de nuire à Monica le
4
@OrangeDog: ... mais il imitera sh, qui a cdcomme intégré.
Ilmari Karonen
Celui qui les gouverne tous !!!
Shokhet
5
D'oh, j'allais dire emacs...
R ..

Réponses:

48

Le plus populaire pourrait être BusyBox , mais il existe également une boîte à outils (utilisée par Android), une boîte à jouets et peut-être d'autres.

LatinSuD
la source
Il vaut la peine de préciser que Busybox est un installateur, pas un seul binaire magique. Du moins pas pour Android. Busybox est un programme d'installation pour les outils qui ne sont pas nativement sur l'appareil. Il examine les fichiers binaires déjà présents sur l'appareil et les ajoute. Pour moi, il a placé les nouveaux binaires dans / system / xbin /.
Corey Ogburn
1
@Corey, tu es sûr? sa page à propos indique "BusyBox combine de minuscules versions de nombreux utilitaires UNIX courants en un seul petit exécutable." .
RedGrittyBrick
Absolument. Je ne suis pas aussi sûr d'iOS, mais dans Android, vous devez installer BusyBox. L'application elle-même vous permet de choisir quelle version de busybox et où les installer. Le mien dit actuellement "BusyBox v1.22.1-Stericson est installé. BusyBox est installé sur / system / xbin". Vous pouvez consulter la liste des binaires installés et les trouver dans / system / xbin /. Ce n'est pas un shell, ce n'est pas un binaire tout-en-un, c'est un paquet de binaires et un installateur facile.
Corey Ogburn
2
@CoreyOgburn: le BusyBox d'origine est l'application elle-même. L'application Android, bien que nommée BusyBox, n'est qu'une application qui installe la "vraie" BusyBox. BusyBox lui-même est fondamentalement le même, que ce soit sur Android, iOS, BSD ou tout autre système. Seuls les installateurs peuvent différer.
Michael Ehrenreich
3
Et les "nombreux exécutables" ne sont pas vrais non plus; busybox crée une tonne de liens symboliques vers lui-même. Par exemple, grepil s'agit probablement d'un lien vers busybox. La seule exception va être cdcar cela doit être un shell intégré.
MSalters
14

Vous faites probablement référence à Busybox , un shell «tout-en-un».

Daniel B
la source
3

BusyBox est conçu d'une manière assez originale qui peut être assez déroutante lorsque vous commencez à fouiller dans vos répertoires / bin.

Comme MSalters l'a indiqué, BusyBox n'est qu'un exécutable. Mais cela dépend de la création d'un lien symbolique vers cet exécutable pour chaque "commande" qu'il contient. En connaissant le nom du lien symbolique avec lequel il a été démarré, il sait exécuter la fonction C pour cette commande.

Ainsi, le début de mon répertoire PuppyLinux 5.2.8 Lucid / bin ressemble à ...

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

Notez que la plupart des commandes sont des liens symboliques vers busybox. Cela inclut le ashshell très minimaliste utilisé principalement pendant les opérations de démarrage. Notez également que l'auteur de la distribution a choisi d'inclure les commandes autonomes bunzip2et bzcatau lieu d'utiliser les versions de busybox. Les liens symboliques bunzip-BB-NOTUSEDet bzcat-BB-NOTUSEDne sont pas vraiment nécessaires, mais aident à documenter ce qui se passe pour le coût d'un lien symbolique.

Notez également qu'un répertoire répertoriant les tailles de la cible des liens symboliques ( ls -lLou ls -l --dereference) au lieu du lien symbolique lui-même, indiquera la taille de chaque commande comme étant identique à celle de busybox. Ainsi, la même liste avec l' -Loption montre ...

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'objectif de BusyBox est la réutilisation maximale du code en lui-même afin de minimiser la mémoire et l'espace disque requis (c'est-à-dire "l'empreinte") pour un ensemble commun de commandes ... sans nécessiter un shell lui-même.

Bash et autres obus accomplissent la même chose. Mais pour ce faire, ils implémentent leur propre environnement de ligne de commande. Cet objectif est également l'une des raisons de la syntaxe très archaïque de nombreuses fonctionnalités du shell.

J'utilise actuellement cette "technique BusyBox" pour une bibliothèque de fonctions Bash et des wrappers plus faciles à utiliser pour divers bashismes . Il m'a permis "d'étendre" facilement les commandes avec des --helpoptions et de lancer des versions GUI lorsqu'elles sont disponibles.

DocSalvager
la source