BusyBox становится всё более популярным в наши дни, особенно среди пользователей Docker. Многие образы Docker используют BusyBox для создания минимального образа.
Если вы воспринимаете команды Linux как нечто само собой разумеющееся. И вы думаете, что ls
, mv
, wget
, gzip
, unzip
, sed
и другие подобные команды являются частью Linux, в то время как на самом деле эти команды являются частью пакета GNU Coreutils, который предустановлен в большинстве дистрибутивов Linux.
GNU Coreutils является практически единственным поставщиком различных команд для UNIX/Linux. Почти единственным, потому что всегда есть альтернативы, и BusyBox — одна из таких альтернатив GNU Coreutils.
Что такое BusyBox?
BusyBox — это проект с открытым исходным кодом, который предоставляет упрощённую реализацию около 400 распространённых команд UNIX/Linux. Упрощённую? Да. Реализация BusyBox исключает редкие и малоиспользуемые параметры команд. Всё помещается в 1 МБ, и именно благодаря этому минималистичному образу он приобрёл популярность среди разработчиков встраиваемых систем и Интернета вещей, а также в мире облачных вычислений.
Не ориентируйтесь на его размер. BusyBox поддерживает sed и awk, как классические редакторы (снова урезанная версия), и содержит собственную оболочку. Он даже содержит команду инициализации, которую можно запустить как PID 1. Это означает, что BusyBox можно настроить как альтернативу Systemd, OpenRC и т. д.
BusyBox — отличная альтернатива GNU Coreutils, особенно в тех случаях, когда важен небольшой размер операционной системы.
BusyBox предоставляет вам популярные команды Linux, такие как mv
, mkdir
, ls
и т. д., но содержит только наиболее часто используемые параметры этих команд. Этот минимализм — отличительная черта BusyBox.
Проблема в том, что вы не получаете все возможности команд Linux в BusyBox?
На самом деле это зависит от ваших потребностей. Большинству людей никогда не понадобятся все параметры команды. Некоторые команды Linux имеют более 50 параметров, и я готов поспорить, что вы никогда не использовали все параметры даже одной команды Linux.
Я думаю, что вам никогда не требовалась эта опция. Именно поэтому она отсутствует в реализации ls в BusyBox. Если вам действительно нужен вывод без имени группы, всё, что вам нужно сделать, — это использовать для этого команду cut или awk.
Возьмём другой пример. Это справочная страница команды mv из 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
Теперь, вот страница справки по команде mv из 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
Видите разницу?
Как получить BusyBox?
BusyBox доступен для многих систем на базе Unix, и существует множество продуктов, использующих его. Вот некоторые из них: buildroot, OpenWrt, Zdisk, Mindi и т. д.
Он также доступен в JsLinux от Bellard.org, который используется для загрузки Linux с помощью Javascript в браузере. Можно открыть веб-страницу и использовать команды утилиты в веб-браузере.
BusyBox также доступен для Windows. Вы можете скачать BusyBox с frippery.org и использовать его на компьютере с Windows. Поместите исполняемый файл в папку с программами и запустите его следующим образом:
Существуют различные способы получить BusyBox. Если вы просто хотите попробовать BusyBox в своём текущем дистрибутиве Linux, вы можете установить его с помощью менеджера пакетов вашего дистрибутива, например Apt, DNF или Yum.
В Ubuntu вы можете использовать эту команду для установки BusyBox:
sudo apt install busybox
После этого, если вы хотите запустить версию команды BusyBox, вам нужно добавить перед ней busybox.
busybox cat sample.txt
Если команда не реализована в BusyBox, выдается сообщение об ошибке «applet not found».
abhishek@LHB:~$ busybox xyz
xyz: applet not found
Запуск BusyBox в Docker
Существуют также другие варианты образов, такие как: busybox:uclib
uclib от Buildroot, busybox:glibc
glibc от Debian и busybox:musl
musl от alpine.
И так, если у вас установлен Docker, начнем. Загрузите официальный образ Docker:
docker pull busybox
Запустите контейнер из образа и войдите в оболочку BusyBox:
docker run -it --rm busybox
Каждая команда Linux, которую вы здесь запускаете, поступает из BusyBox. Вам не нужно указывать это явно.
Но BusyBox используется в особых случаях, например, при настройке минимальной ОС Linux для встроенных устройств или устройств Интернета вещей. То же самое происходит, когда вы хотите уменьшить размер образа Docker.
Надеюсь, теперь вы лучше понимаете, что такое BusyBox. Если вам нужны какие-либо пояснения или у вас есть предложения, пожалуйста, напишите мне в комментариях.
Оригинал: What is BusyBox in Linux? How to Use it?
Ссылки
- BusyBox — https://busybox.net /
- Официальный образ BusyBox Docker — https://hub.docker.com/_/busybox
- Исходный код BusyBox — https://git.busybox.net/busybox/
- Bellard.org — https://bellard.org/