更改 Linux 中的默认 Shell

linuxoperating systemopen source更新于 2026/1/29 22:52:17

在 Linux 中更改默认 Shell 很简单,您可以自由地使用任何 Shell。大多数 Linux 系统的默认 Shell 是"bash",您可以用其他 Shell(例如 sh、fish、dash、zsh 等)替换它。在 Linux 中,您可能需要更改默认 Shell 的原因有很多;主要原因如下:

  • 使用 nologin Shell 禁用或阻止普通用户登录。

  • 更改共享网络上的默认 Shell,以满足用户的特定需求。它与许多管理权限相关联。

  • Shell 包装程序/脚本会延迟用户命令的执行,直到用户登录为止。在这种情况下,对于 Shell 包装程序而言,用户登录是特定于 Shell 的。

在 Linux 中有多种方法可以更改用户的 Shell。在本指南中,我们将介绍所有可用于更改 Linux 系统默认 Shell 的方法。

如何在 Linux 中更改默认 Shell

要了解系统中安装了哪个 Linux Shell,首先必须更改默认 Shell。在 Linux 中,"etc/shells"文件包含所有可用 Shell 的信息,因此您可以使用以下 cat 命令列出所有 Shell 的详细信息 -

~$: cat /etc/shells
# /etc/shells: 有效的登录 Shell
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/usr/bin/sh
/bin/dash
/usr/bin/dash

以上列表中包含的所有 Shell 在 Linux 系统中均可用,您可以将其中任何一个替换为默认 Shell。此外,如果您想更改此列表中未列出的任何其他 Shell,则必须单独安装。

首先,您必须找到当前 Shell 才能更改用户 Shell。在 Linux 中,/etc/passwd 文件存储用户帐户的基本信息。登录时需要这些信息,您也可以从中获取与 Shell 相关的信息。您可以执行以下任意命令来查找您当前的 Shell:

~$: grep "^${USER}" /etc/passwd
prateek:x:1000:Prateek Jangid,,,:/home/prateek:/bin/bash

或者,

~$: grep `whoami` /etc/passwd
prateek:x:1000:Prateek Jangid,,,:/home/prateek:/bin/bash

或者,

~$: echo $SHELL
/bin/bash

或者,

~$: grep "^${USER}" /etc/passwd
 PID  TTY     TIME CMD
2357 pts/0  00:00:00 bash

如上输出所示,当前 shell 为"bash",因此我们将使用各种方法将"bash"shell 更改为"sh"shell。

chsh 命令

当您没有 root 权限但想要更改默认 shell 时,此命令非常有用。通常,chsh 实用程序不需要 root 帐户。

此命令通过修改 /etc/passwd 文件来更改用户的 shell。您可以使用 -s 选项来更改 shell -

~$: chsh -s <New_Shell>

例如,让我们通过以下命令将 bash 更改为 sh -

~$: chsh -s /bin/sh

Usermod 命令

usermod 命令可以更改系统帐户文件。您可以使用此命令行修改 /etc/passwd 文件并更改用户的 shell。使用 usermod 命令,您可以使用 --shell 或 -s 选项更改用户的登录 shell。

~$: sudo usermod --shell <New_Shell>

现在让我们通过 usermod 命令将默认 shell 从 sh 更改为 bash -

~$: sudo usermod --shell /bin/sh

注意 - 我们在上述方法中更改了当前用户的默认 shell。但是,您也可以更改其他用户的 shell。因此,您可以使用以下需要输入其他用户名的命令 -

~$: chsh -s <New_Shell> <Username>
~$: sudo usermod --shell <New_Shell> <Username>

从 /etc/passwd 文件

系统会通过上述命令自动修改 /etc/passwd 文件,以更改默认 Shell。如果您不想使用这些命令并手动编辑 /etc/passwd 文件,则可以执行以下命令:

~$: nano /etc/passwd

执行上述命令后,终端将打开 /etc/passwd 文件,因此请进行相应的更改。

GNU nano 6.2 /etc/passwd *
root:x:0:0:root:/root /bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60: games:/usr/games:/usr/sbin/nologin

如您所见,当前 shell 为 /bin/bash,您可以将其替换为任何 shell(sh、zsh、dash)。在这里,我们将 /root /bin/bash 更改为 /root /bin/bash。

GNU nano 6.2                      /etc/passwd * 
root:x:0:0:root:/root /bin/sh
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync 
games:x:5:60: games:/usr/games:/usr/sbin/nologin

手动更改 Shell 后,保存文件并退出。手动编辑 /etc/passwd 文件允许您同时更改多个用户的默认 Shell,这也非常方便。

请注意,保存此文件不会对更改后的默认 Shell 进行任何验证。因此,请确保您的 Shell 命令路径有效。否则,您下次登录系统时可能会遇到一些问题。

结论

在本指南中,我们解释了如何通过三种方法更改默认 Shell。这里我们使用 usermod 和 chsh 实用程序直接更改当前用户的默认 Shell。此外,如果您想更改其他用户的 Shell,则必须单独定义用户名。

您还可以通过编辑 etc/passwd 文件一次性手动更改多个用户的默认 Shell。因此,使用此方法时,您必须特别注意,仍然需要输入正确的 Shell。因此,您可以使用上述任何一种方法在 Linux 中更改默认 Shell。


相关文章


有用资源