封装了几乎所有其他命令的 Linux 命令是什么?

封装了几乎所有其他命令的 Linux 命令是什么?

我记得在嵌入式系统中运行的Linux,由于大小限制,不能像普通工作站那样打包那么多命令。所以有一个万能的命令,可以模拟几乎所有的命令(包括,,,ls等),但我不记得它的名字了。cdtime

我只是隐约记得一些像“minibox”之类的东西,它的名字里似乎有一个“box”,有人知道它的名字是什么吗?

答案1

最受欢迎的可能是忙碌盒子,但也有工具箱(Android 使用),玩具盒或许还有其他。

答案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-NOTUSEDbzcat-BB-NOTUSED并不是真正必要的,但有助于记录仅需一个符号链接即可完成的操作。

还要注意,报告符号链接目标(ls -lLls -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 版本。

相关内容