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


23

我记得对于在嵌入式系统中运行的Linux,由于大小限制,它无法打包与普通工作站一样多的命令。因此,有一个做它,所有的可以模拟几乎所有的命令(包括命令lscdtime等),但我不记得它的名字。

我只是模糊地想起了诸如“ minibox”之类的东西,或者它的名称中似乎有一个“ box”,有人知道它的名字吗?


12
它称为busybox。
MariusMatutiae 2014年

6
它不会模仿cd,但这是不可能的。
停止Harming Monica 2014年

4
@OrangeDog:...但是它会模仿sh,它cd是内置的。
Ilmari Karonen 2014年

一个统治他们的人!!!
Shokhet 2014年

5
D'哦,我本来想说emacs...
R.,

Answers:


48

最受欢迎的可能是BusyBox,但也有工具箱(供Android使用),toybox以及其他工具。


值得说明的是,Busybox是安装程序,而不是单个魔术二进制文件。至少不适用于Android。Busybox是设备上非本机工具的安装程序。它查看设备上已经存在的二进制文件并将其添加。对我来说,它将新的二进制文件放在/ system / xbin /中。
Corey Ogburn 2014年

1
@Corey你确定吗?它的关于页面说:“ BusyBox将许多常见UNIX实用程序的微型版本组合到一个小的可执行文件中。”
RedGrittyBrick 2014年

绝对。我对iOS不太确定,但在Android中必须安装BusyBox。该应用程序本身使您可以选择哪个版本的busybox以及在何处安装它们。我的当前说“已安装BusyBoxv1.22.1-Stericson。BusyBox已安装到/ system / xbin”。您可以查看已安装的二进制文件列表,并在/ system / xbin /中找到它们。它不是外壳,不是多合一的二进制文件,而是一堆二进制文件和一个简单的安装程序。
Corey Ogburn 2014年

2
@CoreyOgburn:原始的BusyBox是应用程序本身。Android应用程序尽管命名为BusyBox,但仅是安装“真实” BusyBox的应用程序。无论在Android,iOS,BSD或任何其他系统上,BusyBox本身基本相同。仅安装程序可能有所不同。
Michael Ehrenreich 2014年

3
而且“许多可执行文件”也不是正确的。busybox会创建大量与其自身的符号链接。例如,grep可能是到busybox的链接。一个例外是cd必须是内置的shell。
MSalters 2014年


3

BusyBox以一种非常新颖的方式设计,当您开始在/ bin目录中翻阅时可能会造成很大的混乱。

正如MSalters指出的那样,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大多数在引导操作期间使用的极简外壳。另请注意,发行版作者选择包括独立命令bunzip2bzcat而不是使用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的目的是最大程度地重用其内部的代码,以使一组通用命令所需的内存和磁盘空间(即“占用空间”)最小化……而无需外壳本身。

Bash和其他Shell完成相同的操作。但是,这样做,他们实现了自己的命令行环境。这个目标也是许多Shell功能使用某些非常古老的语法的原因之一。

我目前正在将这种“ BusyBox技术”用于Bash函数库,并且更易于使用包装器来处理各种bashism。它使我可以轻松地“扩展”带有--help选项的命令,并在可用时关闭GUI版本。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.