多くのユーザーは、目標を達成している限り、コンピューターがタスクをどのように達成するかを気にしないため、抽象化はユーザーに役立ちます。実際、アプリケーションでさえ、すべてのシステムコールが正しく応答されている限り、何かがどのように達成されるかを常に気にするわけではありません。理論的には、Linux sysadminは、実行可能ファイルの正確な名前ではなく、機能に応じて多くのシステムツールを提供できますが、多くの場合、多くのシンボリックリンクとバージョン追跡が必要になります。そうでない限り、alternatives
を使用します コマンド。
alternatives
コマンドは、興味深いことに、代替手段としてその人生を始めました。もともと、これはupdate-alternatives
と呼ばれるDebianLinuxプロジェクトからPerlで書かれた便利なユーティリティでした。 。 Red HatはPerlなしでコマンドを書き直し、Red HatやCentOSなどのFedoraベースのディストリビューション、およびLinux Standard Base(LSB)の機能定義をRedHatに求める他のディストリビューション全体に伝播されました。
シンプルで現実的な例:システムにem
というコマンドがあります 、シンプルなテキストエディタを起動します。これは何年にもわたってユーザーベースの頼りになるエディターであり、多くの人々がそれを中心にワークフローをベースにしており、高度にカスタマイズされた構成を維持している人もいます。ただし、最近、ユーザーベースから、ターミナルエディタとem
で絵文字がサポートされていないと生き残れないことが明らかになりました。 Unicodeをサポートしていません。
Unicode対応のem
のフォークが見つかります nem
と呼ばれます 、しかしあなたはあなたのユーザーの99%がem
に慣れていることを知っています 、em
を呼び出すスクリプトがあります 、および置換アプリケーションをem
と見なし続けます あなたが何をしても。この状況とそれに類似した他の多くの例の簡単な解決策は、新しいnem
を指定することです。 em
の推奨される代替手段としてのバイナリ em
の場合はバイナリ コマンドが使用されます。
シンボリックリンクを手動で作成するのは魅力的なように思えるかもしれませんが、パッケージマネージャーからの更新に抵抗することも、一元化することもできません。
alternatives
コマンドは、「一般的な」アプリケーション名を管理する場合に最も役立ちます。もちろん、UNIXの世界では、「generic」は必ずしも「Kleenex」や「Xerox」が現実の世界にある以上に一般的であるとは限らないため、 java 、(x)emacs(-nox) 、(n)vi(m) 、 whois 、および iptables 多くの場合、それらの代替案を最初に定義したもののいくつかです。 EDITOR
などの真に一般的な用語の場合 およびCC
、alternatives
コマンドは適切な解決策とは見なされません。これらの用語については、環境変数であり、/etc
で定義する必要があるためです。 または$HOME/.profile
。
新しい代替案の作成
em
と呼ばれる古いバイナリのシナリオ例を続けます 新しいバリアントnem
に取って代わられています 、代替エントリを作成するのは簡単です。この例では、元のコマンドの名前を変更する必要がありますが、他の例では、コマンドはそもそも人々が思っているものとは正確に一致しないため、これは必要ありません(java
たとえば、/usr/bin
に配置されることはめったにありません。 直接)。バイナリの名前を変更する必要がある場合、それを行う正しい方法は、RPM仕様ファイルにあり、コマンドをインストールするRPMが新しい名前でバイナリを提供するようにします。
ピンチでは、特にコマンドを段階的に廃止する場合は、システムのパッケージ管理からコマンドを削除し、古いコマンドのカスタムバージョンを利用可能な/opt
のままにしておくことができます。 または同様のもの。
この例では、元のエディターの名前をem2
に変更したと仮定します。 (最新のバージョン番号を示します)。
これで、2つのバイナリ(em2
およびnem
)1つのコマンドに関連付ける:em
。用語のさまざまな役割を明確に保つために、em
およびnem
どちらもマイクロEmacsスタイルのエディタです。その場合、作成される代替案の非常に一般的な用語は、µemacs
である可能性があります。 (µ記号を使用して「マイクロ」を意味します)またはuemacs
簡単にするために。
次の情報を提供して、オリジナルの代替案を作成します。
- 「一般的な」シンボリックリンクの場所
- 代替の名前(
uemacs
を決定しました 、特定のバイナリではなく参照名であることを明確にするため) - これらのシンボリックリンクが呼び出されたときに実行されるバイナリ
- どの代替案が優先されるかを示す優先度レベル
$ sudo alternatives --install /usr/bin/em uemacs /opt/em-legacy/em2 1
新しいバイナリの代替を作成します。これは、優先されるバイナリであるため、優先度が高くなります。
$ sudo alternatives --install /usr/bin/em uemacs /usr/local/bin/nem 99
これらのコマンドは、新しいシンボリックリンク/usr/bin/em
を作成します 、/etc/alternatives/em
を指しています 、次にどちらかを指すことができます /opt/em-legacy/em2
または/usr/local/bin/nem
。この選択肢のバンドルへの人間に優しい参照は、uemacs
です。 、説明的で記憶に残るため、システム管理者が任意に選択しました。 --config
を使用して、代替シンボリックリンクの宛先を選択できます オプション:
$ sudo alternatives --config uemacs
[sudo] password for seth:
There are 2 programs which provide 'uemacs'.
Selection Command
-----------------------------------------------
*+ 1 /usr/local/bin/nem
2 /opt/em-legacy/em2
代替案が長期的な解決策である場合もあれば、ユーザーや管理者が新しいものに移行するのを支援するためだけの場合もあります。何らかの理由で代替を削除する必要がある場合は、--remove-all
を使用して削除できます。 オプションの後に、代替の「一般的な」名前が続きます。この例では、それはuemacs
です :
$ sudo alternatives --remove-all uemacs
これにより、uemacs
に関するすべてが削除されます alternatives
から サブシステム:/usr/bin
のシンボリックリンク および/etc/alternatives
。選択肢から1つの選択肢のみを削除する場合は、--remove
を使用します オプション、代替名を提供(uemacs
この例では)、ドロップする選択肢のパス:
$ sudo alternatives --remove uemacs /opt/em-legacy/em2
alternatives
コマンドには、特定の選択肢が選択されたときに依存コンポーネントをシンボリックリンクする機能など、さらに多くの機能があります。多くの手間のかかる作業に加えて、alternatives
不整合を一元的に保ちます。どの代替案が用意されているかを確認できるので、emacs
を毎日覚えておく必要はありません。 実際にはemacs-26.3
、またはそのjava
java-1.8
ではありません ただし、/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0
、など:
$ alternatives --list
Linuxは、選択と柔軟性、そしてalternatives
がすべてです コマンドは、ユーザーと管理者の両方が巧妙な手先の早業からどのように利益を得ることができるかの例です。
Red Hat Enterprise Linuxを試してみませんか?今すぐ無料でダウンロードしてください。