我记得对于在嵌入式系统中运行的Linux,由于大小限制,它无法打包与普通工作站一样多的命令。因此,有一个做它,所有的可以模拟几乎所有的命令(包括命令ls
,cd
,time
等),但我不记得它的名字。
我只是模糊地想起了诸如“ minibox”之类的东西,或者它的名称中似乎有一个“ box”,有人知道它的名字吗?
cd
,但这是不可能的。
sh
,它cd
是内置的。
emacs
...
我记得对于在嵌入式系统中运行的Linux,由于大小限制,它无法打包与普通工作站一样多的命令。因此,有一个做它,所有的可以模拟几乎所有的命令(包括命令ls
,cd
,time
等),但我不记得它的名字。
我只是模糊地想起了诸如“ minibox”之类的东西,或者它的名称中似乎有一个“ box”,有人知道它的名字吗?
cd
,但这是不可能的。
sh
,它cd
是内置的。
emacs
...
Answers:
grep
可能是到busybox的链接。一个例外是cd
必须是内置的shell。
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
大多数在引导操作期间使用的极简外壳。另请注意,发行版作者选择包括独立命令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的目的是最大程度地重用其内部的代码,以使一组通用命令所需的内存和磁盘空间(即“占用空间”)最小化……而无需外壳本身。
Bash和其他Shell完成相同的操作。但是,这样做,他们实现了自己的命令行环境。这个目标也是许多Shell功能使用某些非常古老的语法的原因之一。
我目前正在将这种“ BusyBox技术”用于Bash函数库,并且更易于使用包装器来处理各种bashism。它使我可以轻松地“扩展”带有--help
选项的命令,并在可用时关闭GUI版本。