更改Linux默认Shell


更改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: valid login shells 
/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时,此命令非常有用。您通常不需要root帐户即可使用chsh实用程序。

此命令通过修改/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命令将bash替换为sh作为默认shell:

~$: 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。

更新于:2023年5月18日

1K+ 浏览量

启动您的职业生涯

通过完成课程获得认证

开始
广告