BusyBox

單一個可執行檔案的Unix工具集 来自维基百科,自由的百科全书

BusyBox

BusyBox是一個遵循GPL協定、以自由軟件形式發行的應用程式。Busybox在單一的可執行檔案中提供了精簡的Unix工具集,可執行於多款POSIX環境的作業系統,例如Linux(包括Android[7])、Hurd[8]、FreeBSD[8][9]等等。由於BusyBox執行檔的檔案比較小,使得它非常適合使用於嵌入式系統。作者將BusyBox稱為「嵌入式Linux的瑞士軍刀」。[10]

Quick Facts 原作者, 開發者 ...
BusyBox
Thumb
Thumb
原作者布魯斯·佩倫斯
開發者Erik Andersen[1]、Rob Landley[2]、Denys Vlasenko[3]及其他人
首次釋出1999年11月4日,​24年前​(1999-11-04[4]
目前版本
  • 1.36.0 (2023年1月3日;預發佈版本)[5]
  • 1.36.1 (2023年5月19日;穩定版本)[5]
編輯維基數據連結
原始碼函數庫 編輯維基數據連結
程式語言C
作業系統類Unix系統
檔案大小2.1 MB
類型
特許條款GNU GPL第二版(1.2.3版或更新[6]
網站www.busybox.net
Close

歷史

BusyBox最初是由布魯斯·斐倫斯在1996年為Debian GNU/Linux的軟碟安裝編寫的[11],其原始構想是希望在一張軟碟上能放入一個開機系統,以作為急救盤和安裝盤。後來它變成了嵌入式Linux裝置和系統和Linux發行版安裝程式的實質標準,因為每個Linux執行檔需要數KB的空間,而整合兩百多個程式的BusyBox可以節省大量空間。例如:Debian GNU/Linux的安裝光碟以BusyBox作為Shell程式。

Enrique Zanardi負責維護BusyBox並專注在Debian啟動軟碟英語Boot disk安裝系統的需求直到1998年,再由負責Linux路由器計劃英語Linux Router Project的Dave Cinege 接手。Cinege做了一些增加:建立了一個模組化的Build環境、轉移BusyBox的目標到一般高階的嵌入式系統。當1999年LRP開發進度趨緩時,Lineo, Inc.英語Lineo的Erik Andersen在1999年開始正式地接手這個專案繼續維護它到2006年三月。在這段期間,Linux的嵌入式系統的市場明顯地成長,連帶使BusyBox轉趨成熟,同時擴展二者的使用群和功能。

丹尼斯·弗拉先科英語Denis Vlasenko是目前BusyBox的維護者。

功能

BusyBox可以被自訂化以提供一個超過兩百種功能的子集。它可以提供多數詳列在單一UNIX規範裏的功能,以及許多用戶會想在Linux系統上看到的功能。BusyBox使用ash[12][13]在 BusyBox的網站上可以找到所有功能的列表。[14]

單一執行檔

典型的電腦程式對每個應用程式都有個別的二進制執行檔)檔案。BusyBox 是單一二進制程式,這是許多應用程式的集合,在適當參數的特定方法下,每個都可透過以不同的名稱(每個不同的名字藉由符號連結硬連結支援[15])呼叫單一 BusyBox 二進制程式來存取。

BusyBox受惠於單一執行檔策略,如此一來省去了每個執行檔必需有的檔頭(特別是ELF的執行檔),這也讓Busybox不需要函數庫便可達成程式碼共用。這個技巧與FreeBSD中的crunchgen[16]指令相似。與使用crunchgen建立的合併工具程式不同在於,Busybox只提供每個工具程式的簡化版(例如:ls指令不提供排序功能)。

共用通用的程式碼,並以程式大小最佳化為目標,使以BusyBox建構的系統所需要的空間遠小於使用對應的完整工具所需要的空間。研究[17]比較了GNU、Busybox、asmutilsPerl實作的標準Unix指令發現特定狀況下,BusyBox的執行速度會優於其他實作,但並非總是如此。

範例

BusyBox所包含的程式只需要簡單的將名稱附加在第一個參數即可執行:

/bin/busybox ls

更常見的作法是,這些指令會以連結(使用硬連結或者符號連結)至BusyBox執行檔,BusyBox會偵測其被連結時的名稱,並執行對應的指令。舉例來說,只要將/bin/ls連結到/bin/busybox,即可執行

/bin/ls

命令

實際的命令列表按編譯時的設置決定,在有Busybox的系統上執行busybox --list即可看到一個列表。

  • ash - 符合POSIX的一個簡單的shell
  • awk - 將檔案解析為記錄及欄位後,按模式匹配操作其內容
  • cat - 將多個檔案首尾相連顯示於標準輸出
  • chmod - 更改檔案的權限設置
  • cp - 拷貝檔案或目錄
  • date - 列印/設置日期時間
  • dd
  • df - 印出檔案系統的使用統計
  • dmesg - 檢視內核資訊
  • echo - 列印指定內容
  • egrep - 接受擴充正則表達式的grep
  • fgrep - 接受固定字串模式的grep
  • grep - 列出檔案或標準輸入中符合模式的行
  • gzip
  • kill - 關閉一個程式
  • ln - 建立連結
  • login - 以某個用戶身份登入
  • ls - 列出目錄或檔案
  • mdu
  • mkdir - 建立一個目錄
  • more
  • mount 掛載儲存裝置
  • mv - 移動檔案
  • netstat - 檢視 TCP/IP 連接資訊
  • ntpc
  • ntpsync
  • nvram
  • pidof
  • ping
  • ps - 印出程式狀態
  • pwd - 印出工作目錄
  • rm - 刪除檔案
  • rmdir - 移除目錄
  • rstats
  • sed
  • sh
  • sleep
  • sync - 將快取寫入到硬碟中
  • tar
  • touch
  • umount 移除掛載的儲存裝置
  • uname - 檢視系統資訊
  • usleep
  • vi - 一個帶有簡單的模式提示的精簡版仿vi編輯器
  • watch
  • wget - HTTP或FTP下載工具
  • zcat

參見

  • toybox英語toybox - complete implementation of the standard Linux command line utilities, with minimal external dependencies. by Rob Landley.

註釋

外部連結

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.