搞嵌入式Linux的同學(xué),你應(yīng)該用過或聽說過BusyBox。。。。。。。你拿 Buildroot 編一個最精簡的系統(tǒng)出來,默認(rèn)塞給你的 shell 環(huán)境就是BusyBox。你家里那臺跑 OpenWrt 的路由器,根文件系統(tǒng)也是BusyBox。甚至 docker 里最常用的那個 5MB 的 Alpine Linux 基礎(chǔ)鏡像,/bin/sh 指向的還是 busybox。
但很多人天天敲 ls、cd、ifconfig,從來沒想過這些命令背后站著的其實(shí)是同一個程序。
一個叫 BusyBox 的東西。

OpenWrt 路由器啟動畫面,BusyBox v1.28.4 自帶的 ash shell 在跑——這就是絕大多數(shù)人家里那臺路由器的「靈魂。。。。。」。
——
BusyBox 把三百多個最常用的 Linux 命令,塞進(jìn)了一個可執(zhí)行文件里。
ls、cp、cat、echo、grep、find、mount、ifconfig——你能在 shell 里敲的常見命令,它基本都帶了。普通的 Linux 發(fā)行版,每個命令都是一個獨(dú)立的可執(zhí)行程序,散落在 /bin、/usr/bin 底下。
BusyBox 不一樣,就一個二進(jìn)制文件 busybox,你敲的 ls、cp 那些,全是指向 busybox 的軟鏈接。
程序啟動的時候看自己被叫成啥名,就干啥活——這套機(jī)制叫 applet(小工具)。所以你在嵌入式板子上看到的 /bin/sh,ls -alh 去查一下,,,,,八成是個指向 busybox 的軟鏈接。
BusyBox 有多???
只留 20 個最基礎(chǔ)的命令,能壓到 350KB;全功能默認(rèn)編譯大概 1.8MB。對比一下,完整的 GNU coreutils + bash 吃 100MB 以上,每個命令獨(dú)立占地方,動輒要好幾 MB 內(nèi)存。一顆 8M 的 nor flash,用 BusyBox 能把整套命令行環(huán)境塞進(jìn)去,還能剩地方給你自己的程序。
這就是它在嵌入式設(shè)備里到處都是BusyBox的根根根根原因。。。

busybox --help 輸出,最后那段 `[` 開頭到結(jié)尾就是它塞進(jìn)來的全部 applet 名字。
——
BusyBox是 1996 年寫的。
當(dāng)時 Bruce Perens 在給 Debian GNU/Linux 寫安裝軟盤。那時候裝系統(tǒng)得靠一張軟盤引導(dǎo),軟盤容量 1.44MB,塞一個能用的命令行環(huán)境都費(fèi)勁。
他的思路很簡單
與其把幾十個命令程序一個個塞進(jìn)軟盤,不如寫一個大程序,把常用命令全收進(jìn)去,需要用哪個就調(diào)哪個。寫完之后這軟盤既能當(dāng)安裝盤,也能當(dāng)急救盤——系統(tǒng)崩了起不來的時候,拿這張盤引導(dǎo),掛載上硬盤,把系統(tǒng)修好。
寫完了,Bruce Perens 就撒手了。
后面維護(hù)者換了好幾輪。
1996 到 1998 是 Enrique Zanardi 接著維護(hù),主要伺候 Debian 啟動軟盤。
1998 到 1999,Dave Cinege 把它做成模塊化,開始往嵌入式方向帶——他當(dāng)時在搞 Linux Router Project,路由器上資源緊,BusyBox 正好用得上。
最關(guān)鍵的是 Erik Andersen。他從 1999 年一直維護(hù)到 2006 年 3 月,BusyBox 今天能塞進(jìn)三百多個命令,大半是他那幾年攢出來的。
這人也是 uClibc 的作者——一個人撐起了嵌入式 Linux 兩套地基。
2006 年前后,Rob Landley 接手,后來因?yàn)樵S可證的事跟社區(qū)鬧掰了,自己另寫了一個叫 Toybox 的東西。2006 年 10 月起,Denys Vlasenko 接手,到現(xiàn)在還在維護(hù)。

——
你做嵌入式開發(fā),大概率已經(jīng)用過 BusyBox,只是沒注意。
OpenWrt 路由器的根文件系統(tǒng)默認(rèn)就是BusyBox。Buildroot 編出來的系統(tǒng)默認(rèn)也是BusyBox。Alpine Linux 的 /bin/sh 指向的還是BusyBox。這不是巧合——嵌入式設(shè)備 flash 小、內(nèi)存緊,用完整 coreutils + bash 光命令就吃掉大半空間,輪不到你自己的程序。BusyBox 一個二進(jìn)制頂幾百個命令,省下來的空間才是真金白銀。

一塊 Cirrus Logic EP9302 的 ARM9 開發(fā)板,左下角那個黑色接口是 Console 串口——上電之后跑的就是 BusyBox。
而且BusyBox不只是一堆命令的集合。
BusyBox自帶 init——就是那個 PID 1 的進(jìn)程,系統(tǒng)起來第一個跑的就是BusyBox。
自帶一個叫 ash 的 shell,你板子上 /bin/sh 指向 busybox 的時候,真正在跑的 shell 就是 ash。它還藏著好幾個常駐服務(wù):httpd 能跑網(wǎng)頁服務(wù),telnetd 能遠(yuǎn)程登錄,udhcpd 能分配 IP,ntpd 能對時,ftpd 能傳文件——全在一個二進(jìn)制里。
你家里那臺路由器的管理頁面,背后很可能就是 BusyBox 的 httpd 在撐著。

TTYD 跑出來的 Web 終端,正在用 busybox 自帶的 iperf3 測網(wǎng)速。背后那個 httpd 撐起來的 Web UI,也是 BusyBox 。
要是嫌命令太多,想自己裁剪,它用的是跟 Linux 內(nèi)核一樣的 menuconfig:
make menuconfig
方向鍵挪來挪去,哪些命令要、哪些不要,勾完編出來。跟你配內(nèi)核一個體驗(yàn)。

BusyBox 1.27.2 的 make menuconfig 主界面,方向鍵往下挪能勾出幾十個分類(Archival、Coreutils、Editors、Networking 都在里面)。
還有個東西叫"standalone shell"模式。
你不用建那堆軟鏈接,直接進(jìn) busybox 自己的 shell,就能調(diào)所有內(nèi)建命令。做 initramfs 早期引導(dǎo)的時候經(jīng)常這么玩——系統(tǒng)還沒掛載好,靠這個模式就能干活。
另外它能跑在沒有 MMU 的芯片上。正常 Linux 進(jìn)程靠 MMU 做內(nèi)存隔離,但像 ARM7、ColdFire 這類沒 MMU 的便宜芯片,靠 uClinux 也能跑 Linux,BusyBox 就是這套系統(tǒng)里默認(rèn)的命令行。板子越便宜,越離不開它。
——
BusyBox 還打過一場官司,在美國開源法律史上是有位置的。
2007 年 9 月,軟件自由法律中心(SFLC)代表 BusyBox 的兩位開發(fā)者 Erik Andersen 和 Rob Landley,把一家叫 Monsoon Multimedia 的公司告了。
Monsoon 在一款叫 HAVA 的電視轉(zhuǎn)播設(shè)備里用了 BusyBox,沒按 GPLv2 的要求公開源代碼。
這是美國歷史上第一樁因?yàn)檫`反 GPL 而打的官司。GPL 從 1991 年出來,大家都說它"強(qiáng) copyleft",但真到法庭上管不管用,從來沒人試過。
案子很快和解了——Monsoon 乖乖把源碼掛上網(wǎng)、交了筆錢、還專門設(shè)了個開源合規(guī)官。SFLC 接著又告了好幾家:Xterasys、High-Gain Antennas、Verizon(Actiontec 路由器)、Bell Microproducts、Super Micro。2009 年 12 月一口氣告了 Best Buy、JVC、三星等 14 家,其中 Westinghouse 被判三倍賠償 9 萬美元。
Bruce Perens 沒參與這些官司,后來還專門發(fā)聲明,說對當(dāng)時維護(hù)者的一些做法不太滿意。
但這場官司之后,所有用開源軟件做產(chǎn)品的公司都明白了一件事——GPL 不是廢紙,你不公開源碼,真有人把你告上法庭。
——
BusyBox 官網(wǎng)的 tagline 就一句話:The Swiss Army Knife of Embedded Linux——嵌入式 Linux 的瑞士軍刀。
1996 年一張軟盤上的安裝工具,到今天全世界的路由器、機(jī)頂盒、工控板里都有它。
不做內(nèi)核,不做框架,不上熱搜。就是一個安靜的二進(jìn)制,你敲命令的時候BusyBox能響應(yīng),不敲的時候它也不嘰嘰歪歪。。。。。

在MPU上部署離線版DeepSeek -R1模型

給小學(xué)生解釋Linux內(nèi)核中的常用鎖!