Ubuntu紧急修复当Shell加载不成功的时候
发表于 2017-06-01
更新于 2024-05-23
分类于 技术专栏
阅读量 3774
字数统计 1768
故事背景
最近看到介绍linux下fish
比zsh
更加酷炫,本着装逼的目的想要尝试一下,按照fish的官方手册安装并设置默认shell为fish。于是满怀欣喜地重启机器(在虚拟机下并且我设置了默认直接启动命令行~~~),当时我并没有注意到执行chsh
这个命令的时候其实已经报错了。然后重启机器完成之后输入用户名和密码,刚按完回车键后咻的一下又退回到登录命令行,我以为系统临时故障,于是又继续重复登录,但就是登录不进去。
于是我怀疑是我的shell没有加载成功了?当更加无语的是我一直使用的是root用户登录,最先开始创建的普通用户的登录名我都忘记了,于是没辙了?
故事转机
按照这种情况我谷歌搜索了好多,终于找到一个靠谱的答案:
- 如果你还有别的操作界面,切记不要关机,到另外一个操作界面上修改正确的shell(很显然这个方法已经行不通了,因为我已经重启机器了)
- 进入ubuntu的系统恢复模式,修改错误(这个明显可行)
拯救方案
- 启动ubuntu系统
- 等待BIOS加载完毕或者即将加载完毕,迅速地按
shift
键,进入GNU的GRUB菜单 - 然后通过操作方向键选中
Advanced options
这一行,如图: - 选中其中一行以
recovery mode
结尾的,类似于这样的:Ubuntu GNU/Linux, with Linux 3.8.0-26-generic (recovery mode)
,如图所示: - 然后敲回车键开始启动系统进入
Recovery Mode
- 十几秒之后,系统起来之后会显示一个菜单,其中有一个选项是"Drop to root shell prompt"。这个时候你只需要选中并回车即可进入系统,如图所示:
- 这个时候输入root用户密码,控制台会打印出提示你找不到
fish
的命令,这个便是你启动不了的主要原因,在恢复模式下当前shell启动不了的话会自动加载默认的shell-Bash。 - 此时的系统根分区是只读挂载的。为了变成可读/可写的,你还需要输入如下命令:
mount -o remount,rw /
- 如果你的/home, /boot, /tmp或者其他挂载点是挂载在另外一些分区上,那么你也可以通过下面这个命令挂载它们:
mount --all
- 接下去修改
/etc/passwd
这个文件,修改正确的shell命令所在的目录: - 保存文件后重启,系统便可以登录进去了
哦也,最后虚惊一场~~~
参考
公众号关注一波~
网站源码:linxiaowu66 · 豆米的博客
Follow:linxiaowu66 · Github
关于评论和留言
如果对本文 Ubuntu紧急修复当Shell加载不成功的时候 的内容有疑问,请在下面的评论系统中留言,谢谢。