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 ash
shell 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 bunzip2
y en bzcat
lugar de usar las versiones de busybox. Los enlaces simbólicos bunzip-BB-NOTUSED
y bzcat-BB-NOTUSED
realmente 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 -lL
o 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 -L
opció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 --help
opciones y activar versiones de GUI cuando estén disponibles.