更改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。