首先,我对这一切都很陌生,并且仍在学习,所以在术语和定位方面,请耐心听我说。
设置: Proxmox 虚拟环境 7.2-3 + 容器 + ubuntu-22.04-standard_22.04-1_amd64.tar.zst
问题: 对于我的 Ubuntu 服务器的终端/控制台,我昨天安装了 fisher 和 fish shell,只是为了改变外观。当我尝试重新启动容器时,我收到一个登录问题,这似乎与我放置在目录中的 fish 的位置有关。虽然我并不完全确定。
我不知道如何重新登录容器,我不想从头开始重新设置一切。如能得到任何帮助,我将不胜感激。
更多背景信息和图片:
答案1
首先,好消息是——几乎肯定有办法恢复。坏消息是,我不知道在这种情况下该怎么做。下面我会就我认为可行的方法提出一些建议,但我没有运行 Proxmox,所以我无法直接测试。
但首先我要提出一个建议:
- 安装软件时,使用官方文档首先,而不是像您上面提到的“技术”网站。
您上面链接的文章是完全错误,并且会导致系统崩溃正确的流程由 Fish 团队记录在以下文件中:
- Ubuntu 安装指南(链接到主鱼页)。
- 文档设置默认 shell
抱歉,我有点想吐槽——您链接的这些网站都是“付费内容网站”。他们付费购买“自由撰稿人”(尽管是“经过审查的”)的文章。不幸的是,这些内容的质量参差不齐。举个我见过的最糟糕的例子,去年一位新访客来到了我经常访问的一个技术主题的 Subreddit。此人写道(转述,但准确):
我对 [topic] 一无所知,也从未使用过它,但有人要求我写一篇关于如何使用 [topic] 做 [xyz] 的文章。有人能给我一些指导吗?
请注意,我不知道哪个他们所写作的网站。
当然,并不是每个付费内容网站上的每篇文章都是这样的,但你上面提到的文章是不好。任何绝对、毫无疑问会破坏你的系统的文档都是坏的。主要问题在于:
该文档中的步骤 4(“将 fish shell 设为默认 shell”)内容如下:
sudo chsh -s /usr/local/bin/fish
这只不过是多个错误合二为一而已!
首先,也是最糟糕的——这是 Ubuntu 下 Fish 的错误路径。我相信,在 macOS 下 Fish 的安装路径是这样的。在 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 重置为一个好的 shell。对于 root,我建议将 shell 保留为 Bash。按照 Fish 文档中的说明,将普通非 root 用户的 shell 更改为 Fish。