在 Redhat 中安裝 ksh 作為標準 shell:傻瓜?
我不是系統管理員,但我的組織正在考慮將 Red Hat Enterprise Linux 6+ 中的 /bin/sh 替換為 /bin/ksh 的硬連結。這會是多麼的愚蠢?
這個問題的背景是我們正在將第三方應用程序從 AIX 5.3 遷移到 RHEL 6+。此應用程序通過呼叫 sh 來執行 shell 命令。shell 命令本身是使用者定義的,實際上是為 Korn shell (ksh) 編寫的。這在 AIX 中有效,因為 IBM 將 sh 作為到 ksh 的硬連結提供。多年來,我們的團隊已經創建和儲存了數千個使用者定義的命令。
我們發現其中一些命令在 Red Hat 中失敗,因為 Redhat 中的 sh 是 bash 的符號連結。當作為 sh 呼叫時,bash 以 sh 仿真模式執行。問題是我們過去在 AIX 中的“fake sh”中工作的特定於 ksh 的命令(例如 print)在 Red Hat 中的“fake sh”中不起作用。我們還不知道不兼容的全部範圍。
在學習 Korn Shell (ISBN 0-596-00195-9) 的第 10 章中,Bill Rosenblatt 和 Arnold Robbins 說:“
$$ W $$我想強調一些不適用於大多數其他 shell 的 Korn shell:您可以像安裝標準 Bourne shell 一樣安裝它,即 /bin/sh。" … “許多安裝都這樣做了絕對沒有任何不良影響。” 在 Red Hat 中這樣做有多魯莽?我擔心 Red Hat 安裝中的系統或第 3 方腳本可能取決於 sh 如何被 bash 模擬的特性。如果是這樣,通過硬連結到 ksh 來解決我們的直接問題可能會導致整個系統出現未知的損壞。
在系統範圍內,這將是非常愚蠢的,這正是您懷疑的原因 - 它會導致依賴於 sh 兼容行為的啟動腳本和系統實用程序出現大量損壞。正如 Ulrich 所說,一個更安全的替代方法是創建一個 chroot,或者只是將所有新使用者的預設 shell 設置為 /bin/ksh,儘管這可能無法完全滿足您的要求。