BusyBoxは最近、特にDockerユーザーの間で人気が高まっています。多くのDockerイメージは、BusyBoxを使用して最小限のイメージを提供します。
また、Linuxコマンドを当然のことと見なすと、多くのユーザーが特に混乱する可能性があります。 ls、mv、およびその他のそのようなコマンドはLinuxの一部であると思いますが、実際には、これらのコマンドはGNU Coreutilsパッケージの一部であり、ほとんどのLinuxディストリビューションにはプリインストールされています。
GNU Coreutilsは、さまざまなUNIX/Linuxコマンドのほぼ事実上のプロバイダーです。ほとんどの場合、代替手段が常にあり、BusyBoxはGNUCoreutilsの代替手段の1つです。
BusyBoxとは何ですか?
BusyBoxは、約400の一般的なUNIX/Linuxコマンドの簡略化された実装を提供するオープンソースプロジェクトです。取り除いた?はい。 BusyBoxの実装により、一般的ではなく、めったに使用されないコマンドオプションが削除されます。すべてが1MB未満に収まり、この最小限の画像が、組み込みシステムやIoTドメイン、さらにはクラウドコンピューティングの世界で人気を博している理由です。
そのサイズで行かないでください。 BusyBoxには、従来のエディターのようにsedとawkのスコープがあり(バージョンを削除)、独自のシェルも含まれています。 PID 1として起動できるinitコマンドも含まれています。これは、BusyBoxをSystemd、OpenRCなどの代替として構成できることを意味します。
BusyBoxは、特にオペレーティングシステムのサイズが小さいことが重要な場合に、GNUCoreutilsの優れた代替手段です。
🗒️BusyBoxは、mv、mkdir、lsなどの一般的なLinuxコマンドを提供しますが、これらのコマンドで一般的に使用されるオプションのみが含まれています。このミニマリズムはBusyBoxのUSPです。完全なLinuxコマンドを取得できないのは問題ですか? BusyBoxのオプション?
それは本当にあなたの必要性に依存します。ほとんどの人は、コマンドのすべてのオプションを必要とすることはありません。一部のLinuxコマンドには50を超えるオプションがあり、1つのLinuxコマンドでさえすべてのオプションを使用したことはないでしょう。
BusyBoxはめったに使用されないオプションを削減します。たとえば、lsコマンドにはオプションGがあり、ロングリスト出力(ls -l)からグループ名を削除します。
さて、私はあなたがこのオプションを必要としなかったと思います。これが、BusyBoxのls実装に存在しない理由です。グループ名が含まれていない出力が本当に必要な場合は、その目的でcutまたはawkコマンドを使用するだけです。
別の例を見てください。これは、GNUCoreutilsのmvコマンドのヘルプページです。
Usage: mv [OPTION]... [-T] SOURCE DEST
or: mv [OPTION]... SOURCE... DIRECTORY
or: mv [OPTION]... -t DIRECTORY SOURCE...
Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.
Mandatory arguments to long options are mandatory for short options too.
--backup[=CONTROL] make a backup of each existing destination file
-b like --backup but does not accept an argument
-f, --force do not prompt before overwriting
-i, --interactive prompt before overwrite
-n, --no-clobber do not overwrite an existing file
If you specify more than one of -i, -f, -n, only the final one takes effect.
--strip-trailing-slashes remove any trailing slashes from each SOURCE
argument
-S, --suffix=SUFFIX override the usual backup suffix
-t, --target-directory=DIRECTORY move all SOURCE arguments into DIRECTORY
-T, --no-target-directory treat DEST as a normal file
-u, --update move only when the SOURCE file is newer
than the destination file or when the
destination file is missing
-v, --verbose explain what is being done
-Z, --context set SELinux security context of destination
file to default type
--help display this help and exit
--version output version information and exit
さて、これがBusyBoxのmvコマンドヘルプページです:
Usage: mv [-fin] SOURCE DEST
or: mv [-fin] SOURCE... DIRECTORY
Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY
-f Don't prompt before overwriting
-i Interactive, prompt before overwrite
-n Don't overwrite an existing file
違いを見ます?
BusyBoxを入手するには?
BusyBoxを入手するにはさまざまな方法があります。
現在のLinuxディストリビューションでBusyBoxを体験したいだけの場合は、Apt、DNF、Yumなどのディストリビューションのパッケージマネージャーを使用してインストールできます。
Ubuntuでは、次のコマンドを使用してBusyBoxをインストールできます:
sudo apt install busybox
その後、BusyBoxバージョンのコマンドを実行する場合は、その前にbusyboxを追加する必要があります。
busybox cat sample.txt
コマンドがBusyBoxによって実装されていない場合、「アプレットが見つかりません」というエラーがスローされます。
[email protected]:~$ busybox xyz
xyz: applet not found
または 、BusyBoxのDockerイメージをダウンロードして、実行中のコンテナーで体験できます。
Dockerがインストールされていることを確認してください。公式のDockerイメージをプルします:
docker pull busybox
イメージからコンテナを実行し、BusyBoxシェルに入ります:
docker run -it --rm busybox
ここで実行するすべてのLinuxコマンドはBusyBoxからのものです。明示的に指定する必要はありません。
全体として、通常のLinuxシステムではBusyBoxは必要ありません。そこにはすでにGNUCoreutilsからのLinuxコマンドのフルバージョンがあります。簡略化されたバージョンをインストールする必要はありません。
ただし、BusyBoxは、組み込みデバイスまたはIoTデバイス用に最小限のLinuxOSを構成する場合などの特別な領域で使用されます。 Dockerイメージのサイズを小さくしたい場合も同様です。
BusyBoxをよりよく理解していただければ幸いです。説明が必要な場合や提案がある場合は、コメントでお知らせください。