From buntu 14.04 bashのデフォルトのシェルはなぜですか? :
Debian派生物では、ルートとして
/bin/sh
ダッシュを実行することにより、デフォルトのdpkg-reconfigure
としてDashとBashを切り替えることができます。
update-alternatives
とdpkg-reconfigure
の両方を使用して、/bin/
のシンボリックリンクがリンクする実行可能ファイルを変更できるのは正しいですか?
はいの場合、この目的のために、update-alternatives
とdpkg-reconfigure
の違いは何ですか?
ありがとう。
update-alternatives
は、実際には/bin
の下、またはその他の場所でシンボリックリンクを管理するために使用できます。 それが目的です 。協力パッケージまたは手動セットアップが必要です—さまざまな代替手段を登録する必要があります。
dpkg-reconfigure
はまったく特定されておらず、パッケージのインストール後のメンテナスクリプトのみを実行します。そのため、その動作は、構成に使用される特定のパッケージに完全に依存します。 bash
およびdash
の場合、メンテナスクリプトは/bin/sh
シンボリックリンクを処理するため、はい、この特定のケースではdpkg-reconfigure
がシンボリックリンクの管理に使用されます。
bash
とdash
がupdate-alternatives
を使用して/bin/sh
を管理しない理由は、可能性が有効になっているときにupdate-alternatives
が有効になっていないためです。 /bin/sh
などの機密ファイルを信頼できるほど堅牢であると見なされます。 anythingがうまくいかず、/bin/sh
が削除されるか、存在しないファイルを指すようになると、システムはほとんど役に立たなくなり、修正するのは難しい。正しく起動することすらできません...したがって、bash
とdash
は、/bin/sh
が常に使用できるように細心の注意を払っています。これには、インストール前の「スクリプト」(依存関係のループを回避するために実際にはバイナリ)での注意深い処理、dpkg-divert
を含むトリック、およびインストール後のスクリプトでの最後の処理が含まれます。これらすべての設計の詳細については、 bug#34717 (19年前)を参照してください。
システム内のどのバイナリが代替を使用して処理され、どのバイナリが(メンテナスクリプトからの)迂回を使用して処理されるかを判断するには、対応するツール、特にすべての迂回を一覧表示するdpkg-divert --list
を使用できます。 update-alternatives --list
の場合、関心のある代替グループを知る必要がありますが、代替はすべて/etc/alternatives
内のファイルへのシンボリックリンクであるため、簡単に見つけることができます。
update-alternatives
コマンドでは、/ bin内のシンボリックリンクが指す代替を管理するために、すべての代替がそれに登録されている必要があります。
代替システムは、一度に複数のシンボリックリンクを管理でき、複数の代替実装を処理できるため、非常に柔軟性があります。2つ以上がインストールされている場合にどちらを選択するかを決定するのに役立つ重みを与え、適切に選択することもできます。アンインストールされた場合、次に高い重みがあります。
dpkg-reconfigure dash
が使用するスキームは、dpkgの迂回システムを使用します。1つのパッケージ(bash)は/bin/sh
を出荷しますが、他のパッケージはそれを「迂回」して実装でオーバーライドできます。
dpkgの流用システムはシンボリックリンクに限定されず(ファイルを流用することもできます)、update-alternatives
などのシステムを採用するために変更する元のシンボリックリンク(またはファイル)を出荷するメインパッケージを必要としません。
迂回システムは代替システムほど柔軟ではありません。通常、迂回の最上位に配置するように構成するパッケージに依存し、多くの場合、構成をまったく行いません(新しいパッケージをインストールするだけでファイルが自動的に迂回されます)以前にインストールされたパッケージから、構成なしで。)これらの制限により、dpkgの迂回システムを使用して3つ以上の選択肢を実装することも困難になります。