他のほとんどすべてのコマンドをカプセル化しているLinuxコマンドは何ですか?


23

サイズが制限されているため、組み込みシステムで実行されているLinuxでは、通常のワークステーションほど多くのコマンドをパックできないことを私は覚えています。そのため、ほぼすべてのコマンドを模倣できるdo-it-allコマンドがあります。 lscdtime、など)しかし、私はその名前を覚えていません。

私は漠然と「ミニボックス」や何かのような何かを覚えていました、それはその名前に「箱」があるように見えます、誰もがその名前が何であるか知っていますか?


12
それはbusyboxと呼ばれています。
MariusMatutiae

はい、ありがとうございます。
wangshuaijie

6
まねない cd しかし、それは不可能です。
OrangeDog

4
@OrangeDog:...しかしそれはまねる shこれは cd 組み込みとして。
Ilmari Karonen

5
D'oh、私が言うつもりだった emacs...
R..

回答:


48

最も人気のある BusyBox しかし、またあります ツールボックス (Androidが使用) オモチャ箱 そして多分他の人。


Busyboxはインストーラであり、単一の魔法のバイナリではないことを明確にする価値があります。少なくともAndroid用ではありません。 Busyboxは、デバイス上にネイティブではないツール用のインストーラです。それはすでにデバイス上にあるバイナリを見てそれらに追加します。私にとっては、新しいバイナリを/ system / xbin /に置きました。
Corey Ogburn

1
@コレーよろしいですか?その ページは言う 「BusyBoxは、多くの一般的なUNIXユーティリティの小さなバージョンを1つの小さな実行可能ファイルにまとめたものです。」
RedGrittyBrick

もちろんです。私はiOSについてはよくわかりませんが、AndroidではBusyBoxをインストールする必要があります。アプリ自体で、どのバージョンのbusyboxとそれらをどこにインストールするかを選択できます。 Mineは現在「BusyBox v1.22.1-Stericsonがインストールされています。BusyBoxは/ system / xbinにインストールされています」と言っています。インストールされているバイナリの一覧を見て/ system / xbin /に見つけることができます。これはシェルではなく、オールインワンバイナリーでもなく、バイナリーのバンドルと簡単なインストーラーです。
Corey Ogburn

2
@CoreyOgburn:オリジナルのBusyBoxはアプリケーションそのものです。 Androidアプリは、BusyBoxという名前ですが、「本物の」BusyBoxをインストールするだけのアプリです。 BusyBox自体は基本的に同じです。Android、iOS、BSD、その他のシステムでも同じです。インストーラーのみが異なる場合があります。
Michael Ehrenreich

3
そして「多くの実行可能ファイル」もまた真実ではありません。 busyboxはそれ自身へのシンボリックリンクのトンを作成します。例えば。 grep おそらくbusyboxへのリンクです。唯一の例外は次のとおりです。 cd それがシェル組み込みでなければならないように。
MSalters


3

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バージョンを起動します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.