网站搜索

如何更改 Linux 中的默认用户 Shell


shell 或命令行界面是 Linux 操作系统的重要组成部分,为用户提供了与系统交互的强大方式。

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

出于各种原因,可能需要更改用户的默认 shell,例如个人偏好或需要不同 shell 提供的特定功能。

在本文中,我们将探讨在 Linux 中更改用户默认 shell 的过程。 shell是一个接受和解释命令的程序;有几种开源 shell,例如 bashshkshzshfish、 以及 Linux 上许多其他鲜为人知的 shell。

Linux Bash 外壳

Bash (/bin/bash) 是大多数(如果不是全部)Linux 发行版上流行的 shell,它通常是用户帐户的默认 shell。

在 Linux 中更改用户 shell 的原因有多种,包括:

  • 使用 nologin shell 阻止或禁用 Linux 中的普通用户登录。
  • 在将用户命令发送到 shell 执行之前,使用 shell 包装器脚本或程序来记录用户命令。在这里,您将 shell 包装器指定为用户的登录 shell。
  • 满足用户的需求(想要使用特定的 shell),尤其是具有管理权限的用户。

使用 useradd 或 adduser 实用程序创建用户帐户时,--shell 标志可用于指定用户登录 shell 的名称,而不是在相应配置文件中指定的名称。

可以从基于文本的界面或通过 SSH 从远程 Linux 计算机访问登录 shell。但是,如果您通过图形用户界面 (GUI) 登录,则可以从终端模拟器(例如 xtermkonsole 等)访问 shell。

列出 Linux 系统上可用的 Shell

在 Linux 中,文件 /etc/shells 通常用于存储系统上已安装的有效登录 shell 的列表。此文件有助于识别用户可以使用 chsh 等命令将哪些 shell 设置为其默认 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

在继续操作之前,请注意:

  • 用户可以将自己的 shell 更改为任何内容:但是,这些 shell 必须列在 /etc/shells 文件中。
  • 只有 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。

在这个例子中,我们首先检查用户howtoing的帐户信息以查看他的默认登录shell,然后将其登录shell从/bin/sh更改为/bin/bash,如下所示接下来。

grep tecmint /etc/passwd
sudo usermod --shell /bin/bash tecmint
grep tecmint /etc/passwd

现在,用户“howtoing”的默认 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

完成编辑后,保存并关闭文件。

如何安装另一个外壳?

与其他软件包类似,Zsh 和 Fish 等流行的 shell 可以轻松地从您的发行版存储库中安装,如图所示。

在 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 的各种方法。要与我们分享任何想法,请使用下面的评论部分。