安装 Linux ubuntu 时,默认设置为 bash shell。但您是否知道其实可以使用其他 shell 吗?

在 Linux 中创建新用户时,可以指定用户的默认 shell。此时使用的选项是 useradd 命令的 -s 选项。对于已经创建的用户,也可以使用 usermod -s 命令进行更改。

本文将整理可通过 useradd-s 选项使用的主要 shell 及其特点,以及如何查看当前系统可用的 shell 列表。

考虑选择不同 shell 的 useradd -s 选项的开发者


1. 主要 Shell 类型和特点

Shell 路径 Shell 名称 特点
/bin/bash Bash 最广泛使用的标准 shell。提供命令编辑、自动补全功能、脚本编写等多种功能。
/bin/sh Bourne Shell 轻量化并提供最少功能。主要用于脚本和限制环境。
/bin/zsh Z Shell (Zsh) Bash 的扩展版。提供出色的自动补全功能和自定义功能。最近人气急剧上升。
/bin/ksh Korn Shell 广泛用于商业环境中的 shell。强调速度和效率。
/usr/bin/fish Fish Shell 因其直观的用法和强大的自动补全功能而推荐给初学者的 shell。
/usr/sbin/nologin/bin/false 无法登录的 shell 用于直接阻止登录。常用于创建系统账户或服务账户。

2. 检查当前系统中可用的 Shell

当前系统中可用的 shell 列表存储在 /etc/shells 文件中。可以使用以下命令进行确认。

cat /etc/shells

输出示例:

/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/usr/bin/sh
/bin/dash
/usr/bin/dash

仅可使用列在该文件中的 shell 作为 useradd 命令的 -s 选项。


3. 精确确认 nologin Shell 路径

要确认系统中用于登录阻止的 shell (nologin) 的确切位置,请使用以下命令。

which nologin

输出示例:

/usr/sbin/nologin

由于不同系统可能有所不同,因此建议一定要确认。


4. 使用案例示例

添加使用 Bash Shell 的用户

sudo useradd -m -s /bin/bash username

添加使用 Zsh Shell 的用户

sudo useradd -m -s /bin/zsh username

添加无法登录的系统用户

sudo useradd -r -s /usr/sbin/nologin username

示例:更改现有用户的 shell:

sudo usermod -s /usr/sbin/nologin username

确认更改结果的命令:

cat /etc/passwd | grep username

正常输出示例:

username:x:1004:1004::/home/django:/usr/sbin/nologin

现在明确理解 useradd-s 选项和可用的 shell,以正确的 shell 设置安全管理账户!