与 相比bash,Ash 是一个简单的 unix shell,后者是 Linux 系统上首选的更典型的全功能 shell。
Busybox 是一个实现ash类似 shell的程序,以及许多其他常见的 unix 程序,虽然是精简版,但都在一个程序中。它旨在在空间非常有限的环境中提供一个半典型的类 Unix 环境,因此,为什么它将许多(精简的)程序实现为单个程序,然后将单独的程序命令符号链接到 busybox 二进制文件,这就说明了它应该模拟哪个程序,并尽最大努力以与它正在替换的全功能程序类似的方式运行。
Busybox 最初是为在空间非常有限的环境中使用而开发的,例如单个软盘引导盘,并且今天继续在空间有限的环境中使用,例如 dd-wrt 等嵌入式系统。
busybox以及如何在一个可执行文件中包含多个可执行文件?让我阐述一下@psusi 的答案。
Busybox 是一个程序,它实现了像 ash 这样的 shell,以及许多其他常见的 UNIX 程序,尽管在精简版本中,所有这些都在一个程序中......因此,为什么它将许多(精简的)程序实现为单个程序程序,然后将单独的程序命令符号链接到 busybox 二进制文件,它会找出应该模拟哪个程序,并尽力以与它正在替换的功能齐全的程序类似的方式运行。
看一下这个。以下内容很有趣,并证实了上面引用中的内容。
ls -alF /bin以下是嵌入式 Linux 设备上输出开头的片段。正如您所看到的,几乎所有可执行文件/bin实际上都是符号链接(顺便说一下,/bin/busybox可以使用 来调用):/bin/busybox <cmd>
Run Code Online (Sandbox Code Playgroud)/bin# ls -alF /bin total 1184 drwxr-xr-x 2 root root 4096 Nov 11 2021 ./ drwxr-xr-x 22 root root 4096 Nov 11 2021 ../ lrwxrwxrwx 1 root root 7 Nov 11 2021 arch -> busybox* lrwxrwxrwx 1 root root 7 Nov 11 2021 ash -> busybox* lrwxrwxrwx 1 root root 7 Nov 11 2021 base64 -> busybox* -rwsr-xr-x 1 root root 709792 Nov 11 2021 busybox* lrwxrwxrwx 1 root root 7 Nov 11 2021 cat -> busybox* -rwxr-xr-x 1 root root 10288 Nov 11 2021 chattr* lrwxrwxrwx 1 root root 7 Nov 11 2021 chgrp -> busybox* lrwxrwxrwx 1 root root 7 Nov 11 2021 chmod -> busybox* lrwxrwxrwx 1 root root 7 Nov 11 2021 chown -> busybox* -rwxr-xr-x 1 root root 1342 Nov 11 2021 compile_et* lrwxrwxrwx 1 root root 7 Nov 11 2021 cp -> busybox* lrwxrwxrwx 1 root root 7 Nov 11 2021 cpio -> busybox* lrwxrwxrwx 1 root root 7 Nov 11 2021 date -> busybox* lrwxrwxrwx 1 root root 7 Nov 11 2021 dd -> busybox* lrwxrwxrwx 1 root root 7 Nov 11 2021 df -> busybox*
因此,如果您运行ash,which ash则显示ash可执行文件位于/bin/ash,并ls -alF /bin/ash显示该可执行文件是 的符号链接busybox。注意/bin/ash -> busybox*,*最后的 是由于标志ls -F而表示“可执行”:
Run Code Online (Sandbox Code Playgroud)/bin# la -alF /bin/ash lrwxrwxrwx 1 root root 7 Nov 11 2021 /bin/ash -> busybox*
因此,运行ash与运行相同,/bin/ash运行与运行相同busybox ash,运行与运行相同/bin/busybox ash。
一旦我运行其中任何一个ash或busybox ashcmd,我就可以看到 的输出echo $0已从 更改-sh为,这意味着我现在正在默认 shell 内ash运行shell 。会把我从壳里带出来,又带回壳里。ash-shexitash-sh
要查看所有可以运行的程序busybox,只需键入busyboxor busybox --help,它就会显示编译到其二进制文件中的所有程序的大列表。或者,使用busybox --list在单独的行中查看它们。将它们运行为:
/bin# ls -alF /bin
total 1184
drwxr-xr-x 2 root root 4096 Nov 11 2021 ./
drwxr-xr-x 22 root root 4096 Nov 11 2021 ../
lrwxrwxrwx 1 root root 7 Nov 11 2021 arch -> busybox*
lrwxrwxrwx 1 root root 7 Nov 11 2021 ash -> busybox*
lrwxrwxrwx 1 root root 7 Nov 11 2021 base64 -> busybox*
-rwsr-xr-x 1 root root 709792 Nov 11 2021 busybox*
lrwxrwxrwx 1 root root 7 Nov 11 2021 cat -> busybox*
-rwxr-xr-x 1 root root 10288 Nov 11 2021 chattr*
lrwxrwxrwx 1 root root 7 Nov 11 2021 chgrp -> busybox*
lrwxrwxrwx 1 root root 7 Nov 11 2021 chmod -> busybox*
lrwxrwxrwx 1 root root 7 Nov 11 2021 chown -> busybox*
-rwxr-xr-x 1 root root 1342 Nov 11 2021 compile_et*
lrwxrwxrwx 1 root root 7 Nov 11 2021 cp -> busybox*
lrwxrwxrwx 1 root root 7 Nov 11 2021 cpio -> busybox*
lrwxrwxrwx 1 root root 7 Nov 11 2021 date -> busybox*
lrwxrwxrwx 1 root root 7 Nov 11 2021 dd -> busybox*
lrwxrwxrwx 1 root root 7 Nov 11 2021 df -> busybox*
Run Code Online (Sandbox Code Playgroud)
无论如何,busybox 是小型嵌入式 Linux 设备的流行程序,其中 Linux 是使用构建工具(例如Buildroot或Yocto这两个主要工具)进行自定义构建的。
ash?Ash 是一个 shell 或终端程序。Kenneth Almquistash于 1989 年 5 月 30 日制作,勉强抢先bash,仅一周后即 1989 年 6 月 8 日发布。Herbert Xuash于 1997 年移植到 Debian Linux,并将其称为dash“ Debian Almquist shell”。
Busybox 包含 的实现ash,该实现是 的派生dash,并且是“busybox 中包含的最完整且最迂腐正确的 shell”。
在 busybox 的上下文中,ash是一个内置的 shell busybox,可以通过调用来运行busybox ash,如上所述。
busybox源代码在这里声明它的内置版本ash是(强调是添加的):
busybox 包含最完整、最迂腐正确的 shell。该 shell 实际上是 Debian 'dash' shell(由 Herbert Xu 编写)的衍生版本,它是通过从 NetBSD 移植 'ash' shell(由 Kenneth Almquist 编写)创建的。
当它说 busyboxash是“busybox 中包含的最完整、最迂腐的正确 shell”时,我并不是 100% 清楚,但似乎 busyboxash有一堆构建选项,可以使其bash更完整、更完整,喜欢bash。例如,在这些文件中搜索“bash”,可以看到大量对看似选项的引用,其行为ash如下bash:
根据维基百科的Almquist shell文章,原始版本ash是 Almquist shell,最初发布于 1989 年 5 月 30 日。
与此相比bash,仅 1 周后即 1989 年 6 月 8 日发布!
另外根据上面的 Wikipedia Almquist shell文章,dash它是 Debian Linux 的一个端口ash(强调已添加):
1997 年,Herbert Xu
ash从 NetBSD 移植到 Debian Linux。2002 年 9 月,随着 0.4.1 版本的发布,该端口更名为 Dash(Debian Almquist shell)。Xu 的主要优先事项是 POSIX 一致性和精简实施。
并且,根据上面对 busybox 源代码的引用,busybox 的ash“实际上是 Debian shell 的衍生品dash(由 Herbert Xu 编写)”。
| 归档时间: |
|
| 查看次数: |
3506 次 |
| 最近记录: |