我尝试在 ubuntu (14.04) 上安装 zsh。当我切换到 zsh 时,我无法进入超级用户模式。
如果我执行 su 它会要求输入 passwd 并在输入正确的密码时显示:
Cannot execute which zsh: No such file or directory
但是当我输入错误的密码并按回车键 4-5 次时,什么也没有显示。
在检查我的/etc/passwd
文件时,它显示:
root:x:0:0:root:/root:which zsh
我尝试编辑文件并保存,但它显示
Unable to save /etc/passwd
我尝试通过 grub 将运行级别更改为 1,但结果出现错误:
APCI PCC probe failed
我在 VirtualBox 上运行 Ubuntu。
答案1
您应该从密码文件中删除单词which
...它应该类似于:
root:x:0:0:root:/root:/bin/zsh
其中 /bin/zsh 是 Z shell 二进制文件的路径。
在当前配置中,登录进程正在尝试执行which zsh
,但该命令失败。
另外,以 root 身份编辑该文件,sudo vim /etc/passwd
因为它是一个只能由 root 写入的文件。
如果不能sudo
或su
,则引导至恢复模式(在 GRUB 引导加载程序中选择 Ubuntu 的高级选项,然后选择 Ubuntu...(恢复模式),然后选择 root/Drop to root shell 提示符)。之后,将/
文件系统重新挂载为读写(mount -o remount,rw /
),然后您可以编辑文件的内容/etc/passwd
。在 Ubuntu 16.04 上测试过。
答案2
您无法从 Grub 提示符编辑文件(Grub 只能读取文件,没有任何写入支持)。您需要启动 Linux。
如果无法正常登录,可以完全绕过正常的启动过程,只启动一个内核和一个shell。在 Grub 提示符下,按e编辑启动顺序,添加init=/bin/bash
到该行末尾linux=…
,然后按Ctrl+X启动。你将得到一个 root shell,除此之外什么也没有。跑步
mount -t proc proc /proc
mount -o remount,rw /
现在运行chsh -s /bin/zsh root
来修复您的用户数据库。
接下来,使用Alt+ SysRq+重新启动U,然后使用Alt+ SysRq+启动B,或者使用以下命令正常启动
mount -o remount,ro /
umount /proc
exec /sbin/init
提示:chsh
无需运行用户争论。这样,它就验证了 shell。
提示:当您更改某些配置时,请始终保持 shell 打开并测试配置。如果您犯了错误,您仍然可以使用命令行来修复它。
提示:你可以创建一个toor
帐户使用 UID 0(因此它仍然是 root),使用与 root 相同的密码,并且 shell 保留在其中/bin/sh
,以便在出现问题时保留另一种登录方式。更好的是,安装一个静态链接的 shell(busybox-static
或zsh-static
)并将其用作 toor 的登录 shell。
¹或者您可以使用客人如果主机是Linux。
答案3
如果您知道 root 密码,则可以运行su -s /bin/bash
以获取 root bash shell。
sudo -s /bin/bash
应该也可以工作,并且根据sudo
配置方式,您要么只需要知道自己的密码,要么不需要密码。
然后您可以使用chsh -s /bin/bash
将 root 的 shell 更改回 bash。
顺便说一句,在任何 UNIX 系统上更改 root 的 shell 通常都是一个坏主意。许多 cron 作业等依赖于 root 的 shell 作为该操作系统的默认 root shell,并且将要如果你改变它就会打破。
答案4
请尝试 sudo vi /etc/passwd 并输入您当前登录的用户密码。
您还可以在 /etc/shell 中找到 shell 正确的路径
要检查当前的 shell,请尝试 echo $SHELL