Linux 系统管理进阶

📅 2026/7/20 12:48:37
Linux 系统管理进阶
Linux 系统管理进阶从 Shell 变量到用户权限目录Shell 环境变量环境变量概述常用环境变量详解变量持久化配置命令替换与引号命令替换引号和转义字符用户和组管理本地用户管理本地组管理综合案例密码管理/etc/shadow 文件解析chage 命令用户锁定与解锁提权管理su 命令sudo 命令1. Shell 环境变量1.1 环境变量概述环境变量分为两种类型说明内置变量设置 shell 的运行环境如 PATH、PS1、LANG用户自定义变量用户自己定义的普通变量查看所有变量[ggcentos7 ~16:46:47]$set|head-10BASH/bin/bashBASHOPTScheckwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepathBASH_ALIASES()BASH_ARGC()BASH_ARGV()BASH_CMDS()BASH_COMPLETION_VERSINFO([0]2[1]7)BASH_LINENO()BASH_SOURCE()BASH_VERSINFO([0]4[1]2[2]46[3]2[4]release[5]x86_64-redhat-linux-gnu)1.2 常用环境变量详解EDITOR - 默认编辑器[ggcentos7 ~16:46:55]$echo$EDITOR# 设置默认编辑器为 vim[ggcentos7 ~16:47:00]$exportEDITOR/bin/vim[ggcentos7 ~16:47:05]$echo$EDITOR/bin/vim# 使用 visudo 时会自动使用 vim[ggcentos7 ~16:47:10]$sudoEDITORvim visudoLANG - 系统语言[ggcentos7 ~16:47:15]$date2026年 07月18日 星期四16:47:15 CST# 切换为英文[ggcentos7 ~16:47:22]$exportLANGen_US.utf8[ggcentos7 ~16:47:27]$dateThu Jul1816:47:27 CST2026# 切换回中文[ggcentos7 ~16:47:32]$exportLANGzh_CN.utf8[ggcentos7 ~16:47:37]$date2026年 07月18日 星期四16:47:37 CSTPATH - 命令搜索路径[ggcentos7 ~16:47:42]$echo$PATH/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/home/gg/.local/bin:/home/gg/bin# 将自定义目录添加到 PATH[ggcentos7 ~16:47:50]$exportPATH$PATH:/home/gg/scripts[ggcentos7 ~16:47:55]$echo$PATH/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/home/gg/.local/bin:/home/gg/bin:/home/gg/scriptsPS1 - 命令提示符[ggcentos7 ~16:48:00]$echo$PS1[\u\h\W]\$# 修改提示符为带时间格式[ggcentos7 ~16:48:05]$PS1[\u\h \W \t]\$ [ggcentos7 ~16:48:05]$# 恢复默认提示符[ggcentos7 ~16:48:12]$PS1[\u\h \W]\$ [ggcentos7 ~]$PS1 常用转义字符字符说明\u当前用户名\h主机名\W当前目录名\w当前完整路径\t当前时间HH:MM:SS\$提示符root 显示 #普通用户显示 $彩色提示符配置[ggcentos7 ~16:48:20]$PS1[\[\e[91m\]\u\[\e[0m\]\[\e[92m\]\h\[\e[0m\] \[\e[94m\]\W\[\e[0m\]]\$ [ggcentos7 ~]$HISTTIMEFORMAT - 历史命令时间格式[ggcentos7 ~16:48:30]$history|head-31000ls-l1001cd/etc1002catpasswd# 设置历史命令显示时间[ggcentos7 ~16:48:35]$exportHISTTIMEFORMAT%F %T [ggcentos7 ~16:48:40]$history|head-310002026-07-1816:46:47ls-l10012026-07-1816:46:52cd/etc10022026-07-1816:46:55catpasswd1.3 变量持久化配置Login Shell 加载顺序SSH 登录、su -/etc/profile系统级别~/.bash_profile用户级别~/.bashrc用户级别/etc/bashrc系统级别Non-login Shell 加载顺序bash、图形界面终端~/.bashrc用户级别/etc/bashrc系统级别# 方法1写入 /etc/profile影响所有用户[ggcentos7 ~16:48:47]$sudoechoexport HISTTIMEFORMAT%F %T /etc/profile# 方法2写入 ~/.bashrc只影响当前用户[ggcentos7 ~16:48:55]$echoexport HISTTIMEFORMAT%F %T ~/.bashrc# 立即生效[ggcentos7 ~16:49:00]$source~/.bashrc# 验证[ggcentos7 ~16:49:05]$echo$HISTTIMEFORMAT%F %T2. 命令替换与引号2.1 命令替换两种格式$(COMMAND)- 推荐支持嵌套COMMAND- 传统格式# 获取当前日期[ggcentos7 ~16:49:12]$TODAY$(date%F)[ggcentos7 ~16:49:17]$echo今天是$TODAY今天是2026-07-18# 创建带日期的文件[ggcentos7 ~16:49:22]$touchbackup-$(date%Y%m%d).tar.gz[ggcentos7 ~16:49:27]$lsbackup* backup-20260718.tar.gz# 获取当前用户[ggcentos7 ~16:49:32]$CURRENT_USER$(whoami)[ggcentos7 ~16:49:37]$echo当前用户$CURRENT_USER当前用户gg# 计算 12...100 的和[ggcentos7 ~16:49:42]$echo$[$(echo{1..100}|tr )]5050# 嵌套命令替换[ggcentos7 ~16:49:50]$echo当前目录有$(ls|wc-l)个文件当前目录有15个文件2.2 引号和转义字符符号说明\转义单个字符双引号变量和命令替换生效单引号原样输出[ggcentos7 ~16:49:57]$NAME张三# 无引号[ggcentos7 ~17:00:02]$echo$NAMEis here 张三 is here# 双引号 - 变量替换生效[ggcentos7 ~17:00:07]$echo$NAMEis here张三 is here# 单引号 - 原样输出[ggcentos7 ~17:00:12]$echo$NAME is here$NAMEis here# 转义字符[ggcentos7 ~17:00:17]$echo价格是 \$100价格是$100# 双引号中转义变量[ggcentos7 ~17:00:22]$echo欢迎 \$NAME来到课堂欢迎$NAME来到课堂# 双引号中命令替换生效[ggcentos7 ~17:00:27]$echo今天是$(date%F)今天是2026-07-18# 单引号中命令替换不生效[ggcentos7 ~17:00:32]$echo今天是 $(date %F)今天是$(date%F)3. 用户和组管理3.1 本地用户管理useradd - 创建用户# 创建基本用户[ggcentos7 ~17:00:40]$sudouseraddoperator1# 创建用户并指定多个选项[ggcentos7 ~17:00:47]$sudouseradd-u1088-gusers-cOperator One-m-d/home/operator1 operator1# 验证用户信息[ggcentos7 ~17:00:55]$idoperator1uid1088(operator1)gid100(users)groups100(users)# 查看 /etc/passwd 中对应条目[ggcentos7 ~17:01:00]$grepoperator1 /etc/passwd operator1:x:1088:100:Operator One:/home/operator1:/bin/bashuseradd 常用选项选项说明-u指定 UID-g指定主组-G指定补充组-c设置用户描述-m创建家目录-d指定家目录路径-s指定登录 Shellusermod - 修改用户# 修改 UID[ggcentos7 ~17:01:10]$sudousermod-u2000operator1# 修改后验证[ggcentos7 ~17:01:15]$idoperator1uid2000(operator1)gid100(users)groups100(users)# 添加补充组[ggcentos7 ~17:01:22]$sudousermod-aGwheel operator1# 验证补充组[ggcentos7 ~17:01:27]$idoperator1uid2000(operator1)gid100(users)groups100(users),10(wheel)# 修改用户描述[ggcentos7 ~17:01:32]$sudousermod-cSenior Operatoroperator1# 查看修改后的描述[ggcentos7 ~17:01:37]$grepoperator1 /etc/passwd operator1:x:2000:100:Senior Operator:/home/operator1:/bin/bashuserdel - 删除用户# 删除用户保留家目录[ggcentos7 ~17:01:45]$sudouserdeloperator1# 验证用户已删除[ggcentos7 ~17:01:50]$idoperator1 id: operator1: no such user# 删除用户及其家目录[ggcentos7 ~17:01:55]$sudouserdel-roperator1 userdel: user operator1 does not exist3.2 本地组管理groupadd - 创建组# 创建基本组[ggcentos7 ~17:02:02]$sudogroupadddeveloper# 创建组并指定 GID[ggcentos7 ~17:02:07]$sudogroupadd-g2000developer# 验证组信息[ggcentos7 ~17:02:12]$grepdeveloper /etc/group developer:x:2000:groupmod - 修改组# 修改组名称[ggcentos7 ~17:02:20]$sudogroupmod-ndevelopers developer# 修改组 GID[ggcentos7 ~17:02:25]$sudogroupmod-g3000developers# 验证修改[ggcentos7 ~17:02:30]$grepdevelopers /etc/group developers:x:3000:groupdel - 删除组[ggcentos7 ~17:02:37]$sudogroupdeldevelopers# 验证删除[ggcentos7 ~17:02:42]$grepdevelopers /etc/groupgroupmems - 管理组成员# 创建用户和组[ggcentos7 ~17:02:50]$sudouseradddeveloper1[ggcentos7 ~17:02:55]$sudogroupadddevelopers# 添加成员[ggcentos7 ~17:03:02]$sudogroupmems-gdevelopers-adeveloper1# 查看成员[ggcentos7 ~17:03:07]$ groupmems-gdevelopers-ldeveloper1# 验证用户组信息[ggcentos7 ~17:03:12]$iddeveloper1uid2001(developer1)gid2001(developer1)groups2001(developer1),3000(developers)# 删除成员[ggcentos7 ~17:03:17]$sudogroupmems-gdevelopers-ddeveloper1# 验证删除[ggcentos7 ~17:03:22]$ groupmems-gdevelopers-l3.3 综合案例案例1手动创建一个用户# 1. 添加账户到 /etc/passwd[ggcentos7 ~17:03:30]$sudovim/etc/passwd# 最后一行添加zhangsan:x:1002:1002::/home/zhangsan:/bin/bash# 2. 添加组到 /etc/group[ggcentos7 ~17:03:35]$sudovim/etc/group# 最后一行添加zhangsan:x:1002:# 3. 添加密码到 /etc/shadow[ggcentos7 ~17:03:40]$sudovim/etc/shadow# 最后一行添加密码为 redhatzhangsan:$6$FgUNKn74$pxDk9AEhsxkJGYi76Rv91zLy5LRns8olgAyGuNssQYG07ypaidhuX0gHAU4hrNi9Zp9A7vtMEvbyzCQ0e/gbk1::0:99999:7:::# 4. 准备家目录[ggcentos7 ~17:03:45]$sudocp-r/etc/skel/ /home/zhangsan[ggcentos7 ~17:03:50]$sudochownzhangsan:zhangsan /home/zhangsan[ggcentos7 ~17:03:55]$ls-ld/home/zhangsan drwxr-xr-x.16zhangsan zhangsan4096Jul1817:03 /home/zhangsan# 5. 测试登录[ggcentos7 ~17:04:00]$sshzhangsanlocalhost zhangsanlocalhosts password: Last login: Thu Jul1817:04:002026from localhost[zhangsancentos7 ~]$案例2误删用户家目录恢复# 故障现象[ggcentos7 ~17:04:10]$sshzhangsanlocalhost zhangsanlocalhosts password: Could not chdir to home directory /home/zhangsan: No suchfileor directory -bash-4.2$# 恢复方法[ggcentos7 ~17:04:15]$sudocp-r/etc/skel/ /home/zhangsan[ggcentos7 ~17:04:20]$sudochownzhangsan:zhangsan /home/zhangsan[ggcentos7 ~17:04:25]$ls-ld/home/zhangsan drwx------.3zhangsan zhangsan78Jul1817:04 /home/zhangsan4. 密码管理4.1 /etc/shadow 文件解析[ggcentos7 ~17:04:32]$sudogrepgg /etc/shadow gg:$6$w9Q5VJvZ$7cT...:19692:0:99999:7:::九个字段说明字段说明1用户名2加密的密码6 66 SHA-5123上次密码更改日期距离 1970-1-1 的天数4最小密码生命周期0 可随时更改5最大密码生命周期99999 永不过期6密码过期前告警天数7密码过期后非活跃天数8账户过期日期9保留域4.2 chage 命令# 查看用户密码信息[ggcentos7 ~17:04:40]$sudochage-loperator1 最近一次密码修改时间 7月18,2026密码过期时间 从不 密码失效时间 从不 帐户过期时间 从不 两次改变密码之间相距的最小天数 0 两次改变密码之间相距的最大天数 99999 在密码过期之前警告的天数 7# 设置密码最大生命周期为 100 天[ggcentos7 ~17:04:50]$sudochage-M100operator1# 设置密码最小生命周期为 3 天[ggcentos7 ~17:04:55]$sudochage-m3operator1# 设置密码过期前告警天数为 7 天[ggcentos7 ~17:05:00]$sudochage-W7operator1# 设置密码过期后非活跃天数为 30 天[ggcentos7 ~17:05:05]$sudochage-I30operator1# 验证修改[ggcentos7 ~17:05:10]$sudochage-loperator1 最近一次密码修改时间 7月18,2026密码过期时间 10月26,2026密码失效时间 11月25,2026帐户过期时间 从不 两次改变密码之间相距的最小天数 3 两次改变密码之间相距的最大天数 100 在密码过期之前警告的天数 7# 强制用户下次登录时修改密码[ggcentos7 ~17:05:15]$sudochage-d0operator1# 验证已设置[ggcentos7 ~17:05:20]$sudogrepoperator1 /etc/shadow operator1:$6$...:0:3:100:7:30::4.3 用户锁定与解锁passwd 命令# 设置密码[ggcentos7 ~17:05:27]$sudopasswdoperator1 Changing passwordforuser operator1. New password: BAD PASSWORD: The password is shorter than8characters Retype new password: passwd: all authentication tokens updated successfully.# 删除密码允许无密码登录[ggcentos7 ~17:05:37]$sudopasswd-doperator1 Removing passwordforuser operator1. passwd: Success# 锁定密码[ggcentos7 ~17:05:42]$sudopasswd-loperator1 Locking passwordforuser operator1. passwd: Success# 解锁密码[ggcentos7 ~17:05:47]$sudopasswd-uoperator1 Unlocking passwordforuser operator1. passwd: Successusermod 命令# 锁定用户密码[ggcentos7 ~17:05:52]$sudousermod-Loperator1# 验证锁定密码字段前有 !![ggcentos7 ~17:05:57]$sudogrepoperator1 /etc/shadow operator1:!!$6$...:19692:0:99999:7:::# 解锁用户密码[ggcentos7 ~17:06:02]$sudousermod-Uoperator1# 验证解锁[ggcentos7 ~17:06:07]$sudogrepoperator1 /etc/shadow operator1:$6$...:19692:0:99999:7:::禁止用户登录# 方法1修改 Shell 为 nologin[ggcentos7 ~17:06:15]$sudousermod-s/sbin/nologin operator1# 验证[ggcentos7 ~17:06:20]$su- operator1 This account is currently not available.# 恢复[ggcentos7 ~17:06:25]$sudousermod-s/bin/bash operator1# 方法2设置账户过期[ggcentos7 ~17:06:30]$sudousermod-e2024-7-18 operator1# 验证[ggcentos7 ~17:06:35]$su- operator1 Your account has expired;please contact your system administrator# 恢复[ggcentos7 ~17:06:40]$sudousermod-eoperator15. 提权管理5.1 su 命令su 命令用于切换用户身份# 切换到 root非登录 Shell保留当前环境[ggcentos7 ~17:06:47]$suPassword:[rootcentos7 gg]# whoamiroot[rootcentos7 gg]# pwd/home/gg[rootcentos7 gg]# exitexit[ggcentos7 ~17:06:55]$# 切换到 root登录 Shell加载 root 环境[ggcentos7 ~17:07:00]$su- Password: Last login: Thu Jul1817:06:472026on pts/0[rootcentos7 ~]# whoamiroot[rootcentos7 ~]# pwd/root[rootcentos7 ~]# exitlogout[ggcentos7 ~17:07:08]$# 切换到指定用户[ggcentos7 ~17:07:12]$su- operator1 Password:[operator1centos7 ~]$whoamioperator1[operator1centos7 ~]$pwd/home/operator1[operator1centos7 ~]$exitlogout[ggcentos7 ~17:07:20]$# 执行单个命令后返回[ggcentos7 ~17:07:25]$su-cwhoami; pwdPassword: root /rootsu 缺点用户必须知道 root 密码未记录用户执行命令无法以/sbin/nologin用户身份运行命令5.2 sudo 命令sudo 允许用户以其他用户身份执行特定命令# 以 root 身份执行命令[ggcentos7 ~17:07:32]$sudowhoami[sudo]passwordforgg: root# 指定用户执行命令[ggcentos7 ~17:07:40]$sudo-uoperator1whoamioperator1# 切换到 root Shell[ggcentos7 ~17:07:45]$sudo-i[rootcentos7 ~]# whoamiroot[rootcentos7 ~]# pwd/root[rootcentos7 ~]# exitlogout[ggcentos7 ~17:07:52]$# 查看可执行的 sudo 命令[ggcentos7 ~17:07:57]$sudo-lMatching Defaults entriesforgg on centos7:!visiblepw, always_set_home, match_group_by_gid User gg may run the following commands on centos7:(ALL)ALLsudo 优点用户输入自己的密码而非 root 密码执行命令记录在/var/log/secure精确控制用户可执行的命令sudoers 配置# 编辑配置文件使用 visudo 自动检查语法[ggcentos7 ~17:08:05]$sudovisudo# 配置示例ggALL(ALL)ALL# 允许执行所有命令ggALL(ALL)NOPASSWD: ALL# 免密执行所有命令ggALL(ALL)/sbin/useradd,/sbin/usermod# 只允许执行特定命令# 使用从配置文件推荐[ggcentos7 ~17:08:15]$sudoechogg ALL(ALL) ALL/etc/sudoers.d/gg[ggcentos7 ~17:08:20]$cat/etc/sudoers.d/gg ggALL(ALL)ALL命令别名# 定义命令别名Cmnd_Alias USER_COMMANDS/usr/sbin/useradd, /usr/sbin/usermod, /usr/sbin/userdel Cmnd_Alias GROUP_COMMANDS/usr/sbin/groupadd, /usr/sbin/groupmod, /usr/sbin/groupdel# 使用命令别名ggALL(ALL)USER_COMMANDS, GROUP_COMMANDS提权管理最佳实践优先使用 sudo临时获取权限操作完成后自动退回普通用户合理配置 sudoers精确控制用户可执行的命令使用绝对路径防止环境变量篡改导致的安全风险定期审计日志检查/var/log/secure追踪权限使用情况总结本文涵盖了 Linux 系统管理的核心内容Shell 环境变量掌握 EDITOR、LANG、PATH、PS1、HISTTIMEFORMAT 等常用环境变量的配置方法命令替换与引号理解$(COMMAND)和COMMAND的使用掌握转义字符和引号的区别用户和组管理熟练使用 useradd/usermod/userdel 和 groupadd/groupmod/groupdel/groupmems 命令密码管理掌握 chage 命令配置密码策略了解用户锁定与解锁的多种方法提权管理理解 su 和 sudo 的区别掌握 sudoers 文件的配置方法这些技能是 Linux 系统管理的基础建议多加练习熟练掌握