起動/終了時に実行されるプログラムをスクリプトで書く必要があるのはなぜですかbash
?
コンパイルされた言語(またはPythonなどのより速く解釈される言語)を使用すると、実行時間が短くなります。
答え1
これは概して歴史的問題であり、部分的にはシステム管理の制御問題であり、部分的には移植性の問題であり、部分的にはデバッグ問題である。
「昔は」autoconf、dpkg、rpmはありませんでした。ソフトウェアをダウンロードし(時々UUCPで)、製品をコンパイルしてから、自分の規則に従ってインストールする場所を決定します。製品を開始/終了システムに接続することは、システム管理者の責任と見なされます。システム管理者はrc
スクリプトを作成し、システムの適切な場所(、、、、/etc/inittab
)/etc/rcN.d/
に配置します。最先端の非Linuxシステムがますます少なくなるにつれて、LinuxとLinuxの出現により、これらの基本的なオプションのいくつかはそれほど重要ではなくなりました。/etc/rc.local
/etc/inetd.conf
rpm
dpkg
システム管理者はまた、システムに対するある程度のコントロールを持っていることを望み、Cプログラムではなくシェルスクリプトが作成、デバッグ、そして後で修正するのが最も簡単です。
前述したように、UNIXオペレーティングシステムごとに起動方法が異なります。開発者が可能なすべてのUNIXタイプのスクリプトを書くよりも、自分のシステム用の短いシェルスクリプトを書く方がはるかに簡単です(そしてこれはautoconfの前でも同じです):SysV、Ultrix、Irix、HP-UX、SunOS、 Solaris、ネクストステップ、ノンストップなど、ほとんどの場合、2つの3つのメカニズムに分けられますが、各メカニズムには独自の特性があります。
システムの起動は簡単に複雑になります。デバッグ情報を印刷したり、フローを変更したり、プログラムの作成者が予期しない対話を処理したりできるシェルスクリプトがあればよいでしょう。これがコンパイルされたプログラムであれば、そのようなエラーを見つけるのははるかに難しくなります。
最新のシステムには新しいメカニズムがありますが、ほとんどのシステムは上記の理由でまだシェルスクリプトを呼び出します。
答え2
ほとんどの起動プロセスはIO集約的です。つまり、ファイルがディスクからロードされるか、デバイスが初期化されるのを待ちます。コンパイルされた言語を使用しても大きな利点はありません。
使用禁煙健康増進協会bashを交換すると、起動プロセスの速度がやや速くなります。 Ashはbashよりも高速で小さく設計されており、これはより少ない機能(POSIXなど)を使用して達成されます。決定的に、Ashはより速く始まります。これは、起動プロセスが複数のスクリプトに分割されるため、測定可能な利点を提供します。より多くのPythonを使用すると、Pythonインタプリタが大きくなり、各プロセスの起動に時間がかかるため、起動プロセスが遅くなる可能性があります。
Unixシステムには、通常、初期化する必要がある各サブシステムまたはデーモンに対して1つ以上のスクリプトがあります。これらのスクリプトは、システム管理者が調整することがよくあります。ジョブは、さまざまなソースから複数の小さなプログラム(各サブシステムごとに1つ)に分けられます。多くの小さくてシンプルなプログラムでは、シェルは非常に高速です。コンパイルされた言語を使用すると、多くの利点は得られませんが、柔軟性の点で膨大なコストがかかります。
答え3
bashスクリプトを変更することは、実行可能ファイルのソースを見つけるよりも簡単です。
起動スクリプトはディストリビューション別に作成されることが多いため、簡単に変更することが重要です。
Bashスクリプトが遅いと思われる場合は、dashを見て、dashで実行されるPOSIX準拠のshスクリプトを作成することをお勧めします。