更改Linux用户默认Shell的3种方法

Shell,或命令行界面,是Linux操作系统的关键组件之一,为用户提供了与系统交互的强大方式。

Linux系统上的每个用户都与默认shell相关联,该shell确定了用户与系统交互时使用的命令解释器。

更改用户的默认shell可能是必要的,原因有很多,例如个人偏好或需要不同shell提供的特定功能。

在本文中,我们将探讨如何在Linux中更改用户的默认shell。Shell是接受和解释命令的程序;在Linux上有几个开源shell,如bashshkshzshfish,以及许多其他不太知名的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
Change User Shell using Usermod

现在用户“tecmint”的默认shell将被更改为bash

2. chsh工具

使用chsh命令通过使用-s–shell选项来交互式地更改用户的默认登录shell,如下所示。

grep tecmint /etc/passwd
sudo chsh --shell /bin/sh tecmint
grep tecmint /etc/passwd
Change User Shell Using chsh

将“/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
Change User Shell in Passwd File

找到对应于你要更改默认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/