专栏首页网站技术分享在 Linux 上使用 BusyBox
原创

在 Linux 上使用 BusyBox

BusyBox 是一个开源(GPL)项目,提供了近 400 个常用命令的简单实现。

它的所有命令都被编译到一个二进制文件里(busybox),它的手册只有 81 页(根据我对 man 送到 pr 管道的计算),但它涵盖了近 400 条命令。作为一个例子的比较,这是 “原版” 的 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

而这是是同一命令的 BusyBox 版本:

 -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)

这种差异是一种特性还是一种限制,取决于你是喜欢你的命令拥有 20 个选项还是 10 个选项。对于一些用户和某些用例来说,BusyBox 的极简主义刚刚满足所需。对于其他人来说,它是一个很好的最小化环境,可以作为一个后备工具,或者作为安装更强大的工具的基础,比如 Bash、Zsh、GNU Awk 等等。安装 BusyBox在 Linux 上,你可以使用你的软件包管理器安装 BusyBox。例如,在 Fedora 及类似发行版:

$ sudo dnf install busybox

在 Debian 及其衍生版:

$ sudo apt install busybox

在 MacOS 上,可以使用 MacPorts 或 Homebrew。在 Windows 上,可以使用 Chocolatey。你可以将 BusyBox 设置为你的 shell,使用 chsh —shell 命令,然后再加上 BusyBox sh 应用程序的路径。我把 BusyBox 放在 /lib64 中,但它的位置取决于你的发行版的安装位置。

$ which busybox/lib64/busybox/busybox$ chsh --shell /lib64/busybox/sh

用 BusyBox 全盘替换所有常见的命令要复杂一些,因为大多数发行版都是“硬接线”,会在特定的软件包寻找特定的命令。换句话说,虽然技术上可以用 BusyBox 的 init 替换系统的 init,但你的软件包管理器可能会拒绝让你删除包含 init 的软件包,以免你担心删除会导致系统无法启动。有一些发行版是建立在 BusyBox 之上的,所以从新环境开始可能是体验 BusyBox 系统的最简单方法。试试 BusyBox你不必为了尝试 BusyBox 而将你的 shell 永久改为 BusyBox。你可以从你当前的 shell 中启动一个 BusyBox shell。

$ busybox sh~ $

不过你的系统仍然有安装的非 BusyBox 版本的命令,所以要体验 BusyBox 的工具,你必须把命令作为参数发给 busybox 可执行文件:

~ $ busybox echo $0sh~ $ busybox ls --helpBusyBox 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[...]

为了获得“完整”的 BusyBox 体验,你可以为每个命令创建一个 busybox 的符号链接。这很容易,只要你使用 for 循环 就行:

$ mkdir bbx$ for i in $(bbx --list); do \    ln -s /path/to/busybox bbx/$i \done

在你的 路径 的 开头 添加这个符号链接目录,并启动 BusyBox:

$ PATH=$(pwd)/bbx:$PATH bbx/sh

用起来BusyBox 是一个有趣的项目,也是一个可以实现 极简 计算的例子。无论你是把 BusyBox 作为 你唤醒的 古老的计算机 的轻量级环境,还是作为 嵌入式设备 的用户界面,抑或试用一个新的初始化系统,就算是为了好奇,让自己重新认识那些熟悉而又陌生的命令,都会很有意思。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何在 Linux 上使用 BusyBox

    BusyBox的是提供近400公共命令,包括简单的实现方式中,开放源码(GPL)项目ls,mv,ln,mkdir,more,ps,gzip,bzip2,tar,...

    施主-借个火
  • 如何在 Linux 上使用 BusyBox | Linux 中国

    我们很容易认为 Linux 的命令是理所当然的。当你安装 Linux 时,它们与系统捆绑在一起,而我们常常不问为什么它们会在那里。一些基本的命令,如 cd、ki...

    用户8639654
  • BusyBox制作文件系统

    BusyBox 是很多标准Linux® 工具的一个单个可执行实现。BusyBox 包含了一些简单的工具,例如cat 和 echo,还包含了一些更大、更复杂的工具...

    知忆
  • Linux——Linux系统编程之搭建最小Linux系统

    当前阶段的目标是搞定嵌入式Linux,首先要从Linux系统编程入手,熟悉Linux的编程思想及相关API的使用(文件的操作、进程、内部通信、进程间通信、网络通...

    Winter_world
  • 手把手教你用 buildroot 构建根文件系统

    嵌入式系统三大部分:bootloader(uboot)、Linux内核、根文件系统。

    Jasonangel
  • i.MX6ULL嵌入式Linux开发4-根文件系统构建

    前面几篇介绍了uboot的移植与内核的移植,本篇进行根文件系统的构建,这是Linux移植三大组成部分的最后一步,根文件系统构建好后,就构成了一个基础的、可以运行...

    xxpcb
  • ​在tinycolinux上组建子目录引导和混合32位64位的rootfs系统

    本文关键字:mount subdirectory as linux root,boot linux from root subdirectory,从子目录引导l...

    minlearn
  • 交叉编译安卓busybox

    用户1127987
  • 第4阶段——制作根文件系统之编译配置安装busybox(3)

    在上一节分析出制作一个最小的根文件系统至少需要: (1)/dev/console(终端控制台, 提供标准输入、标准输出以及标准错误) /dev/null  (为...

    张诺谦
  • 第4阶段——制作根文件系统之编译配置安装busybox(3)

    在上一节分析出制作一个最小的根文件系统至少需要: (1)/dev/console(终端控制台, 提供标准输入、标准输出以及标准错误) /dev/null  (为...

    张诺谦
  • 在 Linux 上使用 Multitail

    当你想同时查看多个文件(尤其是日志文件)的活动时,multitail 命令会非常有用。它的工作方式类似于多窗口形式的 tail -f 命令。也就是说,它显示这些...

    用户8639654
  • Linux下制作给ARM开发板使用的文件系统

    如果以上1、2没有问题,那么可以使用以下脚本,制作一个给ARM开发板使用的文件系统。

    砸漏
  • 嵌入式 linux 根文件系统原理和制作方法

    一套linux体系,只有内核本身是不能工作的,必须要 rootfs 上的 etc 目录下的配置文件、/bin /sbin 等目录下的 shell 命令,还有 /...

    morixinguan
  • 构建Linux根文件系统

    类似于Windows下的C、D、E等各个盘,Linux系统也可以将磁盘、Flash等存储设备划分为若干个分区,在不同分区存放不同类别的文件。与Windows的C...

    韦东山
  • 移植busybox构建最小根文件系统的步骤详解

    在busybox目录下会看见 _install目录,里面有/bin /sbin linuxrc三个文件将这三个目录或文件拷到第一步所建的rootfs文件夹下。

    砸漏
  • 【教程】从零制作文件系统到jz2440,使其支持telnet , ftp 和tftp

    开发板:jz2440 主机linux:ubuntu 9.10(资料光盘那个) 内核:linux2.6.22.6 交叉编译器:arm-linux-gc...

    韦东山
  • crictl调试Kubernetes节点

    crictl需要一个具有CRI运行时的Linux操作系统,直接在TKE中创建containerd模式的集群既可。

    聂伟星
  • 08.构建根文件系统

     终于自动挂载文件系统成功了!!!出错的地方两个!!!   第一,恢复出厂设置一定要用eop下载uboot,dnw下载的不行!!!最后记得erase nand...

    嵌入式与Linux那些事
  • 使用Busybox制作根文件系统

    Busybox本身包含了很了Linux命令,但是要编译其他程序的话需要手工下载、编译,如果它需要某些依赖库,你还需要手工下载、编译这些依赖库。 如果想做一个极...

    TrueDei

扫码关注云+社区

领取腾讯云代金券