残念ながら、何かが利用できるという保証はありません。
ただし、ほとんどのシステムには GNU coreutils があります。それだけで約 105 個のコマンドが提供されます。代わりに BusyBox を使用する可能性のある組み込みシステムでない限り、おそらくそれらに頼ることができます。
おそらく、bash、cron、GNU findutils、GNU grep、gzip、iproute2、iputils、man-db、module-init-tools、net-tools、passwd (passwd または shadow)、procps、tar、および util- にも依存できます。 Linux.
プログラムによっては、ディストリビューション間で若干の違いがあることに注意してください。例:/usr/bin/awk
gawkまたはmawkかもしれません。 /bin/sh
POSIX モードでは、dash または bash の可能性があります。一部の古いシステムでは、/usr/bin/host
は BIND 版と同じ構文ではないので、dig を使用した方がよいかもしれません。
いくつかの標準を探している場合、Linux Standard Base はいくつかの一般的に見られるプログラムを定義していますが、すべてのディストリビューションが標準に準拠していると主張しているわけではなく、オプションの LSB 互換パッケージをインストールした場合にのみ準拠していると主張するディストリビューションもあります。この例として、私が見たいくつかのシステムには lsb_release
が付属していません
これに加えて、POSIX によって標準化されたコマンドのリストが役立つ可能性があります。
問題に対するもう 1 つのアプローチは、各ディストリビューションのパッケージ ツール (Red Hat の場合は RPM、Debian の場合は DEB など) を使用してスクリプトをパッケージ化し、必要な他のプログラムまたはパッケージへの依存関係を宣言することです。少し手間がかかりますが、何が足りないかだけでなく、どのパッケージをインストールする必要があるかを示すわかりやすいエラー メッセージがユーザーに表示されることを意味します。
詳細:
- RPM - パッケージへの依存関係情報の追加
- Debian - パッケージ間の関係の宣言
非組み込み Linux システムでは、通常、ほとんどの GNU ユーティリティを利用できます:
- coreutils
- バッシュ
- findutils (少なくとも
find
およびxargs
、必ずしもlocate
であるとは限りません とupdatedb
) - grep
- gzip
- セド
- タール
さらに、util-linux スイートと procps スイート。 /bin/sh
に注意してください 常に bash であるとは限りません。ash の複数のフォークの 1 つなど、機能の少ないシェルである可能性があります。
Linux Standard Base は、準拠するすべてのシステムで期待される機能を備えた一連の共通ユーティリティを定義します。また、POSIX で指定されているほとんどのユーティリティも期待できます。注目すべき例外は pax
です 、これは多くのディストリビューションのデフォルト インストールの一部ではありません。
物事をシンプルに保ちたい場合は、lsb_release
のインストールをリクエストしてください パッケージ。多くのディストリビューションには、LSB が必要とするすべての依存関係を取り込むようなパッケージがあります。
組み込みシステムでは、すべての賭けが無効になります。組み込み Linux システムは通常 BusyBox を実行しますが、多くのユーティリティや機能はオプションであるため、確実に入手できるものはほとんどありません。
すべての Linux ディストリビューションではないにしても、ほとんどのコマンド セットがあり、さらに言えば、Unix ディストリビューションでも提供されます。これらは、POSIX 標準で指定された必須コマンドです。
あなたが引用するほとんどのコマンド (cd
、 mkdir
、 ls
、 echo
、 grep
、 sed
、 awk
、など) です。例外は ping
です WhiteWinterWolf が正しくコメントしたように。