欢迎光临
我们一直在努力

一文吃透 Shell 变量、用户与组管理(CentOS7 实战)

CentOS7 课堂实操:Shell变量与用户组完整教程

前言

本篇完全根据7.17课堂笔记整理,全部命令采用 liuyifei@centos7 终端格式,分为两大核心板块:Shell变量全套实操、Linux用户与组管理,覆盖定义变量、环境变量、持久化配置、引号转义、用户/组增删改、密码时效、常见故障修复,命令可直接复制到CentOS7运行,配套课后练习巩固知识点。

一、Shell 基础变量实操

1. 变量定义、取值、基础操作

变量存储在当前终端内存,命名仅支持字母、数字、下划线,不能以数字开头,Shell无需声明数据类型。

liuyifei@centos7 ~ 16:15:01$ var1=key1
liuyifei@centos7 ~ 17:17:48$ echo $var1
key1
# 多变量演示
liuyifei@centos7 ~ 17:17:57$ first_name=yifei
liuyifei@centos7 ~ 17:20:04$ last_name=liu
liuyifei@centos7 ~ 17:20:14$ echo $last_name $first_name
liu yifei
# 双引号保留多个空格
liuyifei@centos7 ~ 17:20:40$ echo "$last_name $first_name"
liu yifei
# 变量拼接歧义问题
liuyifei@centos7 ~ 17:22:02$ echo $last_name_$first_name
yifei
# {} 大括号限定变量边界,解决拼接识别错误
liuyifei@centos7 ~ 17:23:55$ echo ${last_name}_${first_name}
liu_yifei
# 查看当前所有变量、函数
liuyifei@centos7 ~ 17:24:24$ set | grep first_name
first_name=yifei
# 销毁变量
liuyifei@centos7 ~ 17:25:59$ unset first_name
liuyifei@centos7 ~ 17:27:19$ echo $first_name

# declare 实现变量大小写转换
liuyifei@centos7 ~ 17:27:34$ declare -l name=LIUYIFEI
liuyifei@centos7 ~ 17:28:43$ echo $name
liuyifei
liuyifei@centos7 ~ 17:28:53$ declare -u name=liuyifei
liuyifei@centos7 ~ 17:29:14$ echo $name
LIUYIFEI

2. 常用系统环境变量详解

环境变量分为系统内置环境变量、用户自定义变量,控制Shell整体运行环境。

环境变量作用说明
EDITOR 默认编辑器,visudo等工具读取该变量
LANG 系统语言编码,控制日期、报错中英文
PATH 命令检索路径,系统查找程序目录
PS1 终端命令提示符样式
HISTTIMEFORMAT history命令显示时间格式
HOME 当前用户家目录
USER 当前登录用户名
PWD 当前所在工作目录

2.1 EDITOR 默认编辑器

# root执行,默认vi无语法高亮
[root@centos7 ~ 17:33:30]# visudo
# 临时指定vim为编辑器
[root@centos7 ~]# export EDITOR=/bin/vim
[root@centos7 ~]# visudo
# 单次临时生效,不改变全局环境
[root@centos7 ~]# EDITOR=/bin/vim visudo

2.2 LANG 语言切换

liuyifei@centos7 ~ 17:36:39$ date
2026年 07月 17日 星期五 17:37:04 CST
# 切换英文
liuyifei@centos7 ~ 17:37:04$ export LANG=en_US.utf8
liuyifei@centos7 ~ 17:37:30$ date
Fri Jul 17 17:37:33 CST 2026
# 切回中文
liuyifei@centos7 ~ 17:37:33$ export LANG=zh_CN.utf8
liuyifei@centos7 ~ 17:37:57$ date
2026年 07月 17日 星期五 17:38:00 CST
# 编码说明:en_US.utf8英文、zh_CN.utf8简体中文、zh_TW.utf8繁体中文

2.3 PATH 命令搜索路径

liuyifei@centos7 ~ 17:38:00$ echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
# 移动ls程序,PATH找不到命令
[root@centos7 ~]# mv /usr/bin/ls .
liuyifei@centos7 ~ 17:41:28$ ls
bash: ls: 未找到命令...
# 恢复原始PATH
[root@centos7 ~]# PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
# 追加/root目录到PATH
[root@centos7 ~]# export PATH=$PATH:/root
liuyifei@centos7 ~ 17:43:41$ ls
anaconda-ks.cfg initial-setup-ks.cfg ls
# 还原ls程序位置
[root@centos7 ~]# mv ./ls /usr/bin

2.4 PS1 自定义命令提示符

liuyifei@centos7 ~ 17:54:25$ echo $PS1
\\[\\e[1;31m\\]\\u\\[\\e[1;33m\\]@\\[\\e[0m\\]\\[\\e[92;1m\\]\\h \\[\\e[0m\\]\\[\\e[94m\\]\\W\\[\\e[m\\] \\[\\e[35m\\]\\t\\[\\e[m\\]$
# 简易修改提示符
liuyifei@centos7 ~ 17:54:34$ PS1='HELLO '
HELLO echo hello world
hello world
# 常用转义字符说明
\\h 主机短名 \\H完整主机 \\t 24小时时间 \\u用户名 \\w完整路径 \\W目录名 \\#普通用户$ root#
# 带时间提示符
liuyifei@centos7 ~$ PS1='[\\u@\\h \\W \\t]\\$ '
# 显示完整工作目录
liuyifei@centos7 ~$ PS1='[\\u@\\h \\w \\t]\\$ '
liuyifei@centos7 ~$ cd /usr/share/doc
liuyifei@centos7 /usr/share/doc 13:53:04$
# 彩色提示符永久配置(root写入全局)
[root@centos7 ~]# echo "PS1='[\\[\\e[91m\\]\\u\\[\\e[0m\\]\\[\\e[93m\\]@\\[\\e[0m\\]\\[\\e[92;1m\\]\\h\\[\\e[0m\\] \\[\\e[94m\\] \\W\\[\\e[0m\\] \\[\\e[35m\\]\\t\\[\\e[0m\\]]\\[\\e[93m\\]\\$\\[\\e[0m\\] '" >> /etc/bashrc

2.5 HISTTIMEFORMAT 历史命令时间

# 完整年月日时分秒
export HISTTIMEFORMAT="%F %T "
# 简洁月-日 时:分
export HISTTIMEFORMAT="%m-%d %H:%M "
liuyifei@centos7 ~$ history

3. 变量持久化(永久生效配置)

区分两种Shell登录模式,加载配置文件不同

  • login shell(ssh远程登录)加载顺序:/etc/profile → ~/.bash_profile → ~/.bashrc → /etc/bashrc
  • nologin shell(新开bash子窗口):~/.bashrc → /etc/bashrc
  • # 全局配置英文语言,所有ssh登录生效
    [root@centos7 ~ 14:28:15]# echo 'export LANG=en_US.utf8' >> /etc/profile
    # ssh登录验证
    liuyifei@centos7 ~ 14:29:48$ date
    Sat Jul 18 14:30:23 CST 2026

    # 全局配置默认编辑器,新开bash生效
    [root@centos7 ~ 14:33:42]# echo 'export EDITOR=vim' >> /etc/bashrc
    # 新开子shell验证
    liuyifei@centos7 ~$ bash
    liuyifei@centos7 ~$ echo $EDITOR
    vim

    4. 命令替换 $() 和 `` 反引号

    作用:抓取命令输出结果,嵌入字符串、文件名

    liuyifei@centos7 ~ 15:35:08$ echo Today is `date +%A`
    Today is 星期六
    liuyifei@centos7 ~ 15:35:20$ echo The time is $(date +%M) minutes past $(date +%l%p).
    The time is 35 minutes past 3下午.
    # 按日期创建文件,两种写法等价
    liuyifei@centos7 ~ 15:35:45$ touch file-$(date +%Y%m%d)
    liuyifei@centos7 ~$ touch file-`date +%Y%m%d`
    liuyifei@centos7 ~ 15:36:10$ ls
    file-20260717 file-20260718

    # 算术展开 $[] 实现1~100求和
    liuyifei@centos7 ~ 15:36:13$ echo $[1+2+3]
    6
    liuyifei@centos7 ~ 15:37:43$ echo {1..3}
    1 2 3
    liuyifei@centos7 ~ 15:39:21$ echo {1..3} | tr ' ' '+'
    1+2+3
    liuyifei@centos7 ~ 16:52:04$ echo $[ $(echo {1..100} | tr ' ' '+') ]
    5050

    5. 转义符与三种引号区别

  • \\:转义单个特殊字符,取消$、通配符的特殊功能
  • 双引号"":保留空格,解析变量、命令替换,通配符失效
  • 单引号'':所有内容原样输出,不解析任何变量、命令
  • liuyifei@centos7 ~ 16:52:32$ echo $PATH
    /usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/liuyifei/.local/bin:/home/liuyifei/bin
    # 转义$,原样输出
    liuyifei@centos7 ~ 16:58:12$ echo \\$PATH
    $PATH
    username=liuyifei
    # 不加引号,空格、特殊字符被shell拆分
    liuyifei@centos7 ~ 16:59:43$ echo ******* Welcome $username to Linux Classroom On $(date +%F) ********
    # 双引号保留空格,正常解析变量和命令
    liuyifei@centos7 ~ 17:01:11$ echo "******** Welcome $username to On $(date +%F) ********"
    # 双引号内\\可转义$,原样打印$符号
    liuyifei@centos7 ~ 17:02:58$ echo "******** Welcome \\$username to m On \\$(date +%F) ********"
    # 单引号完全不解析,全部原文输出
    liuyifei@centos7 ~ 17:04:46$ echo '******** Welcome $username to Linux Classroom On $(date +%F) ********'

    二、Linux 用户与组管理

    1 用户分类

  • root超级用户:UID=0,拥有系统全部权限
  • 系统用户:后台服务进程使用,登录shell为/sbin/nologin,禁止交互式登录
  • 普通用户:日常登录操作账号
  • 核心配置文件说明

    /etc/passwd 用户基础信息

    格式:用户名: x :UID:GID:描述:家目录:登录shell
    示例:

    liuyifei@centos7 ~$ grep liuyifei /etc/passwd
    liuyifei:x:1000:1000::/home/liuyifei:/bin/bash
    # 系统用户示例
    liuyifei@centos7 ~$ grep postfix /etc/passwd
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin

    /etc/group 用户组信息

    格式:组名: x :GID:附属用户列表

    liuyifei@centos7 ~$ grep wheel /etc/group
    wheel:x:10:laoma,liuyifei

    /etc/shadow 加密密码文件

    9段字段,存储加密密码、密码有效期、账户过期策略

    主组 vs 附属补充组

    • 主组:创建用户默认同名组,新建文件默认归属主组,passwd中GID标识
    • 附属组:用户额外加入权限组,usermod -aG 添加,不加-a会覆盖原有附属组

    liuyifei@centos7 ~$ id
    uid=1000(liuyifei) gid=1000(liuyifei) groups=1000(liuyifei),10(wheel)
    liuyifei@centos7 ~$ id -u liuyifei
    1000

    2 用户查看命令

    # 查看当前登录账号
    liuyifei@centos7 ~$ whoami
    liuyifei
    # 查看所有在线终端用户
    liuyifei@centos7 ~$ who
    # 查看在线用户+负载、进程
    liuyifei@centos7 ~$ w
    # 仅打印在线用户名
    liuyifei@centos7 ~$ users

    3 用户管理命令(root执行)

    useradd 创建用户

    # 最简创建用户user01
    [root@centos7 ~]# useradd user01
    liuyifei@centos7 ~$ grep user01 /etc/passwd
    # 自定义UID、家目录、主组、登录shell
    [root@centos7 ~]# useradd -u 8888 -d /opt/user02 -c "software manager" -g wheel -s /sbin/nologin user02
    # 用户初始化模板目录 /etc/skel
    liuyifei@centos7 ~$ ls -a /etc/skel
    # 用户默认配置文件 /etc/login.defs
    [root@centos7 ~]# vim /etc/login.defs

    usermod 修改用户属性

    # 修改UID、迁移家目录、更换登录shell
    [root@centos7 ~]# usermod user02 -u 1008 -md /home/user02 -s /bin/bash
    # 添加附属组,-a 追加不覆盖
    [root@centos7 ~]# usermod -aG user01 user02
    liuyifei@centos7 ~$ id user02
    uid=1008(user02) gid=10(wheel) groups=10(wheel),1003(user01)
    # -L 锁定密码 -U解锁
    [root@centos7 ~]# usermod -L user02
    [root@centos7 ~]# usermod -U user02
    # 修改登录shell禁止登录
    [root@centos7 ~]# usermod -s /sbin/nologin user02

    userdel 删除用户

    [root@centos7 ~]# useradd user03
    [root@centos7 ~]# userdel user03
    # 用户在线无法直接删除,慎用-f强制删除
    [root@centos7 ~]# userdel -f user02

    4 用户组管理命令

    groupadd 创建组

    [root@centos7 ~]# groupadd admin
    # 指定GID创建组
    [root@centos7 ~]# groupadd -g 2000 sysadmin
    liuyifei@centos7 ~$ grep admin /etc/group

    groupmod 修改组名、GID

    [root@centos7 ~]# groupmod –new-name admins admin
    [root@centos7 ~]# groupmod -g 2002 admins

    groupdel 删除空组

    [root@centos7 ~]# groupdel sysadmin

    groupmems 管理组内成员

    # 添加用户到组
    [root@centos7 ~]# groupmems -g admins -a liuyifei
    # 列出组内所有成员
    [root@centos7 ~]# groupmems -g admins -l
    # 删除组内成员
    [root@centos7 ~]# groupmems -g admins -d liuyifei
    # 清空所有组成员
    [root@centos7 ~]# groupmems -g admins -p

    5 密码时效管理 chage

    # 查看用户完整密码策略
    liuyifei@centos7 ~$ chage -l liuyifei
    # 设置密码最大有效期100天
    [root@centos7 ~]# chage -M 100 liuyifei
    # 最小修改间隔10天
    [root@centos7 ~]# chage -m 10 liuyifei
    # 强制下次登录修改密码
    [root@centos7 ~]# chage -d 0 liuyifei
    # 设置账户过期日期
    [root@centos7 ~]# chage -E 2026-07-18 liuyifei

    赞(0)
    未经允许不得转载:171主机测评 » 一文吃透 Shell 变量、用户与组管理(CentOS7 实战)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址