1.11 将bash安装为默认shell
1.11.1 问题
你所使用的 BSD 系统、Solaris 或其他 Unix 变体并没有将 bash 作为默认 shell,每次都需要手动启动 bash,你现在希望将 bash 设置为默认 shell。
1.11.2 解决方案
先确定已经安装了 bash。在命令行中输入 bash --version
。如果获得了版本输出,则说明 bash 已经安装好了:
$ bash --version
GNU bash, version 3.00.16(1)-release (i386-pc-solaris2.10)
Copyright (C) 2004 Free Software Foundation, Inc.
$
如果没有看到版本号,可能是系统路径中缺少了相应的目录。在一些系统中,chsh -l
或 cat /etc/shells
可以给出一份可用的 shell 清单。否则,可以询问系统管理员 bash 的安装位置,或者是否可以安装 bash。
在 Linux 系统中,chsh -l
会提供一份可用的 shell 清单;而在 BSD 中,会打开编辑器并允许修改设置。在 macOS 中,-l
并非 chsh
的有效选项,执行 chsh
会打开编辑器并允许修改设置,chpass -s shell
可以修改用户所用的 shell。
如果已经安装了 bash,可以用 chsh -s
命令修改默认 shell,例如 chsh -s /bin/bash
。如果修改失败,可以再试试 chsh
、passwd -e
、passwd -l
、chpass
或者 usermod -s /usr/bin/ bash
。要是还不行,那就得咨询系统管理员了,可能需要管理员编辑 /etc/passwd 文件。在多数系统中,/etc/passwd 包含如下内容:
cam:pK1Z9BCJbzCrBNrkjRUdUiTtFOh/:501:100:Cameron Newham:/home/cam:/bin/bash
cc:kfDKDjfkeDJKJySFgJFWErrElpe/:502:100:Cheshire Cat:/home/cc:/bin/bash
作为 root,你可以编辑密码文件每行的最后一个字段,将其修改成想要选用的 shell 的完整路径。如果系统中有 vipw
命令,则应该使用该命令,确保密码文件的一致性。
有些系统不允许将未出现在 /etc/shells 中的 shell 作为登录 shell。如果 bash 不在该文件中,那就只能让系统管理员将其添加进去了。
1.11.3 讨论
有些操作系统(尤其是各种 BSD Unix)通常会将 bash 放在 /usr 分区。在这种系统中更改 root shell 时可得三思。如果系统出现引导故障,而你又需要在 /usr 分区挂载前进行处理,那就碰上真正的麻烦了:root 账户没有 shell 可用。因此,最好不要改动 root 账户的默认 shell。至于普通用户的默认 shell,完全可以改成 bash。除非绝对必要,否则使用 root 账户不是什么好做法,这一点不用说你也明白。尽可能使用普通账户。配合 sudo 这类命令,你应该极少会用到 root shell。
如果上面提到的这些方法都无效,还可以使用 exec 将当前的登录 shell 替换成 bash,但胆小的用户还是别这么做了。具体参见 bash FAQ 中的“A7) How can I make bash my login shell?”一节。
1.11.4 参考
man chsh
man passwd
man chpass
- /etc/shells
- bash FAQ,“A7) How can I make bash my login shell?”一节
- 1.12 节
- 14.13 节
- 14.19 节