私はシステム管理者ではありませんが、私たちの組織では、Red Hat Enterprise Linux 6+の/bin/shを/bin/kshへのハードリンクに置き換えることを検討しています。これはどれほど無謀なことですか?
この質問の背景は、サードパーティのアプリケーションをAIX 5.3からRHEL 6+に移行していることです。アプリケーションは sh を呼び出してシェルコマンドを実行します。シェルコマンド自体はカスタマイズされ、実際にKornシェル(ksh)用に作成されました。 IBM は sh を ksh へのハード・リンクとして提供するため、これは AIX で機能します。長年にわたり、私たちのチームは何千ものカスタムコマンドを生成して保存しました。
Red Hatのshはbashへのシンボリックリンクなので、これらのコマンドのいくつかがRed Hatで失敗したことがわかりました。 sh で呼び出されると、bash は sh エミュレーションモードで実行されます。問題は、AIXの「fake sh」で作業していたksh関連のコマンド(印刷など)がRed Hatの「fake sh」では機能しないことです。私たちはまだ非互換性の全範囲を知っていません。
Kornシェル学習(ISBN 0-596-00195-9)の第10章では、Bill RosenblattとArnold Robbinsは次のように述べています。 「私たちは他のほとんどのシェルには適用されないKornシェルを強調したいと思います。簡単にインストールするだけです。 ..."多くのインストールでは、まったく副作用なしにこれを行います。"
Red Hatでは、これはどれほど無謀なのでしょうか?私が心配しているのは、Red Hatのインストール時にシステムやサードパーティのスクリプトがshをエミュレートするbashの能力によって異なります。その場合、即時の問題を解決するためにkshへのハードリンクを使用すると、システム全体に未知の破損が発生する可能性があります。
答え1
システム全体では、これは非常に無謀なことです。これは、sh互換動作に依存する起動スクリプトおよびシステムユーティリティに多くの損傷を引き起こす可能性があります。 Ulrichが言ったように、より安全な代替策は、chrootを作成するか、すべての新規ユーザーのデフォルトシェルを/ bin / kshに設定することです。しかし、これはまさにあなたが望むことをしないかもしれません。