この記事によると、dash
の方が遅いため、bash
が/bin/sh
として選択されました。 Dash as/bin/sh
dash
がどれだけ速いかについて具体的な数値はありますか?
Ubuntuの起動にbash
の代わりにdash
を使用すると、どれくらい時間がかかりますか?
上記のリンクの引数は今日もカウントされますか?背景:system-v initは多くのシェルスクリプトを使用しましたが、systemdは使用しません。
この質問は、合成ベンチマークの速度に関するものではありません。これは、エンドユーザーにとっての全体的な顕著な利点についてです。ダッシュ対バッシュの速度に関する総合的なベンチマークは、質問に答えません。
このテストはブートプロセスを代表するものではありませんが、簡単なテストスクリプトを作成することで簡単に試すことができます。shspeed
:
$ cat shspeed
for a in `seq 10000`; do ( :; ); done
これは単に10000個のサブシェルを次々にフォークします。 bashとdashで実行し、時間を計ります:
$ time dash shspeed
dash shspeed 0,70s user 0,33s system 107% cpu 0,965 total
$ time bash shspeed
bash shspeed 1,59s user 0,76s system 108% cpu 2,180 total
そのため、私のハードウェアでははるかに高速です。これは1年前のDell XPS 13 9365です。ローエンドのハードウェアでは大きな違いが生じると想像できます。また、このテストは、forループとサブシェルの生成のみに関するものです。おそらくいくつかのテストでは、結果はさらに重要になります。
もちろん、それを無視して、10000個のサブシェルを生成するのがどれだけ速いかは気にしないと言うことができます。まあ、いくつかは気にするようです:)
特定のブートプロセスでは、おそらく顕著な違いは生じません。 /bin/bash
として/bin/sh
を使用し、ストップウォッチで差を測定しても問題はありません。
問題の詳細な説明については、@ wjandreaからのこれらのリンクを確認してください。 https://wiki.ubuntu.com/DashAsBinSh 、 shがダッシュにリンクされているポイントは何ですか? =
質問を変更した後、どのシェルがより高速であるかについてあまり興味がないように聞こえますが、特にシェルスクリプトを使用していないため、ブートプロセスを0.5秒速くすることに固執する理由が増えていますsysv-initが標準だったときと同じ程度になりました。
私はUbuntuの政治に関与していないので、私に見えるように答えをしようとします:
別のシェルへのシンボリックリンクを使用するだけで、何かを0.5秒速くすることができれば、それだけの価値があります。
デフォルトのシェルが何もしないのは、POSIXがデフォルトのシェルに必要なことだけです。あるディストリビューションが、別のディストリビューションにはない(まだ)initスクリプトでbash機能を使用していると想像してください。
(d)標準のスクリプトでバシズムを修正し、将来的にそれらを回避するために、ashも追加されました。 /bin/sh
は合意された標準であり、大きな大きなインフラストラクチャが依存しているものです。不要な機能を備えたはるかに大きなコードベースを持つものに置き換えたいものはありません。
より少ないCPUサイクルとメモリを使用することは常に価値があります。 systemdユニットでさえ、多くの場合、バックグラウンドでシェルスクリプトを実行しています。
これはすべて平均的なユーザーには関係ない可能性がありますが、間接的に得られるのは全体的に安定した分布です。
これはもっと意見です:個人的に私はダッシュでスクリプトを書くことを決して選びません。非常に基本的な構造のみを提供します。より大きなソフトウェアの場合は、bashまたはzsh(またはシェルではないもの)を選択します。おそらく使用したい機能:高度なパラメーター展開、シェル演算、配列、またはそれ以上。
これは、デーモンの起動またはソフトウェアのインストールに主に使用されるスクリプトでは発生しません。それらは最小限の命令セットを使用し、スクリプトを読みやすくシンプルに保つ必要があります。しかし、bashのすべての長所を利用できるようになると、おそらく起こります。
/bin/sh
は主に、複雑なソフトウェアシステムではなく、合理的に便利な環境で外部プログラムを実行するためのものです。
/bin/sh
は、dashによって実装されるように、POSIX互換の高速で安定したスクリプト言語をもたらします。これは、システムシェルスクリプトの標準およびデフォルトのインタープリターとして機能します。これらのプロパティは、便利な機能のために犠牲になることはありません。
プログラマーの観点からは、「一つのことをして、それをうまくやる」というマントラを満たします。
これは主に最適化ではなく、職務の分離です。
それはすでにそこにあるので、それを維持するための追加の努力はありません。
エンドユーザーハットをオンにしてこれを見ると、どのようなエンドユーザーなのかという疑問が生じます。デスクトップユーザーはそれほど気にすることはできませんでしたが、より安定した(そしておそらく少し高速な)ディストリビューションの恩恵を受けることになります。パッケージメンテナーは多くのことを気にし、それらは、小さく、明確に定義され、十分にテストされた機能セットを備えた信頼性の高いシステムインタープリターから恩恵を受けます。プログラマは/bin/sh
で開発しない可能性が高いため、気にする必要はありません。
PS:bashバイナリは、ダッシュバイナリのほぼ10倍のサイズです!