Linux如何设置bash为默认shell

大部分情况下,Linux的默认shell是bash,但某些Linux发行版,例如Kali,默认的终端是zsh,本文以Kali为例,将Kali的默认shell从zsh改为bash。

其实Kali早期的shell也是bash,2020 版本之后:Kali团队将默认shell更改为zsh。zsh增加了很多功能,例如最直观的就是当你输入字母就会有补全提示,但这也给我带来很多困扰,尤其是我连接多个其他Linux终端的时候,服务器之间经常切换,就Kali用起来不一样,让我感到突兀,最严重的问题是我用了zsh之后,登录终端后,我的小键盘区按键无法使用,不知道什么情况,于是我决定将Kali的终端改成bash。

接下来我们首先使用命令来查看一下当前的shell,echo $SHELL ,这会查看使用哪个shell为默认shell。如下图所示:

第一种修改方式:命令行工具chsh

我目前的使用的用户是root,默认shell是zsh,我们首先用最简单的方式来修改root用户默认shell:

bash 复制代码
chsh -s /usr/bin/bash
  • chsh 是 "change shell" 的缩写,用于更改用户的默认登录 shell。
  • -s 是 chsh 的选项,表示指定新的 shell 路径。
  • /usr/bin/bash:这是bash的路径。

设置好之后,我们重启终端,就可以使用bash了。注意,这种方式只修改当前用户的默认shell,其他的用户不变。

第二种修改方式:修改/etc/passwd文件

第二种方式,非常规方式,直接修改/etc/passwd文件,注意,这个文件root才有更改权限。所以用root用户操作或者sudo命令执行。我这里是在虚拟机环境,所以我直接用root用户。

bash 复制代码
vim /etc/passwd

显示如下图所示:

这个文件记录着用户账户的基本信息,也包含每一个用户默认的shell,每一行用冒号分割成七个部分,每个部分的含义如下:

  1. 用户名:用户的登录名。
  2. 密码占位符:现代系统中通常是一个占位符(如 x),实际密码存储在 /etc/shadow 文件中。
  3. 用户 ID(UID):用户的唯一标识符。
  4. 组 ID(GID):用户所属主组的标识符。
  5. 用户信息:用户的描述性信息(如全名或联系方式)。
  6. 主目录:用户的主目录路径。
  7. 登录 shell:用户登录时使用的默认 shell。

这里面我们直接修改第一行root用户的第7项,将zsh改成bash。之后保存退出。

同样重新进入终端,我们就可以发现我们的shell变成了bash。

注意事项:

我们通过第二种方式也成功的更改了默认shell,其实这两种更改shell的原理是一样的,chsh命令也是通过修改系统配置文件/etc/passwd中对应用户的shell字段来实现shell的更改。相比之下,用第一种方式更为稳妥。另外还有一些注意点:

  1. chsh命令会验证用户指定的shell路径是否正确,并且该shell是否存在于系统中。如果输入错误,例如chsh -s /bin/lll,那么再次启动终端发现无法登录,所以当用chsh之后发现输出Warning,那么要重新设置成一个有效的路径。

    bash 复制代码
    chsh -s /bin/lll
    chsh: Warning: /bin/lll is an invalid shell
    chsh: Warning: /bin/lll does not exist
  2. Linux系统通常会维护一个/etc/shells文件,其中列出了所有有效的登录shell。所以在更改用户的登录shell之前,最好先检查/etc/shells文件以确保所选择的shell是被允许的。

相关推荐
闪闪发亮的小星星2 小时前
轨道六根数
笔记
Drone_xjw2 小时前
Kylin 系统下使用 Shell 脚本定期清理历史文件
bash·kylin
Solis程序员2 小时前
长会话状态治理(下):数据更新机制、并发保护与可复用设计原则
运维·服务器
aaaameliaaa2 小时前
C语言随机数函数使用全解析
c语言·笔记
Java知识技术分享3 小时前
opencode安装ui-ux-pro-max和frontend-ui-ux技能
人工智能·ui·个人开发·ai编程·ux
IpdataCloud3 小时前
跨境支付如何识别高风险IP?用IP风险画像服务选型与集成指南
服务器·网络·数据库·tcp/ip·安全
Cloud_Shy6183 小时前
解读《Effective Python 3rd Edition》:从练气到老魔(第六章 Item 40 - 43)
android·开发语言·人工智能·笔记·python·学习方法
IT小黄人_9993 小时前
Deepseek+dify本地化部署步骤
程序人生·ai
是个西兰花3 小时前
linux:命名管道与共享内存
linux·运维·服务器·网络·c++
Snasph3 小时前
Linux 日志流水线深度解析:syslog() → journald → rsyslog → /var/log/syslog
linux·syslog·rsyslog