首页 - 技巧 - 如何在 Linux 上使用 BusyBox

如何在 Linux 上使用 BusyBox

2023-09-30 07:56
人们很容易将 Linux 命令视为理所当然。当你安装 Linux 时,它们就与系统捆绑在一起了,我们通常不会问它们为什么在那里。一些基本命令,如 cd、kill 和 echo,并不总是独立的应用程序,而是实际上内置于 shell 中。 BusyBox 是一个开源 (GPL) 项目,提供近 400 个常用命令的简单实现。 人们很容易认为 Linux 命令是理所当然的。当你安装 Linux 时,它们就与系统捆绑在一起了,我们通常不会问它们为什么在那里。一些基本命令,如 cd、kill 和 echo,并不总是独立的应用程序,而是实际上内置于 shell 中。其他诸如 ls、mv 和 cat 是核心工具包(通常是 GNU coreutils)的一部分。但在开源世界中,总是有替代方案,其中最有趣的是 BusyBox。 Linux中BusyBox简介 BusyBox 是一个开源 (GPL) 项目,提供了近 400 个常用命令的简单实现,包括 ls、mv、ln、mkdir、more、ps、gzip、bzip2、tar 和 grep。它还包括编程语言 awk、流编辑器 sed、文件系统检查工具 fsck、rpm 和 dpkg 包管理器,当然还有用于轻松访问所有这些命令的 shell (sh)。简而言之,它包含所有 POSIX 系统执行常见系统维护任务以及许多用户和管理任务所需的基本命令。 事实上,它甚至包含一个 init 命令,可以作为 PID 1 启动,作为所有其他系统服务的父进程。也就是说,BusyBox可以作为systemd、OpenRC、sinit、init等init系统的替代品。 BusyBox 非常小。作为可执行文件,它小于1MB,因此在存储空间非常宝贵的嵌入式、边缘计算和物联网领域很受欢迎。在容器和云计算领域,它作为精简的 Linux 容器镜像的基础镜像也很受欢迎。 极简主义 BusyBox 的部分吸引力在于其极简主义。它的所有命令都编译成二进制文件(busybox),它的手册只有81页(根据我发送到pr管道的man计算),但涵盖了近400条命令。 作为比较的示例,这是“原始”useradd --help 的输出: -b、-c、-d、-D、-e、-f、-g、-G、-h、-k、-K、-l、-m、-M、-N、-o、-p 、-r、-R、-s、-u、-U、 这是同一命令的 BusyBox 版本: -h DIR 主目录 -g GECOS GECOS 字段 -s SHELL 登录 shell -G GRP 组 -S 创建系统用户 -D 不分配密码 -H 不创建主目录 -u UID 用户 ID -k SKEL骨架目录(/etc/skel) 这种差异是功能还是限制取决于您希望命令有 20 个选项还是 10 个选项。对于某些用户和某些用例来说,BusyBox 的极简主义正是所需要的。对于其他人来说,这是一个很棒的极简环境,可以作为后备,或者作为安装更强大的工具(如 Bash、Zsh、GNU Awk 等)的基础。 安装BusyBox 在 Linux 上,您可以使用包管理器安装 BusyBox。例如,在 Fedora 和类似发行版上: $ sudo dnf 安装 busybox 在 Debian 及其衍生版本中: $ sudo apt 安装 busybox 在 MacOS 上,您可以使用 MacPorts 或 Homebrew。在 Windows 上,您可以使用 Chocolatey。 您可以使用 chsh --shell 命令将 BusyBox 设置为 shell,后跟 BusyBox sh 应用程序的路径。我将 BusyBox 放在 /lib64 中,但它的位置取决于您的发行版的安装位置。 $ 其中 busybox /lib64/busybox/busybox $ chsh 用 BusyBox 完全替换所有常用命令有点复杂,因为大多数发行版都是“硬连线”以在特定包中查找特定命令。换句话说,虽然在技术上可以用 BusyBox 的 init 替换系统的 init,但您的包管理器可能会拒绝让您删除包含 init 的包,以免您担心删除会导致系统无法启动。有一些发行版构建在 BusyBox 之上,因此从新环境开始可能是体验 BusyBox 系统的最简单方法。 尝试BusyBox 您无需将 shell 永久更改为 BusyBox 即可尝试 BusyBox。您可以从当前 shell 启动 BusyBox shell。 $ busybox sh ~ $ 但是,您的系统仍然安装了该命令的非 BusyBox 版本,因此要体验 BusyBox 的工具,您必须将该命令作为参数传递给 busybox 可执行文件: ~ $ busybox echo $0 sh ~ $ busybox ls BusyBox vX.YY.Z (2021-08-25 07:31:48 NZST) 多调用二进制文件。用法:ls [-1AaCxdLHRFplinshrSXvctu] [-w 宽度] [文件]。 .. 列出目录内容 -1 一列输出 -a 包括以 . 开头的条目。 -A 与 -a 类似,但排除 .和 .. -x 按行列出 [...] 为了获得“完整”的 BusyBox 体验,您可以为每个命令创建一个指向 busybox 的符号链接。很简单,只要使用 for 循环即可: $ mkdir bbx $ for i in $(bbx ln -s /path/to/busybox bbx/$i \ 完成 在路径的开头添加此符号链接目录并启动 BusyBox: $PATH=$(pwd)/bbx:$PATH bbx/sh 用它 BusyBox 是一个有趣的项目,也是如何实现极简计算的示例。无论您使用 BusyBox 作为古老计算机的轻量级环境,作为嵌入式设备的用户界面,还是尝试新的初始化系统,只是为了好奇,重新熟悉熟悉和不熟悉的东西。命令将会非常有趣。