更改 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 时,此命令非常有用。 chsh 实用程序通常不需要 root 帐户。
该命令通过修改 /etc/passwd 文件来更改用户的 shell。您可以使用 -s 选项来更改 shell -
~$: chsh -s <New_Shell>
例如,让我们通过以下命令将 bash 更改为 sh -
~$: chsh -s /bin/sh
用户修改命令
usermod 命令可以更改系统帐户文件。您可以使用此命令行修改 /etc/passwd 文件并更改用户的 shell。通过 usermod 命令,您可以使用 --shell 或 -s 选项更改用户的登录 shell。
~$: sudo usermod --shell <New_Shell>
现在让我们通过 usermod 命令将 sh 中的 bash 替换为默认 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
手动更改外壳后,保存文件并退出。手动编辑/etc/passwd文件可以让你同时更改多个用户的默认shell,这也很方便。
请注意,保存此文件不会对更改后的默认 shell 提供任何验证。因此请确保您的 shell 命令路径有效。否则,您下次登录系统时可能会遇到一些问题。
结论
在本指南中,我们解释了如何借助三种方法更改默认 shell。这里我们使用 usermod 和 chsh 实用程序直接更改当前用户的默认 shell。此外,如果您希望更改其他用户的 shell,则必须单独定义用户名。
您还可以通过编辑 etc/passwd 文件来手动更改多用户的默认 shell。因此,在使用此方法时,您必须特别注意,您仍然需要输入正确的 shell。因此,您可以使用上述任何方法更改 Linux 中的默认 shell。