Shell,或命令行界面,是Linux操作系统的关键组件之一,为用户提供了与系统交互的强大方式。
Linux系统上的每个用户都与默认shell相关联,该shell确定了用户与系统交互时使用的命令解释器。
更改用户的默认shell可能是必要的,原因有很多,例如个人偏好或需要不同shell提供的特定功能。
在本文中,我们将探讨如何在Linux中更改用户的默认shell。Shell是接受和解释命令的程序;在Linux上有几个开源shell,如bash、sh、ksh、zsh、fish,以及许多其他不太知名的shell。
Linux Bash Shell
Bash(/bin/bash)是大多数Linux发行版中流行的shell,通常是用户帐户的默认shell。
在Linux中更改用户shell的原因有以下几点:
- 在Linux中使用nologin shell
- 阻止或禁用普通用户登录。使用一个shell包装器脚本或程序在将用户命令发送到shell执行之前记录用户命令。在这里,将shell包装器指定为用户的登录shell
- 满足用户的需求(希望使用特定的shell),特别是那些具有管理员权限的用户
使用useradd或adduser工具创建用户帐户时,可以使用–shell标志指定用户登录的shell的名称,而不是在相应的配置文件中指定的shell
A login shell can be accessed from a text-based interface or via an SSH from a remote Linux machine. However, if you log in via a graphical user interface (GUI), you can access the shell from terminal emulators like xterm, konsole, and many more.
列出Linux系统上可用的shell
在Linux中,文件/etc/shells通常用于存储系统上安装的有效登录shell的列表。这个文件有助于确定哪些shell可用于用户使用诸如chsh之类的命令设置为他们的默认shell
要查看Linux系统上可用的shell列表,您可以使用以下命令:
cat /etc/shells
示例输出:
# /etc/shells: valid login shells /bin/sh /bin/bash /usr/bin/bash /bin/rbash /usr/bin/rbash /bin/dash /usr/bin/dash /usr/bin/tmux /usr/bin/screen
在您进一步操作之前,请注意:
- A user can change their own shell to anything: which, however, must be listed in the /etc/shells file.
- 只有root用户可以运行不在/etc/shells文件中列出的shell。
- 如果一个账户有一个受限制的登录shell,则只有root用户可以更改该用户的shell。
在Linux中查找当前的shell
在更改默认用户的shell之前,重要的是要通过运行以下echo命令来确定当前的shell,该命令显示登录用户的当前shell。
echo $SHELL /bin/bash
输出显示用户当前正在使用Bash(/bin/bash)shell。
更改Linux中的默认Shell
现在让我们讨论三种不同的方式来更改Linux用户的默认shell。
1. usermod工具
使用usermod命令来修改存储在/etc/passwd文件中的用户账户详细信息,并且使用-s
或--shell
选项来更改用户的登录shell。
在这个例子中,我们将首先检查用户tecmint的账户信息以查看他的默认登录shell,然后将他的登录shell从/bin/sh更改为/bin/bash,如下所示。
grep tecmint /etc/passwd sudo usermod --shell /bin/bash tecmint grep tecmint /etc/passwd

现在用户“tecmint”的默认shell将被更改为bash。
2. chsh工具
使用chsh命令通过使用-s
或–shell选项来交互式地更改用户的默认登录shell,如下所示。
grep tecmint /etc/passwd sudo chsh --shell /bin/sh tecmint grep tecmint /etc/passwd

将“/bin/sh”替换为你要设置的实际shell路径。例如,要将shell设置为sh,你将使用“/bin/sh”。
需要注意的是,对默认shell的更改通常在你下一次登录时生效。
上述两种方法都修改了/etc/passwd文件中指定的shell,你可以像下面第三种方法那样手动编辑该文件。
3. 在/etc/passwd文件中更改用户Shell
在这个方法中,只需使用你喜欢的命令行文本编辑器打开/etc/passwd文件,并更改特定用户的shell。
sudo vi /etc/passwd OR sudo nano /etc/passwd

找到对应于你要更改默认shell的用户的行。例如,如果该行看起来像这样:
tecmint:x:1000:1000:John Doe:/home/tecmint:/bin/bash
最后一个字段,/bin/bash,表示默认shell(在这种情况下,是Bash)。
要将shell字段的值更改为所需的shell,只需指定shell的路径(/bin/zsh),如下所示。
tecmint:x:1000:1000:John Doe:/home/tecmint:/bin/zsh
编辑完成后,保存并关闭文件。
如何安装另一个Shell?
与其他软件包类似,流行的shell如Zsh和Fish可以很容易地从你的发行版的仓库中安装,如下所示。
在Linux中安装Zsh Shell
要在Linux上安装Zsh,请使用适用于你特定Linux发行版的以下适当命令。
sudo apt install zsh [On Debian, Ubuntu and Mint] sudo yum install zsh [On RHEL/CentOS/Fedora and Rocky/AlmaLinux] sudo emerge -a sys-apps/zsh [On Gentoo Linux] sudo apk add zsh [On Alpine Linux] sudo pacman -S zsh [On Arch Linux] sudo zypper install zsh [On OpenSUSE]
在Linux上安装Fish Shell
要在Linux上安装Zsh,请使用适用于您的特定Linux发行版的以下适当命令。
sudo apt install fish [On Debian, Ubuntu and Mint] sudo yum install fish [On RHEL/CentOS/Fedora and Rocky/AlmaLinux] sudo emerge -a sys-apps/fish [On Gentoo Linux] sudo apk add fish [On Alpine Linux] sudo pacman -S fish [On Arch Linux] sudo zypper install fish [On OpenSUSE]
不要忘记阅读这些相关主题:
在本文中,我们描述了在Linux中更改用户Shell的各种方法。要与我们分享任何想法,请使用下面的评论部分。
Source:
https://www.tecmint.com/change-a-users-default-shell-in-linux/