为多用户环境配置个性化主机名显示

在单台 Linux 设备上供多人使用时,若需让每位用户登录后看到符合自己身份的主机名(如老师要求主机名与用户名一致),可通过修改用户 Shell 提示符实现,而无需更改系统全局主机名。以下是完整、可复用的操作流程,适用于 Debian/Ubuntu 等系统。


创建新用户

使用 adduser 命令创建新用户,系统会自动创建家目录并提示设置密码。

sudo adduser zhouyaohang

按提示输入密码及用户信息(可直接回车跳过非必要字段),最后确认信息正确后完成创建。


定制用户专属的终端提示符

编辑该用户的 .bashrc 文件,在末尾添加自定义 PS1 变量,使终端提示符显示为用户名@用户名格式。

sudo nano /home/zhouyaohang/.bashrc

在文件末尾添加以下行:

# 定制专属主机名显示
PS1='\u@zhouyaohang:\w\$ '

保存并退出(Ctrl+O → 回车 → Ctrl+X)。

其中 \u 代表用户名,\w 代表当前工作目录,zhouyaohang 为希望显示的“虚拟主机名”。

配置本地域名解析(避免 sudo 报错)

为防止出现 unable to resolve host 错误,需将虚拟主机名加入 /etc/hosts 文件。

sudo nano /etc/hosts

找到包含 127.0.1.1 的行,在其后追加虚拟主机名:

127.0.1.1       wangbeihong    zhouyaohang

保存退出。

此步骤确保系统能正确解析该虚拟主机名到本机,避免网络相关服务异常。

授予 sudo 权限(可选)

若需该用户具备管理员权限,将其加入 sudo 用户组:

sudo usermod -aG sudo zhouyaohang

验证配置

切换到新用户并检查效果:

su - zhouyaohang

观察终端提示符是否为:

zhouyaohang@zhouyaohang:~$

再测试 sudo 是否正常:

sudo ls

若无报错且能正常执行,则配置成功。


注意事项

  • 此方法仅改变用户终端的视觉提示符,系统真实主机名(hostname 命令返回)保持不变。
  • 每位用户需单独配置 .bashrc/etc/hosts 条目。
  • 适用于教学、实验或多用户共享开发环境,不影响系统稳定性。

后续添加新用户时

重复上述步骤,仅需替换用户名和虚拟主机名即可快速部署。

一键执行脚本

#!/bin/bash

# 颜色定义
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m' # 无颜色

echo "----------------------------------------"
echo "  多用户环境一键配置脚本 (教师要求版)"
echo "----------------------------------------"

# 1. 获取用户名
read -p "请输入要创建的用户名 (例如: zhouyaohang): " USERNAME

# 检查用户是否已存在
if id "$USERNAME" &>/dev/null; then
    echo -e "${RED}错误: 用户 '$USERNAME' 已经存在!${NC}"
    exit 1
fi

# 2. 获取密码
read -sp "请输入该用户的登录密码: " PASSWORD
echo "" # 换行

if [ -z "$PASSWORD" ]; then
    echo -e "${RED}错误: 密码不能为空!${NC}"
    exit 1
fi

echo "正在创建用户..."
# 创建用户并设置密码 (使用 chpasswd 避免交互式提示)
sudo useradd -m -s /bin/bash "$USERNAME"
echo "$USERNAME:$PASSWORD" | sudo chpasswd

if [ $? -eq 0 ]; then
    echo -e "${GREEN}✓ 用户 '$USERNAME' 创建成功。${NC}"
else
    echo -e "${RED}✗ 用户创建失败。${NC}"
    exit 1
fi

# 3. 修改 .bashrc (定制主机名显示)
echo "正在配置个性化终端提示符..."
BASHRC_PATH="/home/$USERNAME/.bashrc"

# 追加 PS1 配置
# 注意:这里使用 >> 追加,防止覆盖原有配置
echo "" | sudo tee -a "$BASHRC_PATH" > /dev/null
echo "# 自动配置:定制专属主机名显示" | sudo tee -a "$BASHRC_PATH" > /dev/null
echo "PS1='\u@$USERNAME:\w\$ '" | sudo tee -a "$BASHRC_PATH" > /dev/null

echo -e "${GREEN}✓ 终端提示符已定制。${NC}"

# 4. 修改 /etc/hosts (防止 sudo 报错)
echo "正在更新 /etc/hosts 解析..."
# 检查是否已存在该主机名,避免重复添加
if grep -q "$USERNAME" /etc/hosts; then
    echo "  (主机名已在 hosts 中,跳过)"
else
    # 假设 127.0.1.1 是绑定主机名的行,追加用户名
    sudo sed -i "/127.0.1.1/ s/$/ $USERNAME/" /etc/hosts
    echo -e "${GREEN}✓ /etc/hosts 已更新。${NC}"
fi

# 5. 授予 sudo 权限
echo "正在授予 sudo 权限..."
sudo usermod -aG sudo "$USERNAME"
echo -e "${GREEN}✓ 已加入 sudo 组。${NC}"

echo "----------------------------------------"
echo -e "${GREEN}完成!用户 '$USERNAME' 已就绪。${NC}"
echo "可以使用 'su - $USERNAME' 进行测试。"
echo "----------------------------------------"