BusyBox devient populaire ces jours-ci, en particulier parmi les utilisateurs de Docker. De nombreuses images Docker utilisent BusyBox pour vous fournir une image minimale.
Et cela pourrait laisser de nombreux utilisateurs confus, en particulier si vous considérez les commandes Linux comme allant de soi. Vous pensez que ls, mv et d'autres commandes de ce type font partie de Linux, alors que la vérité est que ces commandes font partie du package GNU Coreutils et que la plupart des distributions Linux l'ont préinstallé.
GNU Coreutils est presque le fournisseur de facto de diverses commandes UNIX/Linux. Presque parce qu'il y a toujours des alternatives et que BusyBox est l'une de ces alternatives à GNU Coreutils.
Qu'est-ce que BusyBox ?
BusyBox est un projet open source qui fournit une implémentation simplifiée d'environ 400 commandes UNIX/Linux courantes. Dépouillée? Oui. L'implémentation de BusyBox supprime les options de commande rares et rarement utilisées. Tout tient sous 1 Mo et cette image minimale est la raison pour laquelle elle a gagné en popularité parmi les systèmes embarqués et le domaine IoT ainsi que dans le monde du cloud computing.
Ne vous fiez pas à sa taille. BusyBox a de la place pour sed et awk comme les éditeurs classiques (version simplifiée à nouveau) et il contient également son propre shell. Il contient même une commande init qui peut être lancée en tant que PID 1. Cela signifie que BusyBox peut être configuré comme une alternative à Systemd, OpenRC etc.
BusyBox est une superbe alternative à GNU Coreutils, spécialement dans les cas où la petite taille du système d'exploitation compte beaucoup.
🗒️BusyBox vous donne des commandes Linux populaires comme mv, mkdir, ls etc mais il ne contient que les options couramment utilisées de ces commandes. Ce minimalisme est l'USP de BusyBox.Est-ce un problème que vous n'obteniez pas la commande Linux complète options avec BusyBox ?
Cela dépend de votre besoin, vraiment. La plupart des gens n'auront jamais besoin de toutes les options d'une commande. Certaines commandes Linux ont plus de 50 options et je parie que vous n'avez jamais utilisé toutes les options d'une seule commande Linux.
BusyBox réduit les options rarement utilisées. Par exemple, la commande ls a l'option G qui supprime le nom du groupe de la sortie de la longue liste (ls -l).
Maintenant, je pense que vous n'avez jamais eu besoin de cette option. C'est pourquoi il n'est pas présent dans l'implémentation ls de BusyBox. Si vous avez vraiment besoin d'une sortie où le nom du groupe n'est pas inclus, tout ce que vous avez à faire est d'utiliser la commande cut ou awk à cette fin.
Prenons un autre exemple. Voici la page d'aide de la commande 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
Maintenant, voici la page d'aide de la commande 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
Regarde la différence?
Comment obtenir BusyBox ?
Il existe différentes façons d'obtenir BusyBox.
Si vous voulez simplement faire l'expérience de BusyBox sur votre distribution Linux actuelle, vous pouvez l'installer en utilisant le gestionnaire de packages de votre distribution comme Apt ou DNF ou Yum.
Sur Ubuntu, vous pouvez utiliser cette commande pour installer BusyBox :
sudo apt install busybox
Après cela, si vous souhaitez exécuter la version BusyBox d'une commande, vous devez ajouter busybox avant.
busybox cat sample.txt
Si une commande n'est pas implémentée par BusyBox, elle génère une erreur "applet introuvable".
[email protected]:~$ busybox xyz
xyz: applet not found
Alternativement , vous pouvez télécharger l'image Docker de BusyBox et en faire l'expérience dans un conteneur en cours d'exécution.
Veuillez vous assurer que Docker est installé. Extrayez l'image docker officielle :
docker pull busybox
Exécutez un conteneur à partir de l'image et entrez dans le shell BusyBox :
docker run -it --rm busybox
Chaque commande Linux que vous exécutez ici provient de BusyBox. Vous n'avez pas besoin de le spécifier explicitement.
Dans l'ensemble, vous n'avez pas besoin de BusyBox sur un système Linux standard. Vous avez déjà la version complète des commandes Linux de GNU Coreutils ici. Il n'est pas nécessaire d'installer une version simplifiée.
Mais BusyBox a son utilisation dans des domaines particuliers, comme lorsque vous configurez un système d'exploitation Linux minimal pour un appareil intégré ou IoT. Il en va de même lorsque vous souhaitez que la taille de votre image Docker reste petite.
J'espère que vous avez une meilleure compréhension de BusyBox. Si vous avez besoin d'éclaircissements ou si vous avez une suggestion, n'hésitez pas à me le faire savoir dans les commentaires.