BusyBox是一个开源(GPL)项目,它提供了近400个常用命令的简单实现。人们很容易认为Linux的命令是理所当然的。当您安装Linux时,它们与系统捆绑在一起,我们通常不会问它们为什么在那里。一些基本命令,如cd、kill和echo并不总是独立的应用程序,但实际上内置在您的shell中。其他如ls、mv和cat是核心工具包的一部分(通常是GNUcoreutils)。但在开源世界中,总有一些替代方案,其中最有趣的是BusyBox。LinuxBusyBox简介BusyBox是一个开源(GPL)项目,它提供了近400个常用命令的简单实现,包括ls、mv、ln、mkdir、more、ps、gzip、bzip2、tar和grep。它还包括编程语言awk、流编辑器sed、文件系统检查器fsck、rpm和dpkg包管理器,当然还有用于轻松访问所有这些命令的shell(sh)。简而言之,它包含所有POSIX系统执行常见系统维护任务以及许多用户和管理任务所需的基本命令。事实上,它甚至包括一个init命令,可以作为PID1启动,成为所有其他系统服务的父进程。也就是说,BusyBox可以作为systemd、OpenRC、sinit、init等初始化系统的替代品。BusyBox非常小。作为一个可执行文件,它不到1MB,因此在嵌入式、边缘计算和物联网等存储空间非常宝贵的领域广受欢迎。在容器和云计算领域,它作为精简Linux容器镜像的基础镜像也很受欢迎。极简主义BusyBox的部分魅力在于它的极简主义。它的所有命令都被编译成一个二进制文件(busybox),它的手册只有81页(根据我对man发送到pr管道的计算),但它涵盖了近400个命令。作为一个例子的比较,这是“原版”的useradd—帮助的输出:-b,--base-dirBASE_DIRbasedirectoryforhome-c,--commentCOMMENTGECOSfieldofthenewaccount-d,--home-dirHOME_DIRhomedirectoryofthenewaccount-D,--defaultsprintorchangedthedefaultconfig-e,--expiredateEXPIRE_DATE新帐户的到期日期-f,--inactiveINACTIVEpasswordinactivity-g,--gidGROUPnameorIDoftheprimarygroups-G,--groupsGROUPSlistofsupplementarygroups-h,--helpdisplaythishelpmessageandexit-k,--skelSKEL_DIAlternativeskeletondir-K,--keyKEY=VALUEoverride/etc/login,-。-no-log-init不要将用户添加到最后一个日志-m,--create-home创建用户的主目录-M,--no-create-home不创建用户的主目录-N,--no-user-group不要用用户的名字创建组-o,--non-uniqueallowuserswithnon-uniqueUIDs-p,--passwordPASSWORDencryptedpasswordofthenewaccount-r,--systemcreateasystemaccount-R,--rootCHROOT_DIRdirectorytochrootinto-s,--shellSHELLloginshellofthenewaccount-u,--uidUIDuserIDofthenewaccount-U,--user-groupcreateagroupwiththesamenameasauser这是相同命令的BusyBox版本:-hDIRHomedirectory-gGECOSGECOSfield-sSHELLLoginshell-GGRPGroup-SCreateasystemuser-DDon'tassignapassword-HDon'tcreatehomedirectory-uUIDUserid-kSKELSkeletondirectory(/etc/skel)这个区别是一个特性这个限制取决于关于您希望您的命令有20个选项还是10个选项对于某些用户和某些用例,BusyBox的极简主义就足够了。对于其他人来说,这是一个很棒的最小环境,可用作后备,或作为安装更强大工具(如Bash、Zsh、GNUAwk等)的基础。安装BusyBox在Linux上,您可以使用包管理器安装BusyBox。例如,在Fedora和类似的发行版上:$sudodnfinstallbusybox在Debian及其衍生产品上:$sudoaptinstallbusybox在MacOS上,您可以使用MacPorts或Homebrew。在Windows上,Chocolatey可用。您可以使用chsh--shell命令后跟BusyBoxsh应用程序的路径,将BusyBox设置为您的shell。我将BusyBox放在/lib64中,但它的位置取决于您的发行版的安装位置。$whichbusybox/lib64/busybox/busybox$chsh--shell/lib64/busybox/sh用BusyBox全面替换所有常用命令有点复杂,因为大多数发行版都是“硬连线”以查找特定包的特定顺序。换句话说,虽然在技术上可以用BusyBox的init替换系统的init,但您的包管理器可能会拒绝让您删除包含init的包,以免您担心删除它会导致系统无法启动。有一些发行版构建在BusyBox之上,因此从一个新环境开始可能是体验BusyBox系统的最简单方法。试用BusyBox您不必为了试用BusyBox而将shell永久更改为BusyBox。您可以从当前shell中启动BusyBoxshell。$busyboxsh~$不过你的系统还安装了非BusyBox版本的命令,所以要体验BusyBox的工具,你必须将命令作为参数传递给busybox的可执行文件:~$busyboxecho$0sh~$busyboxls--帮助BusyBoxvX。YY.Z(2021-08-2507:31:48NZST)multi-callbinary.Usage:ls[-1AaCxdLHRFplinshrSXvctu][-wWIDTH][FILE]...Listdirectorycontents-1Onecolumnoutput-aIncludeentriesthatstartwith.-ALike-a,butexclude.and..-xListbylines[…]对于“完整”的BusyBox体验,您可以为每个命令创建一个指向busybox的符号链接。这很简单,只要你使用for循环:$mkdirbbx$foriin$(bbx--list);do\ln-s/path/to/busyboxbbx/$i\donepath,然后启动BusyBox:$PATH=$(pwd)/bbx:$PATHbbx/shBusyBox是一个有趣的项目,也是极简计算的一个例子。无论您是将BusyBox用作您唤醒的古老计算机的轻量级环境,还是用作嵌入式设备的用户界面,或者尝试一个新的初始化系统,甚至出于好奇,让自己重新认识那些熟悉又陌生的命令可以很有趣。
