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と他のシェルは同じことを達成します。しかしそうするために、彼らは彼ら自身のコマンドライン環境を実装します。この目的も、多くのシェル機能のための非常に古風な構文のいくつかの理由の1つです。
私は現在Bash関数のライブラリのためにこの "BusyBoxのテクニック"を使っていて、様々なものにラッパーを使いやすくしています バシズム 。それは私が簡単にコマンドを "拡張"できるようにしました --help
利用可能な場合は、オプションを選択してGUIバージョンを起動します。