¿Cuál es el comando de Linux que encapsula casi todos los otros comandos?

23

Recuerdo que para Linux que se ejecuta en sistemas integrados, debido a limitaciones de tamaño, no puede empaquetar tantos comandos como en estaciones de trabajo normales. Así que hay un do-it-all que puede imitar casi todos los comandos (incluyendo ls, cd, time, etc.), pero no recuerdo su nombre.

Acabo de recordar vagamente algo como "minibox" o algo así, parece que tiene una "caja" en su nombre, ¿alguien sabe cuál es su nombre?

wangshuaijie
fuente
12
Se llama busybox.
MariusMatutiae
66
Sin cdembargo, no imitará , eso no es posible.
Deja de dañar a Monica el
44
@OrangeDog: ... pero imitará sh, lo que tiene cdincorporado.
Ilmari Karonen
¡El que los gobierna a todos!
Shokhet
55
Oh, iba a decir emacs...
R ..

Respuestas:

48

El más popular podría ser BusyBox , pero también hay caja de herramientas (utilizada por Android), toybox y tal vez otros.

LatinSuD
fuente
Vale la pena aclarar que Busybox es un instalador, no un solo binario mágico. Al menos no para Android. Busybox es un instalador para herramientas que no están nativas en el dispositivo. Mira los binarios que ya están en el dispositivo y los agrega. Para mí, colocó los nuevos binarios en / system / xbin /.
Corey Ogburn
1
@Corey, ¿estás seguro? su página acerca dice "BusyBox combina pequeñas versiones de muchas utilidades comunes de UNIX en un solo pequeño ejecutable". .
RedGrittyBrick
Absolutamente. No estoy tan seguro sobre iOS, pero en Android tienes que instalar BusyBox. La aplicación en sí te permite elegir qué versión de busybox y dónde instalarlos. El mío dice actualmente "BusyBox v1.22.1-Stericson está instalado. BusyBox está instalado en / system / xbin". Puede consultar la lista de binarios instalados y encontrarlos en / system / xbin /. No es un shell, no es un binario todo en uno, es un paquete de binarios y un instalador fácil.
Corey Ogburn
2
@CoreyOgburn: El BusyBox original es la aplicación en sí. La aplicación de Android, aunque se llama BusyBox, es solo una aplicación que instala el BusyBox "real". BusyBox es básicamente el mismo, ya sea en Android, iOS, BSD o cualquier otro sistema. Solo los instaladores pueden diferir.
Michael Ehrenreich
3
Y los "muchos ejecutables" tampoco son ciertos; busybox crea una tonelada de enlaces simbólicos consigo mismo. Por ejemplo, grepprobablemente es un enlace a busybox. La única excepción será cdque debe ser un shell incorporado.
MSalters
14

Probablemente se esté refiriendo a Busybox , un shell "todo en uno".

Daniel B
fuente
3

BusyBox está diseñado de una manera bastante novedosa que puede ser bastante confuso cuando comienzas a hurgar en tus directorios / bin.

Como MSalters indicó, BusyBox es solo un ejecutable. Pero depende de que se cree un enlace simbólico a ese ejecutable para cada "comando" en él. Al conocer el nombre del enlace simbólico con el que se inició, sabe ejecutar la función C para ese comando.

Por lo tanto, el inicio de mi directorio PuppyLinux 5.2.8 Lucid / bin se parece a ...

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

Tenga en cuenta que la mayoría de los comandos son enlaces simbólicos a busybox. Esto incluye el ashshell muy minimalista utilizado principalmente durante las operaciones de arranque. También tenga en cuenta que el autor de distribución eligió incluir los comandos independientes bunzip2y en bzcatlugar de usar las versiones de busybox. Los enlaces simbólicos bunzip-BB-NOTUSEDy bzcat-BB-NOTUSEDrealmente no son necesarios, pero ayudan a documentar lo que está sucediendo por el costo de un enlace simbólico.

Tenga en cuenta también que una lista de directorios que informa los tamaños para el objetivo de los enlaces simbólicos ( ls -lLo ls -l --dereference) en lugar del enlace simbólico mismo, informará que el tamaño de cada comando es el mismo que el de busybox. Así, la misma lista con la -Lopción muestra ...

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

El objetivo de BusyBox es la máxima reutilización del código dentro de sí mismo para minimizar la memoria y el espacio en disco requerido (es decir, la "huella") para un conjunto común de comandos ... sin necesidad de un shell en sí.

Bash y otros proyectiles logran lo mismo. Pero para hacerlo, implementan su propio entorno de línea de comandos. Este objetivo es también una de las razones de algunas de las sintaxis muy arcaicas para muchas funcionalidades de shell.

Actualmente estoy usando esta "técnica de BusyBox" para una biblioteca de funciones Bash y envoltorios más fáciles de usar para varios bashismos . Me ha permitido "ampliar" fácilmente los comandos con --helpopciones y activar versiones de GUI cuando estén disponibles.

DocSalvager
fuente