我记得在嵌入式系统中运行的Linux,由于大小限制,不能像普通工作站那样打包那么多命令。所以有一个万能的命令,可以模拟几乎所有的命令(包括,,,ls
等),但我不记得它的名字了。cd
time
我只是隐约记得一些像“minibox”之类的东西,它的名字里似乎有一个“box”,有人知道它的名字是什么吗?
答案1
答案2
你可能指的是忙碌箱,一个“一体化”外壳。
答案3
忙碌盒子设计方式相当新颖,当您开始在 /bin 目录中寻找时可能会感到相当困惑。
作为萨特斯如上所述,BusyBox 只是一个可执行文件。但它依赖于为其中的每个“命令”创建指向该可执行文件的符号链接。通过了解启动时使用的符号链接名称,它知道要运行该命令的 C 函数。
因此,我开始PuppyLinux 5.2.8 Lucid/bin 目录看起来像......
sh-4.1# ls -l
total 4889
lrwxrwxrwx 1 root root 7 2011-08-17 10:49 [ -> busybox
lrwxrwxrwx 1 root root 7 2011-08-17 10:49 [[ -> busybox
lrwxrwxrwx 1 root root 7 2011-08-17 10:49 addgroup -> busybox
lrwxrwxrwx 1 root root 7 2011-08-17 10:49 adduser -> busybox
lrwxrwxrwx 1 root root 7 2011-08-17 10:49 ash -> busybox
-rwxr-xr-x 1 root root 2844 2011-08-17 11:04 autologinroot
lrwxrwxrwx 1 root root 4 2011-08-17 10:49 awk -> gawk
lrwxrwxrwx 1 root root 7 2011-08-17 10:49 basename -> busybox
-rwxr-xr-x 1 root root 805960 2011-08-17 11:04 bash
-r-xr-xr-x 1 root root 6835 2011-01-21 01:29 bashbug
lrwxrwxrwx 1 root root 7 2011-08-17 10:49 bbconfig -> busybox
-rwxr-xr-x 1 root root 30200 2011-08-17 11:04 bunzip2
lrwxrwxrwx 1 root root 7 2011-08-17 10:49 bunzip2-BB-NOTUSED -> busybox
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 busybox
-rwxr-xr-x 1 root root 30200 2011-08-17 11:04 bzcat
lrwxrwxrwx 1 root root 7 2011-08-17 10:49 bzcat-BB-NOTUSED -> busybox
请注意,大多数命令都是指向 的符号链接busybox
。这包括ash
引导操作期间最常用的极简 shell。还请注意,发行版作者选择包含独立命令bunzip2
和 ,bzcat
而不是使用 busybox 版本。符号链接bunzip-BB-NOTUSED
和bzcat-BB-NOTUSED
并不是真正必要的,但有助于记录仅需一个符号链接即可完成的操作。
还要注意,报告符号链接目标(ls -lL
或ls -l --dereference
)大小的目录列表(而不是符号链接本身)将报告每个命令的大小与的大小相同busybox
。因此,带有选项的相同列表-L
显示...
sh-4.1# ls -lL
total 60402
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 [
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 [[
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 addgroup
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 adduser
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 ash
-rwxr-xr-x 1 root root 2844 2011-08-17 11:04 autologinroot
-rwxr-xr-x 1 root root 317880 2011-08-17 11:04 awk
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 basename
-rwxr-xr-x 1 root root 805960 2011-08-17 11:04 bash
-r-xr-xr-x 1 root root 6835 2011-01-21 01:29 bashbug
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 bbconfig
-rwxr-xr-x 1 root root 30200 2011-08-17 11:04 bunzip2
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 bunzip2-BB-NOTUSED
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 busybox
-rwxr-xr-x 1 root root 30200 2011-08-17 11:04 bzcat
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 bzcat-BB-NOTUSED
BusyBox 的目标是最大限度地重复使用其自身的代码,以尽量减少一组通用命令所需的内存和磁盘空间(即“占用空间”)......而不需要 shell 本身。
Bash 和其他 shell 可以完成相同的任务。但为了实现这一点,它们需要实现自己的命令行环境。这一目标也是许多 shell 功能语法非常陈旧的原因之一。
我目前正在使用这种“BusyBox 技术”来创建 Bash 函数库,并更轻松地使用各种包装器巴什主义。它让我能够轻松地使用选项“扩展”命令--help
,并在可用时启动 GUI 版本。