我安装是zsh
因为我认为我可能更喜欢它bash
。我没有,为了恢复它,我已经使用了chsh -s /bin/bash
,正如我自己所给出的You may not change the shell for 'cat'.
我还改变了我的线路/etc/passwd
:
cat:x:1000:1000:cat,,,:/home/cat:/bin/zsh
到
cat:x:1000:1000:cat,,,:/home/cat:/usr/bin/bash
(因为which bash
给了/usr/bin/bash
)。
GNOME 终端、xterm
术语等现在都同意我的 shell 是bash
。
但是,当我按 进入虚拟终端时Ctrl Alt N,n
数字键在哪里,并尝试以我自己的身份登录,例如
Ubuntu 15.10 mint-kitty ttyN
mint-kitty login: cat
Password:
/bin/zsh: no such file or directory
exit
出现,然后我就注销了。
我可以很好地登录图形会话。 (MDM + 肉桂。)
据我所知,用户的登录 shell 是由/etc/passwd
.没有提及zsh
in.bashrc
或.profile
,也没有提及 in /etc/profile
。
如何让系统的其余部分知道我的 shell 不存在zsh
?
答案1
该chsh
命令仅允许您从列出的 shell 更改登录 shell/etc/shells
,到 中列出的 shell /etc/shells
。这是一项安全保障功能:如果帐户具有受限制的 shell(未在 中列出/etc/shells
),则他们无法通过切换到另一个 shell 来升级其访问权限;用户无法通过切换到他们无法更改的 shell 来锁定自己。 root 用户当然不受此限制。
检查/etc/shells
不考虑命名文件的替代方法,例如符号链接。如果/etc/shells
列出/bin/bash
,则用户数据库中的条目必须是/bin/bash
,而不是/bin/./bash
(这是同一个文件)或/usr/bin/bash
(即使这是到 的符号链接/bin/bash
)。
如果您要离开 shell,则需要chsh
在卸载旧 shell 之前运行切换回来,因为卸载会将 shell 从/etc/shells
.
我建议将您的 shell 改回/bin/bash
;你需要以 root 身份执行此操作。这样你chsh
以后就可以再次跑步了。
在 Linux 下,对于本地帐户, 中的条目/etc/passwd
决定了用户的登录 shell。 (对于其他一些 Unix 变体而言,情况并非如此,其中存在/etc/passwd
是为了兼容性,但不是实际参考,因此要么/etc/passwd
不得修改,要么在修改后必须调用某些同步命令。)
我无法解释对何处的引用/bin/zsh
挥之不去。确保 中没有杂散的额外条目/etc/passwd
。