修改root shell为zsh后sudo su报「Cannot execute help...」的修复方法
修复Root Shell被错误设置为「help」的问题
你这是修改Root的登录Shell时不小心把路径写成了help,导致sudo su试图执行这个不存在的命令才报错的。别慌,咱们一步步把它改回来:
步骤1:确保在可用的Root环境中
你已经通过sudo bash进入了Root的Bash环境,接下来的操作都在这个环境里完成就行。
步骤2:确认Zsh的合法性
首先得保证/usr/bin/zsh是系统认可的登录Shell,执行命令查看系统允许的Shell列表:
cat /etc/shells
如果列表里有/usr/bin/zsh,直接往下走;要是没有,先把它添加进去(你之前已经装了Zsh,大概率是存在的):
echo "/usr/bin/zsh" >> /etc/shells
步骤3:修改Root的登录Shell
这里有两种安全的方法,选一种就行:
方法A:用chsh命令(推荐)
chsh是专门用来修改用户登录Shell的工具,会自动校验Shell的有效性,不容易出错:
chsh -s /usr/bin/zsh root
执行完直接生效,不需要额外确认。
方法B:手动编辑/etc/passwd文件(谨慎操作)
如果chsh命令没法用,可以手动修改系统用户配置文件:
- 打开文件:
vim /etc/passwd
- 找到以
root开头的行,现在它应该是这样的:
root:x:0:0:root:/root:help
- 把最后一个字段
help改成/usr/bin/zsh,修改后变成:
root:x:0:0:root:/root:/usr/bin/zsh
- 保存退出Vim(按
Esc,输入:wq回车)。
步骤4:验证修改结果
执行命令检查Root的Shell是否已经正确设置:
grep root /etc/passwd
输出的最后一个字段应该是/usr/bin/zsh。
步骤5:测试修复效果
退出当前的Bash环境,执行sudo su或者su root,应该能正常进入Root的Zsh环境了。要是想确认当前Shell,执行:
echo $SHELL
会输出/usr/bin/zsh。
内容的提问来源于stack exchange,提问作者user274885
相关产品推荐
相关产品推荐

