
首先,我對這一切都很陌生,並且仍在學習中,所以當涉及術語和定位時,請與我坦白。
設定: Proxmox 虛擬環境 7.2-3 + 容器 + ubuntu-22.04-standard_22.04-1_amd64.tar.zst
問題: 對於我的Ubuntu伺服器的終端機/控制台,我昨天安裝了fisher和fish shell,只是為了改變外觀。當我嘗試重新啟動容器時,我收到一個登入問題,該問題似乎與我放置在目錄中的魚的位置有關。雖然我不完全確定。
我不知道如何重新登入容器,而且我不想從頭開始重新設定所有內容。如果有任何幫助,我將不勝感激。
更多背景資訊和圖片:
答案1
首先,好消息——幾乎肯定有辦法恢復。壞消息是我不知道在這種情況下該怎麼做。我將在下面提出一些我認為可行的建議,但我不會運行 Proxmox,所以我無法直接測試。
但首先,我要提出一個建議:
- 安裝軟體時,使用官方文檔首先,而不是“技術”網站,例如您上面提到的網站。
您上面連結到的文章是完全錯誤並且會(確實)導致系統損壞。 Fish 團隊將正確的過程記錄在:
- Ubuntu 安裝指南(從主連結連結到魚頁)。
- 有關的文檔設定預設 shell
抱歉,有點咆哮——像您連結到的網站一樣是「付費內容網站」。他們為“自由職業”(儘管經過“審查”)作家的文章付費。不幸的是,內容的品質可能相差很大。舉個我見過的最糟糕的例子,去年一位新訪客進入了我經常關注的一個技術主題的 Reddit 子版塊。該人寫道(釋義,但準確):
我對[主題]一無所知,也從未使用過它,但有人要求我寫一篇關於如何使用[主題]執行[xyz]的文章。有人可以給我一些指導嗎?
請注意,我不知道哪個他們正在為其寫作的網站。
當然,並不是每個付費內容網站上的每篇文章都是這樣,但是您上面提到的文章是壞的。任何絕對會毫無疑問地損壞您的系統的文件都是壞的。主要問題在於:
該文件中的步驟 4(「將 Fish shell 設定為預設 shell」)如下:
sudo chsh -s /usr/local/bin/fish
這只是多個錯誤合併為一個錯誤!
首先,也是最糟糕的——這是 Ubuntu 下 Fish 的錯誤路徑。我相信這就是 Fish 在 macOS 下安裝的位置。在 Ubuntu 下,它(通常)是
/usr/bin/fish
,但正如 Fish 文件所指出的那樣,您應該始終確認該位置你的系統。透過在沒有使用者名稱的情況下使用
sudo chsh
,它會更改 root 使用者的 shell。這很糟糕,並且使恢復變得更加困難。如果您想使用 更改目前使用者的 shell
sudo
,語法將是:sudo chsh -s <path/to/shell> $USER
但即使這也是一個壞主意,因為
chsh
root 使用者(又名sudo chsh
)將允許您設定「壞 shell」路徑。它會警告您,但它仍然會更改/etc/passwd
為使用您告訴它的錯誤 shell 路徑。sudo chsh -s /this/is/bad $USER grep $USER /etc/passwd
您會看到設定了錯誤的路徑。
附註:我能夠在我的系統上嘗試這些事情,而不必擔心損壞,因為我使用的是 Windows Subsystem for Linux,這是一個虛擬環境,我知道我可以在其中輕鬆恢復任何這些錯誤。 Proxmox 容器實際上應該與 WSL 使用「底層」的技術非常相似,所以我假設那裡有同樣簡單的恢復機制。
這正確的在 Ubuntu 下將 shell 更改為 Fish 的命令很簡單:
chsh -s /usr/bin/fish
只要你不使用sudo
它就會改變你的使用者的 shell,它會證實外殼是個好外殼。
恢復計劃
您提到您正在使用 Ubuntu 作為 Proxmox 中的容器。我相信那很好。如果您使用的是 VM,則需要使用有效的 shell 在 Proxmox 下啟動到 Ubuntu。那還是有可能的。
再說一次,壞消息是我不太確定如何執行此操作,並且由於 Proxmox 不運行在下面Ubuntu,您可能需要不同的網站(例如 Proxmox 論壇)來回答這個問題。一般來說,您需要:
存取 Proxmox 命令列。
我從 Proxmox 文件中假設您需要使用
pct
管理容器的工具。使用有效的 shell 存取 Ubuntu 容器。你可以嘗試一下
pct exec <vmid> /usr/bin/bash
。您需要位於
root
Ubuntu 容器內,我相信這將是pct
.
一旦您有以 root 身分在有效 shell 中存取 Ubuntu 容器:
chsh -s /usr/bin/bash
由於目前使用者的 shell 無效,因此這可能不起作用。但是,我相信 root 仍然能夠重置 shell(普通用戶肯定不會)。但是,如果遇到問題,另一個選擇是:
vipw
這將允許您直接編輯您的文件
/etc/passwd
,並將其更改/usr/local/bin/fish
為/usr/bin/bash
.這會將 root 使用者的 shell 重設回正常狀態。對於 root 用戶,我建議將 shell 保留為 Bash。依照 Fish 文件中的說明,將普通非 root 使用者的 shell 變更為 Fish。