Linuxコマンドを当然のことと考えるのは簡単です。 Linuxをインストールすると、これらはシステムにバンドルされており、なぜそこにあるのか疑問に思わないことがよくあります。 cd
などの基本的なコマンドの一部 、kill
、およびecho
常に独立したアプリケーションであるとは限りませんが、実際にはシェルに組み込まれています。 ls
などのその他 、mv
、およびcat
コアユーティリティパッケージの一部です(多くの場合、GNU coreutils
具体的には)。しかし、オープンソースの世界には常に選択肢があり、最も興味深いものの1つはBusyBoxです。
LinuxのBusyBoxとは何ですか?
その他のLinuxリソース
- Linuxコマンドのチートシート
- 高度なLinuxコマンドのチートシート
- 無料のオンラインコース:RHELの技術概要
- Linuxネットワーキングのチートシート
- SELinuxチートシート
- Linuxの一般的なコマンドのチートシート
- Linuxコンテナとは何ですか?
- 最新のLinux記事
BusyBoxはオープンソース(GPL)プロジェクトであり、ls
を含む400近くの一般的なコマンドの簡単な実装を提供します。 、mv
、ln
、mkdir
、more
、ps
、gzip
、bzip2
、tar
、およびgrep
。プログラミング言語awk
のバージョンも含まれています 、ストリームエディタsed
、ファイルシステムチェッカーfsck
、rpm
およびdpkg
パッケージマネージャー、そしてもちろんシェル(sh
)これらすべてのコマンドに簡単にアクセスできます。つまり、POSIXシステムが一般的なシステム保守タスクと多くのユーザーおよび管理タスクを実行するために必要なすべての重要なコマンドが含まれています。
実際、init
も含まれています 他のすべてのシステムサービスの親プロセスとして機能するPID1として起動できるコマンド。つまり、BusyBoxは、systemd、OpenRC、sinit、init、およびその他の起動デーモンの代わりに使用できます。
BusyBoxは非常に小さいです。実行可能ファイルとしては1MB未満であるため、ドライブスペースが貴重な組み込み、エッジ、およびIoTスペースで人気を博しています。コンテナーとクラウドコンピューティングの世界では、最小限のLinuxコンテナーイメージの基盤としても人気があります。
ミニマリズム
BusyBoxの魅力の一部はそのミニマリズムです。そのすべてのコマンドは、単一のバイナリ(busybox
)にコンパイルされます )、およびそのマニュアルページはわずか81ページです(私の計算によるとman
pr
へ )ただし、400近くのコマンドをカバーしています。
比較例として、shadow
の出力を次に示します。 useradd --help
のバージョン :
-b, --base-dir BASE_DIR base directory for home
-c, --comment COMMENT GECOS field of the new account
-d, --home-dir HOME_DIR home directory of the new account
-D, --defaults print or change the default config
-e, --expiredate EXPIRE_DATE expiration date of the new account
-f, --inactive INACTIVE password inactivity
-g, --gid GROUP name or ID of the primary group
-G, --groups GROUPS list of supplementary groups
-h, --help display this help message and exit
-k, --skel SKEL_DIR alternative skeleton dir
-K, --key KEY=VALUE override /etc/login.defs
-l, --no-log-init do not add the user to the lastlog
-m, --create-home create the user's home directory
-M, --no-create-home do not create the user's home directory
-N, --no-user-group do not create a group with the user's name
-o, --non-unique allow users with non-unique UIDs
-p, --password PASSWORD encrypted password of the new account
-r, --system create a system account
-R, --root CHROOT_DIR directory to chroot into
-s, --shell SHELL login shell of the new account
-u, --uid UID user ID of the new account
-U, --user-group create a group with the same name as a user
そして、これが同じコマンドのBusyBoxバージョンです:
-h DIR Home directory
-g GECOS GECOS field
-s SHELL Login shell
-G GRP Group
-S Create a system user
-D Don't assign a password
-H Don't create home directory
-u UID User id
-k SKEL Skeleton directory (/etc/skel)
この違いが機能であるか制限であるかは、コマンドに20個のオプションを含めるか10個のオプションを使用するかによって異なります。一部のユーザーとユースケースでは、BusyBoxのミニマリズムは、実行する必要のあることを十分に提供します。他の人にとっては、フォールバックとして、またはBash、Zsh、GNUAwkなどのより堅牢なツールをインストールするための基盤として使用するのが適切な最小限の環境です。
BusyBoxのインストール
Linuxでは、パッケージマネージャーを使用してBusyBoxをインストールできます。たとえば、Fedoraなどの場合:
$ sudo dnf install busybox
Debianとその派生物について:
$ sudo apt install busybox
macOSでは、MacPortsまたはHomebrewを使用します。 Windowsでは、Chocolateyを使用します。
chsh --shell
を使用して、BusyBoxをシェルとして設定できます。 コマンドの後に、BusyBox sh
へのパスが続きます 応用。 BusyBoxを/lib64
に保管しています 、ただし、その場所はディストリビューションがインストールした場所によって異なります。
$ which busybox
/lib64/busybox/busybox
$ chsh --shell /lib64/busybox/sh
ほとんどのディストリビューションは特定のコマンドの特定のパッケージを探すために「ハードワイヤード」されているため、すべての一般的なコマンドをBusyBoxに置き換えるのは少し複雑です。つまり、技術的にはinit
を置き換えることは可能ですが BusyBoxのinit
を使用 、パッケージマネージャーは、init
を含むパッケージの削除を拒否する場合があります システムが起動できなくなることを恐れて。 BusyBoxに基づいて構築されたディストリビューションがいくつかあるため、BusyBoxを中心に構築されたシステムを体験するには、おそらく最初からやり直すのが最も簡単な方法です。
BusyBoxをお試しください
試してみるだけで、シェルを恒久的にBusyBoxに変更する必要はありません。現在のシェルからBusyBoxシェルを起動できます:
$ busybox sh
~ $
ただし、システムにはまだBusyBox以外のバージョンのコマンドがインストールされているため、BusyBoxのツールを体験するには、busybox
への引数としてコマンドを発行する必要があります。 実行可能ファイル:
~ $ busybox echo $0
sh
~ $ busybox ls --help
BusyBox vX.YY.Z (2021-08-25 07:31:48 NZST) multi-call binary.
Usage: ls [-1AaCxdLHRFplinshrSXvctu] [-w WIDTH] [FILE]...
List directory contents
-1 One column output
-a Include entries that start with .
-A Like -a, but exclude . and ..
-x List by lines
[...]
「完全な」BusyBoxエクスペリエンスのために、busybox
へのシンボリックリンクを作成できます コマンドごとに。 forループを使用している限り、これは思ったより簡単です:
$ mkdir bbx
$ for i in $(bbx --list); do \
ln -s /path/to/busybox bbx/$i \
done
startにシンボリックリンクのディレクトリを追加します パスを確認し、BusyBoxを起動します:
$ PATH=$(pwd)/bbx:$PATH bbx/sh
忙しくする
BusyBoxは楽しいプロジェクトであり、最小限の例です。 コンピューティングは可能です。 BusyBoxを、救助した古代のコンピューターの軽量環境として使用する場合でも、組み込みデバイスのユーザーランドとして使用する場合でも、新しいinitシステムを試すために使用する場合でも、好奇心として使用する場合でも、昔ながらの慣れ親しんだものに慣れることは楽しいことです。新しいコマンド。