Il est facile de prendre les commandes Linux pour acquises. Ils sont fournis avec le système lorsque vous installez Linux, et nous ne nous demandons souvent pas pourquoi ils sont là. Certaines des commandes de base, telles que cd
, kill
, et echo
ne sont pas toujours des applications indépendantes mais sont en fait intégrées à votre shell. D'autres, comme ls
, mv
, et cat
font partie d'un package d'utilitaires de base (souvent GNU coreutils
Plus précisément). Mais il existe toujours des alternatives dans le monde de l'open source, et l'une des plus intéressantes est BusyBox.
Qu'est-ce que BusyBox sous Linux ?
Plus de ressources Linux
- Aide-mémoire des commandes Linux
- Aide-mémoire des commandes Linux avancées
- Cours en ligne gratuit :Présentation technique de RHEL
- Aide-mémoire sur le réseau Linux
- Aide-mémoire SELinux
- Aide-mémoire sur les commandes courantes de Linux
- Que sont les conteneurs Linux ?
- Nos derniers articles Linux
BusyBox est un projet open source (GPL) fournissant des implémentations simples de près de 400 commandes courantes, y compris ls
, mv
, ln
, mkdir
, more
, ps
, gzip
, bzip2
, tar
, et grep
. Il contient également une version du langage de programmation awk
, l'éditeur de flux sed
, le vérificateur de système de fichiers fsck
, le rpm
et dpkg
gestionnaires de paquets, et bien sûr, un shell (sh
) qui permet d'accéder facilement à toutes ces commandes. En bref, il contient toutes les commandes essentielles requises par un système POSIX pour effectuer des tâches courantes de maintenance du système ainsi que de nombreuses tâches utilisateur et administratives.
En fait, il contient même un init
commande qui peut être lancée en tant que PID 1 pour servir de processus parent pour tous les autres services système. En d'autres termes, BusyBox peut être utilisé comme une alternative à systemd, OpenRC, sinit, init et autres démons de lancement.
BusyBox est très petit. En tant qu'exécutable, il pèse moins de 1 Mo, il a donc acquis une grande partie de sa popularité dans l'espace embarqué, Edge et IoT, où l'espace disque est limité. Dans le monde des conteneurs et du cloud computing, il est également populaire comme base pour des images de conteneur Linux minimales.
Minimalisme
Une partie de l'attrait de BusyBox est son minimalisme. Toutes ses commandes sont compilées en un seul binaire (busybox
), et sa page de manuel ne fait que 81 pages (d'après mes calculs de tuyauterie man
à pr
) mais couvre près de 400 commandes.
À titre d'exemple de comparaison, voici la sortie du shadow
version 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
Et voici la version BusyBox de la même commande :
-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)
Que cette différence soit ou non une fonctionnalité ou une limitation dépend de si vous préférez avoir 20 options ou dix options dans vos commandes. Pour certains utilisateurs et cas d'utilisation, le minimalisme de BusyBox fournit juste assez pour ce qui doit être fait. Pour d'autres, c'est un bon environnement minimal à avoir comme solution de repli ou comme base pour installer des outils plus robustes comme Bash, Zsh, GNU Awk, etc.
Installer BusyBox
Sous Linux, vous pouvez installer BusyBox à l'aide de votre gestionnaire de packages. Par exemple, sur Fedora et similaire :
$ sudo dnf install busybox
Sur Debian et dérivés :
$ sudo apt install busybox
Sur macOS, utilisez MacPorts ou Homebrew. Sous Windows, utilisez Chocolatey.
Vous pouvez définir BusyBox comme votre shell en utilisant le chsh --shell
commande, suivi du chemin vers la BusyBox sh
application. Je garde BusyBox dans /lib64
, mais son emplacement dépend de l'endroit où votre distribution l'a installé.
$ which busybox
/lib64/busybox/busybox
$ chsh --shell /lib64/busybox/sh
Remplacer toutes les commandes courantes en gros par BusyBox est un peu plus complexe, car la plupart des distributions sont "câblées" pour rechercher des packages spécifiques pour des commandes spécifiques. En d'autres termes, alors qu'il est techniquement possible de remplacer init
avec init
de BusyBox , votre gestionnaire de paquets peut refuser de vous permettre de supprimer le paquet contenant init
de peur que vous rendiez votre système non amorçable. Certaines distributions sont basées sur BusyBox, donc recommencer à neuf est probablement le moyen le plus simple de découvrir un système construit autour de BusyBox.
Essayez BusyBox
Vous n'avez pas besoin de changer votre shell en BusyBox de façon permanente juste pour l'essayer. Vous pouvez lancer un shell BusyBox depuis votre shell actuel :
$ busybox sh
~ $
Votre système a toujours les versions non-BusyBox des commandes installées, cependant, pour expérimenter les outils de BusyBox, vous devez émettre des commandes en tant qu'arguments de la busybox
exécutable :
~ $ 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
[...]
Pour l'expérience "complète" de BusyBox, vous pouvez créer des liens symboliques vers busybox
pour chaque commande. C'est plus facile qu'il n'y paraît, tant que vous utilisez une boucle for :
$ mkdir bbx
$ for i in $(bbx --list); do \
ln -s /path/to/busybox bbx/$i \
done
Ajoutez votre répertoire de liens symboliques au début de votre chemin, et lancez BusyBox :
$ PATH=$(pwd)/bbx:$PATH bbx/sh
Occupez-vous
BusyBox est un projet amusant et un exemple de la façon dont minimal l'informatique peut être. Que vous utilisiez BusyBox comme environnement léger pour un ancien ordinateur que vous avez sauvé, comme espace utilisateur pour un appareil intégré, pour tester un nouveau système d'initialisation ou simplement comme curiosité, il peut être amusant de vous redécouvrir avec un ancien familier, mais d'une manière ou d'une autre nouveau, commandes.