Es fácil dar por sentado los comandos de Linux. Vienen incluidos con el sistema cuando instalas Linux y, a menudo, no nos preguntamos por qué están ahí. Algunos de los comandos básicos, como cd
, kill
y echo
no siempre son aplicaciones independientes, sino que en realidad están integradas en su shell. Otros, como ls
, mv
y cat
son parte de un paquete de utilidad central (a menudo GNU coreutils
específicamente). Pero siempre hay alternativas en el mundo del código abierto, y una de las más interesantes es BusyBox.
¿Qué es BusyBox en Linux?
Más recursos de Linux
- Hoja de trucos de los comandos de Linux
- Hoja de trucos de comandos avanzados de Linux
- Curso en línea gratuito:Descripción general técnica de RHEL
- Hoja de trucos de red de Linux
- Hoja de trucos de SELinux
- Hoja de trucos de los comandos comunes de Linux
- ¿Qué son los contenedores de Linux?
- Nuestros últimos artículos sobre Linux
BusyBox es un proyecto de código abierto (GPL) que proporciona implementaciones simples de casi 400 comandos comunes, incluido ls
, mv
, ln
, mkdir
, more
, ps
, gzip
, bzip2
, tar
y grep
. También contiene una versión del lenguaje de programación awk
, el editor de secuencias sed
, el verificador del sistema de archivos fsck
, las rpm
y dpkg
administradores de paquetes y, por supuesto, un shell (sh
) que proporciona fácil acceso a todos estos comandos. En resumen, contiene todos los comandos esenciales necesarios para que un sistema POSIX realice tareas comunes de mantenimiento del sistema, así como muchas tareas administrativas y de usuario.
De hecho, incluso contiene un init
comando que se puede iniciar como PID 1 para servir como proceso principal para todos los demás servicios del sistema. En otras palabras, BusyBox se puede utilizar como alternativa a systemd, OpenRC, sinit, init y otros demonios de lanzamiento.
BusyBox es muy pequeño. Como ejecutable, tiene menos de 1 MB, por lo que ha ganado gran parte de su popularidad en el espacio integrado, Edge e IoT, donde el espacio en disco es escaso. En el mundo de los contenedores y la computación en la nube, también es popular como base para imágenes mínimas de contenedores de Linux.
Minimalismo
Parte del atractivo de BusyBox es su minimalismo. Todos sus comandos se compilan en un solo binario (busybox
), y su página de manual tiene solo 81 páginas (según mi cálculo de piping man
a pr
) pero cubre casi 400 comandos.
Como ejemplo de comparación, aquí está el resultado de shadow
versión de useradd --help
:
-b, --base-dir BASE_DIR base directory for home
-c, --comment COMMENT GECOS field of the new account
-d, --home-dir HOME_DIR home directory of the new account
-D, --defaults print or change the default config
-e, --expiredate EXPIRE_DATE expiration date of the new account
-f, --inactive INACTIVE password inactivity
-g, --gid GROUP name or ID of the primary group
-G, --groups GROUPS list of supplementary groups
-h, --help display this help message and exit
-k, --skel SKEL_DIR alternative skeleton dir
-K, --key KEY=VALUE override /etc/login.defs
-l, --no-log-init do not add the user to the lastlog
-m, --create-home create the user's home directory
-M, --no-create-home do not create the user's home directory
-N, --no-user-group do not create a group with the user's name
-o, --non-unique allow users with non-unique UIDs
-p, --password PASSWORD encrypted password of the new account
-r, --system create a system account
-R, --root CHROOT_DIR directory to chroot into
-s, --shell SHELL login shell of the new account
-u, --uid UID user ID of the new account
-U, --user-group create a group with the same name as a user
Y aquí está la versión BusyBox del mismo comando:
-h DIR Home directory
-g GECOS GECOS field
-s SHELL Login shell
-G GRP Group
-S Create a system user
-D Don't assign a password
-H Don't create home directory
-u UID User id
-k SKEL Skeleton directory (/etc/skel)
Si esta diferencia es o no una característica o una limitación depende de si prefiere tener 20 opciones o diez opciones en sus comandos. Para algunos usuarios y casos de uso, el minimalismo de BusyBox proporciona lo suficiente para lo que se necesita hacer. Para otros, es un buen entorno mínimo como respaldo o como base para instalar herramientas más sólidas como Bash, Zsh, GNU Awk, etc.
Instalación de BusyBox
En Linux, puede instalar BusyBox usando su administrador de paquetes. Por ejemplo, en Fedora y similares:
$ sudo dnf install busybox
En Debian y derivados:
$ sudo apt install busybox
En macOS, use MacPorts o Homebrew. En Windows, usa Chocolatey.
Puede configurar BusyBox como su shell usando chsh --shell
comando, seguido de la ruta a BusyBox sh
solicitud. Mantengo BusyBox en /lib64
, pero su ubicación depende de dónde lo instaló su distribución.
$ which busybox
/lib64/busybox/busybox
$ chsh --shell /lib64/busybox/sh
Reemplazar todos los comandos comunes al por mayor con BusyBox es un poco más complejo, porque la mayoría de las distribuciones están "programadas" para buscar paquetes específicos para comandos específicos. En otras palabras, aunque es técnicamente posible reemplazar init
con init
de BusyBox , su administrador de paquetes puede negarse a permitirle eliminar el paquete que contiene init
por temor a que provoque que su sistema deje de ser arrancable. Hay algunas distribuciones basadas en BusyBox, por lo que comenzar de nuevo es probablemente la forma más fácil de experimentar un sistema basado en BusyBox.
Prueba BusyBox
No tienes que cambiar tu shell a BusyBox permanentemente solo para probarlo. Puede iniciar un shell BusyBox desde su shell actual:
$ busybox sh
~ $
Sin embargo, su sistema todavía tiene instaladas las versiones de comandos que no son de BusyBox, por lo que para experimentar las herramientas de BusyBox, debe emitir comandos como argumentos para busybox
ejecutable:
~ $ busybox echo $0
sh
~ $ busybox ls --help
BusyBox vX.YY.Z (2021-08-25 07:31:48 NZST) multi-call binary.
Usage: ls [-1AaCxdLHRFplinshrSXvctu] [-w WIDTH] [FILE]...
List directory contents
-1 One column output
-a Include entries that start with .
-A Like -a, but exclude . and ..
-x List by lines
[...]
Para la experiencia "completa" de BusyBox, puede crear enlaces simbólicos a busybox
para cada comando. Esto es más fácil de lo que parece, siempre que use un ciclo for:
$ mkdir bbx
$ for i in $(bbx --list); do \
ln -s /path/to/busybox bbx/$i \
done
Agregue su directorio de enlaces simbólicos al inicio de su ruta y ejecute BusyBox:
$ PATH=$(pwd)/bbx:$PATH bbx/sh
Ocúpate
BusyBox es un proyecto divertido y un ejemplo de cuán mínimo la computación puede ser. Ya sea que use BusyBox como un entorno liviano para una computadora antigua que rescató, como espacio de usuario para un dispositivo integrado, para probar un nuevo sistema de inicio o simplemente como una curiosidad, puede ser divertido volver a familiarizarse con el viejo familiar, pero de alguna manera nuevo, comandos.