Ubuntu紧急修复当Shell加载不成功的时候

发表于 2017-06-01
更新于 2024-05-23
分类于 技术专栏
阅读量 3723
字数统计 1768

故事背景

最近看到介绍linux下fishzsh更加酷炫,本着装逼的目的想要尝试一下,按照fish的官方手册安装并设置默认shell为fish。于是满怀欣喜地重启机器(在虚拟机下并且我设置了默认直接启动命令行~~~),当时我并没有注意到执行chsh这个命令的时候其实已经报错了。然后重启机器完成之后输入用户名和密码,刚按完回车键后咻的一下又退回到登录命令行,我以为系统临时故障,于是又继续重复登录,但就是登录不进去。

于是我怀疑是我的shell没有加载成功了?当更加无语的是我一直使用的是root用户登录,最先开始创建的普通用户的登录名我都忘记了,于是没辙了?

故事转机

按照这种情况我谷歌搜索了好多,终于找到一个靠谱的答案:

  1. 如果你还有别的操作界面,切记不要关机,到另外一个操作界面上修改正确的shell(很显然这个方法已经行不通了,因为我已经重启机器了)
  2. 进入ubuntu的系统恢复模式,修改错误(这个明显可行)

拯救方案

  1. 启动ubuntu系统
  2. 等待BIOS加载完毕或者即将加载完毕,迅速地按shift键,进入GNU的GRUB菜单
  3. 然后通过操作方向键选中Advanced options这一行,如图:
  4. 选中其中一行以recovery mode结尾的,类似于这样的:Ubuntu GNU/Linux, with Linux 3.8.0-26-generic (recovery mode),如图所示:
  5. 然后敲回车键开始启动系统进入Recovery Mode
  6. 十几秒之后,系统起来之后会显示一个菜单,其中有一个选项是"Drop to root shell prompt"。这个时候你只需要选中并回车即可进入系统,如图所示:
  7. 这个时候输入root用户密码,控制台会打印出提示你找不到fish的命令,这个便是你启动不了的主要原因,在恢复模式下当前shell启动不了的话会自动加载默认的shell-Bash。
  8. 此时的系统根分区是只读挂载的。为了变成可读/可写的,你还需要输入如下命令:mount -o remount,rw /
  9. 如果你的/home, /boot, /tmp或者其他挂载点是挂载在另外一些分区上,那么你也可以通过下面这个命令挂载它们:mount --all
  10. 接下去修改/etc/passwd这个文件,修改正确的shell命令所在的目录:
  11. 保存文件后重启,系统便可以登录进去了

哦也,最后虚惊一场~~~

参考

  1. https://wiki.ubuntu.com/RecoveryMode

公众号关注一波~

微信公众号

关于评论和留言

如果对本文 Ubuntu紧急修复当Shell加载不成功的时候 的内容有疑问,请在下面的评论系统中留言,谢谢。

网站源码:linxiaowu66 · 豆米的博客

Follow:linxiaowu66 · Github