BusyBox se está volviendo popular en estos días, especialmente entre los usuarios de Docker. Muchas imágenes de Docker usan BusyBox para brindarle una imagen mínima.
Y esto podría dejar a muchos usuarios confundidos, especialmente si das por sentado los comandos de Linux. Crees que ls, mv y otros comandos similares son parte de Linux, mientras que la verdad es que estos comandos son parte del paquete GNU Coreutils y la mayoría de las distribuciones de Linux lo tienen preinstalado.
GNU Coreutils es casi el proveedor de facto de varios comandos de UNIX/Linux. Casi porque siempre hay alternativas y BusyBox es una de esas alternativas a GNU Coreutils.
¿Qué es BusyBox?
BusyBox es un proyecto de código abierto que proporciona una implementación reducida de alrededor de 400 comandos comunes de UNIX/Linux. ¿Despojado? Sí. La implementación de BusyBox elimina las opciones de comando poco comunes y rara vez utilizadas. Todo cabe por debajo de 1 MB y esta imagen mínima es la razón por la que ha ganado popularidad entre los sistemas integrados y el dominio IoT, así como en el mundo de la computación en la nube.
No te guíes por su tamaño. BusyBox tiene alcance para sed y awk como los editores clásicos (una versión simplificada nuevamente) y también contiene su propio shell. Incluso contiene un comando de inicio que se puede iniciar como PID 1. Esto significa que BusyBox se puede configurar como una alternativa a Systemd, OpenRC, etc.
BusyBox es una excelente alternativa a GNU Coreutils, especialmente en los casos en los que el pequeño tamaño del sistema operativo importa mucho.
🗒️BusyBox le brinda comandos populares de Linux como mv, mkdir, ls, etc., pero solo contiene las opciones de uso común de estos comandos. Este minimalismo es la USP de BusyBox.¿Es un problema que no obtienes el comando completo de Linux? opciones con BusyBox?
Eso depende de tu necesidad, de verdad. La mayoría de las personas nunca necesitarán todas las opciones de un comando. Algunos comandos de Linux tienen más de 50 opciones y apuesto a que nunca usaste todas las opciones de un solo comando de Linux.
BusyBox reduce las opciones que rara vez se usan. Por ejemplo, el comando ls tiene la opción G que elimina el nombre del grupo de la salida de la lista larga (ls -l).
Ahora, creo que nunca necesitaste esta opción. Es por eso que no está presente en la implementación ls de BusyBox. Si realmente necesita una salida donde el nombre del grupo no esté incluido, todo lo que tiene que hacer es usar el comando cut o awk para ese propósito.
Toma otro ejemplo. Esta es la página de ayuda del comando mv de GNU Coreutils:
Usage: mv [OPTION]... [-T] SOURCE DEST
or: mv [OPTION]... SOURCE... DIRECTORY
or: mv [OPTION]... -t DIRECTORY SOURCE...
Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.
Mandatory arguments to long options are mandatory for short options too.
--backup[=CONTROL] make a backup of each existing destination file
-b like --backup but does not accept an argument
-f, --force do not prompt before overwriting
-i, --interactive prompt before overwrite
-n, --no-clobber do not overwrite an existing file
If you specify more than one of -i, -f, -n, only the final one takes effect.
--strip-trailing-slashes remove any trailing slashes from each SOURCE
argument
-S, --suffix=SUFFIX override the usual backup suffix
-t, --target-directory=DIRECTORY move all SOURCE arguments into DIRECTORY
-T, --no-target-directory treat DEST as a normal file
-u, --update move only when the SOURCE file is newer
than the destination file or when the
destination file is missing
-v, --verbose explain what is being done
-Z, --context set SELinux security context of destination
file to default type
--help display this help and exit
--version output version information and exit
Ahora, aquí está la página de ayuda del comando mv de BusyBox:
Usage: mv [-fin] SOURCE DEST
or: mv [-fin] SOURCE... DIRECTORY
Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY
-f Don't prompt before overwriting
-i Interactive, prompt before overwrite
-n Don't overwrite an existing file
¿Ver la diferencia?
¿Cómo obtener BusyBox?
Hay varias formas de obtener BusyBox.
Si simplemente desea experimentar BusyBox en su distribución actual de Linux, puede instalarlo usando el administrador de paquetes de su distribución como Apt o DNF o Yum.
En Ubuntu, puede usar este comando para instalar BusyBox:
sudo apt install busybox
Después de eso, si desea ejecutar la versión BusyBox de un comando, debe agregar el cuadro ocupado antes.
busybox cat sample.txt
Si BusyBox no implementa un comando, arroja un error que dice 'applet no encontrado'.
[email protected]:~$ busybox xyz
xyz: applet not found
Alternativamente , puede descargar la imagen de Docker de BusyBox y experimentarla en un contenedor en ejecución.
Asegúrese de tener Docker instalado. Extraiga la imagen oficial de la ventana acoplable:
docker pull busybox
Ejecute un contenedor desde la imagen e ingrese el shell de BusyBox:
docker run -it --rm busybox
Cada comando de Linux que ejecuta aquí proviene de BusyBox. No es necesario especificarlo explícitamente.
En total, no necesita BusyBox en un sistema Linux normal. Ya tiene la versión completa de los comandos de Linux de GNU Coreutils allí. No es necesario instalar una versión simplificada.
Pero BusyBox tiene su uso en áreas especiales como cuando está configurando un sistema operativo Linux mínimo para dispositivos integrados o IoT. Lo mismo ocurre cuando desea mantener pequeño el tamaño de su imagen de Docker.
Espero que tengas una mejor comprensión de BusyBox. Si necesita alguna aclaración o tiene alguna sugerencia, hágamelo saber en los comentarios.