从“会敲命令”到“懂管理”:Linux用户权限与Shell变量实战手册
系统里这么多用户谁有权做什么为什么有的命令只能用root执行为什么我定义的变量换个终端就没了今天的内容正好回答这些问题。课程分两大部分用户和组管理——理解Linux的“身份系统”学会创建、修改、删除用户管理密码策略控制谁有权访问什么Shell变量深化——从变量定义到环境变量、命令替换、引号规则为后续Shell脚本编程打基础这两块内容有一个共同特点它们是Linux日常运维中使用频率最高的操作。学会它们你就从“命令执行者”变成了“系统管理者”。一、用户和组管理Linux的“身份系统”1.1 用户的三种类型Linux系统中有三种用户用户类型特点示例超级用户rootUID0拥有系统最高权限root系统用户UID1-999用于运行守护进程通常不允许登录postfix、sshd普通用户UID≥1000用于日常工作user、user01# 查看当前终端登录用户whoami# 查看所有登录用户whow# 更详细含负载、运行命令等# 只看用户名列表users1.2 /etc/passwd —— 用户账户数据库每行代表一个用户用冒号分隔7个字段name:password:UID:GID:GECOS:directory:shell示例user:x:1000:1000:software admin:/home/user:/bin/bash各字段含义name登录名passwordx表示密码存储在/etc/shadow中UID用户唯一IDGID用户主组IDGECOS用户描述信息通常为真实姓名directory用户主目录shell登录后默认执行的Shell程序⚠️注意系统用户的shell通常是/sbin/nologin表示该账户不能交互式登录。1.3 /etc/group —— 组账户数据库格式group_name:password:GID:user_list示例wheel:x:10:user字段说明group_name组名passwordx表示组密码存储在/etc/gshadowGID组唯一IDuser_list该组的补充成员列表用逗号分隔1.4 组的类型类型说明存储位置主要组每个用户只有一个新建文件默认归属此组/etc/passwd 的 GID 字段补充组用户可以属于多个用于扩展权限/etc/group 的 user_list 字段# 查看用户的所有组信息id# uid1000(user) gid1000(user) groups1000(user),10(wheel)# 只查看UIDid-uuser# 只查看GIDid-guser# 查看用户所属的所有组id-Guser二、用户管理实操2.1 useradd —— 创建用户# 最简单创建自动分配UID、家目录、同名的组useradduser01# 查看结果grepuser01 /etc/passwd# user01:x:1003:1003::/home/user01:/bin/bash# 带参数创建useradd-u8888-d/opt/user02-csoftware manager-gwheel-s/sbin/nologin user02# 参数说明# -u UID# -d 主目录路径# -c 描述信息GECOS# -g 主组# -s 登录Shell# -p 加密后的密码不推荐建议用passwd命令创建用户时发生了什么/etc/passwd、/etc/shadow、/etc/group增加记录创建用户主目录默认/home/username从/etc/skel/复制初始配置文件到主目录ls-a/etc/skel/# . .. .bash_logout .bash_profile .bashrc .mozilla默认配置来源/etc/login.defsvim/etc/login.defs# UID_MIN 1000 → 普通用户起始UID# UID_MAX 60000 → 普通用户最大UID# CREATE_HOME yes → 默认创建家目录2.2 usermod —— 修改用户属性# 修改UID并移动家目录usermod-u1008-md/home/user02 user02# -m 表示将原家目录内容移动到新位置# 添加补充组注意不加 -a 会覆盖原有补充组usermod-aGuser01 user02# 锁定用户禁止登录usermod-Llaowang# 解锁用户usermod-Ulaowang# 修改登录Shell禁止登录的经典方式usermod-s/sbin/nologin laowang# 设置账户过期时间usermod-e2024-07-18 laowang易错提示-aG才是追加单独-G是覆盖。-g是强制改变主组2.3 userdel —— 删除用户# 普通删除保留家目录userdeluser01# 强制删除即使正在登录userdel-fuser02# 删除用户并删除家目录和邮件池userdel-ruser032.4 综合案例手动创建一个用户# 1. 在 /etc/passwd 末尾添加用户记录echozhangsan:x:1002:1002::/home/zhangsan:/bin/bash/etc/passwd# 2. 在 /etc/group 末尾添加组记录echozhangsan:x:1002:/etc/group# 3. 在 /etc/shadow 末尾添加密码记录密文从别的用户复制echozhangsan:$6$...加密密码...::0:99999:7:::/etc/shadow# 4. 准备家目录cp-r/etc/skel/ /home/zhangsanchown-Rzhangsan:zhangsan /home/zhangsan# 5. 测试登录sshzhangsanlocalhost2.5 常见故障及修复故障现象原因解决方案Could not chdir to home directory家目录被删除cp -r /etc/skel /home/username 修改权限Permission denied家目录权限错误chown -R user:group /home/userchmod 700 /home/user提示符变成bash-4.2$/etc/bashrc缺失或损坏恢复/etc/bashrc文件三、组管理实操3.1 groupadd —— 创建组# 创建普通组groupaddadmin# 创建指定GID的组groupaddsysadmin-g20003.2 groupmod —— 修改组# 修改组名groupmod--new-name admins admin# 修改GIDgroupmod-g2002admins3.3 groupdel —— 删除组groupdelsysadmin3.4 groupmems —— 管理组成员# 添加成员到组groupmems-gadmins-auser# 列出组成员groupmems-gadmins-l# 从组中删除成员groupmems-gadmins-duser# 清空组中所有成员groupmems-gadmins-p补充四、用户密码管理4.1 /etc/shadow —— 密码数据库每行9个字段用冒号分隔login_name:password:last_change:min:max:warn:inactive:expire:reserved 用户名:密码哈希:最后修改日:最小间隔:最大间隔:警告期:失效期:保留字段字段说明login_name登录名password加密密码last_change上次密码修改距1970-1-1的天数min最小密码有效期天数max最大密码有效期天数warn过期前警告天数inactive过期后非活跃天数expire账户过期日期距1970-1-1天数许多用户的密码哈希字段是*或者!!密码哈希字段是 *表示该用户被锁定无法通过密码登录这些是系统服务账号bin、daemon、adm 等通常用于运行系统服务它们没有交互式登录权限这是安全设计密码哈希字段是 !!表示该用户没有设置密码且账号被锁定20648 是最后修改日从1970-01-01起的天数后面字段为空或默认值0:99999:7::: 等4.2 chage —— 修改密码策略# 查看密码策略chage-luser# 设置密码最大有效期100天chage-M100user# 设置最小有效期10天期间不能改密码chage-m10user# 强制下次登录改密码最常用chage-d0user# 锁定账户设置账户过期日期为过去chage-E1970-01-01 user4.3 密码管理命令对比命令作用示例passwd修改密码passwd userpasswd -d删除密码passwd -d userpasswd -l锁定用户passwd -l userpasswd -u解锁用户passwd -u userchage -d 0强制下次改密码chage -d 0 userusermod -L锁定用户usermod -L userusermod -U解锁用户usermod -U user五、Shell变量深化5.1 变量定义与引用复习深化# 变量名规则字母/数字/下划线不能数字开头# 定义变量等号两边不能有空格var1hello# 标准定义方式declarevar1hello# 引用变量使用$echo$var1echo${var1}_suffix# {}防止歧义# 查看所有变量set# 删除变量unsetvar1# 变量大小写转换declare-lnameJames# → jamesdeclare-unameJames# → JAMES5.2 环境变量系统预设变量作用PATH命令搜索路径HOME当前用户家目录USER当前用户名PWD当前工作目录LANG系统语言en_US.utf8/zh_CN.utf8PS1命令提示符格式EDITOR默认编辑器影响visudo等命令HISTTIMEFORMAT历史命令时间格式特别关注PATHecho$PATH# /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin# 临时追加PATHexportPATH$PATH:/my/custom/path# 注意如果把ls移走会出现什么mv/usr/bin/ls.ls# 报错command not found# 原因PATH中找不到ls了特别关注PS1# 查看当前提示符格式echo$PS1# [\u\h \W]\$# 常用符号# \u 用户名 \h 主机名 \w 完整路径 \W 当前目录 \t 时间 \$ 提示符# 彩色提示符颜色代码\e[颜色m# 30黑 31红 32绿 33黄 34蓝 35紫 36青 37白PS1[\[\e[32m\]\u\[\e[0m\]\h \W]\$ 特别关注HISTTIMEFORMAT# 让history显示执行时间exportHISTTIMEFORMAT%F %T history# 1000 2024-10-24 15:30:45 ls -l5.3 变量的持久化保存读取顺序Shell类型加载顺序按优先级Login Shell①/etc/profile→ ②~/.bash_profile→ ③~/.bashrc→ ④/etc/bashrcNon-Login Shell①~/.bashrc→ ②/etc/bashrc# 让所有用户永久生效 → /etc/profileechoexport LANGen_US.utf8/etc/profile# 只对当前用户永久生效 → ~/.bash_profile 或 ~/.bashrcechoexport EDITORvim~/.bashrcsource~/.bashrc# 立即生效5.4 命令替换命令替换是Shell中一种常用的功能用于将命令的输出结果作为值插入到命令行或赋值给变量。它允许在执行命令时动态获取结果并将其用于后续操作。# 两种写法等价$(COMMAND)COMMAND# 示例#假设我们执行的时间是 2026年7月18日星期六touchfile-$(date%Y%m%d)#生成一个名为file-20260718的文件echoToday isdate%A#输出Today is Saturday# 扩展计算1-100的和echo$[$(echo{1..100}|tr )]# 输出50505.5 引号与转义符号作用示例\转义单个字符echo \$PATH→ 输出$PATH保留变量替换和命令替换echo 今天是 $(date)保留所有字符原意echo $PATH→ 输出$PATHusernameJack# 无引号空格被压缩echoHello$username# Hello Jack多个空格变一个# 双引号保留空格$变量被替换echoHello$username# Hello Jack# 双引号转义$被转义不替换echoHello \$username# Hello $username# 单引号所有都保留原意echoHello $username# Hello $username5.6 其他Shell# 查看系统支持的所有Shellcat/etc/shells# /bin/sh# /bin/bash# /usr/bin/sh# /usr/bin/bash# 安装额外Shellyuminstall-ytmux# 终端复用器yuminstall-ytcsh# C Shell# tmux快捷键Ctrlb# c → 新建会话# 数字 → 切换到对应编号会话写在最后到今天为止我们已经学了四天Linux了。回头看看Day 1认识Linux装系统敲基本命令Day 2文件管理通配符批量操作Day 3查帮助Vim编辑器重定向与管道Day 4用户权限管理 Shell变量深化核心命令速查# 用户管理useradd|usermod|userdel|id|who|w|chage# 组管理groupadd|groupmod|groupdel|groupmems# 密码管理passwd|chage|usermod-L/-U/-s/-e# Shell变量declare|export|unset|set|echo$变量名# 配置文件/etc/passwd|/etc/shadow|/etc/group|/etc/login.defs|/etc/skel/

相关新闻

热转印唛头浆选型必看:3个技术指标让耐洗牢度突破20次

热转印唛头浆选型必看:3个技术指标让耐洗牢度突破20次

在热转印唛头浆的实际应用中,有至少3项核心指标会直接决定成品能否稳定通过40℃、20次以上的工业水洗测试,但超过七成的中小印厂在初次接触撒粉工艺时,往往只关注价格而忽略了这些底层参数。过去不少厂家习惯用通用型胶浆替代,结果…

2026/7/19 8:26:00阅读更多 →
CV前沿论文落地指南:从arXiv到Jetson部署的五层穿透法

CV前沿论文落地指南:从arXiv到Jetson部署的五层穿透法

1. 这不是“论文速读”,而是一份面向实战者的CV前沿动态拆解指南你有没有过这种体验:打开arXiv,刷到一篇标题带“Vision Transformer”“Diffusion”“Multimodal Alignment”的新论文,摘要读完三遍还是没抓住它到底解决了什么具体…

2026/7/19 8:26:00阅读更多 →
STM32硬件SPI与软件SPI驱动74HC595性能对比

STM32硬件SPI与软件SPI驱动74HC595性能对比

1. 项目背景与核心价值 在嵌入式开发中,74HC595作为经典的8位串行输入/并行输出移位寄存器,被广泛用于IO口扩展场景。而STM32F030作为Cortex-M0内核的性价比之王,其硬件SPI接口与软件模拟SPI的实现差异,一直是开发者关注的焦点问题…

2026/7/19 8:25:59阅读更多 →
Cursor移动端适配实战手册(2024最新RN+Flutter双框架兼容白皮书)

Cursor移动端适配实战手册(2024最新RN+Flutter双框架兼容白皮书)

更多请点击: https://codechina.net 第一章:Cursor移动端适配的演进脉络与核心挑战 Cursor 作为基于 VS Code 内核构建的 AI 编程助手,其移动端适配并非简单响应式缩放,而是一场贯穿架构、交互与性能的系统性重构。早期版本依赖桌…

2026/7/19 13:26:33阅读更多 →
【AI数字人直播落地实战指南】:0代码搭建高转化直播间,3天上线+92%复购率提升路径

【AI数字人直播落地实战指南】:0代码搭建高转化直播间,3天上线+92%复购率提升路径

更多请点击: https://kaifayun.com 第一章:AI数字人直播落地的核心价值与业务定位 AI数字人直播正从技术概念快速走向规模化商业应用,其核心价值并非替代真人主播,而是重构直播效率、体验与运营范式。在电商、教育、金融、政务等…

2026/7/19 13:26:33阅读更多 →
学完递归,学二叉树的迭代遍历

学完递归,学二叉树的迭代遍历

什么是递归,什么是迭代!刚刚学的层层嵌套,就是递归(我感觉更直观些)for,while循环,就是迭代。数学代码对比(绝对简单)我们算一个超级简单的数学题:求 1 2 3…

2026/7/19 13:26:33阅读更多 →
告别数据线束缚:3个场景解锁scrcpy安卓投屏的无限可能

告别数据线束缚:3个场景解锁scrcpy安卓投屏的无限可能

告别数据线束缚:3个场景解锁scrcpy安卓投屏的无限可能 【免费下载链接】scrcpy Display and control your Android device 项目地址: https://gitcode.com/GitHub_Trending/sc/scrcpy 你是否曾经想过,在电脑大屏幕上流畅操作手机应用,…

2026/7/19 13:26:33阅读更多 →
Copilot图表制作失效预警:当AI拒绝生成折线图时,你已踩中4个合规性/结构化/语义化雷区

Copilot图表制作失效预警:当AI拒绝生成折线图时,你已踩中4个合规性/结构化/语义化雷区

更多请点击: https://kaifayun.com 第一章:Copilot图表制作失效预警:当AI拒绝生成折线图时,你已踩中4个合规性/结构化/语义化雷区 为何Copilot突然“失语”?不是模型故障,而是输入越界 Copilot在图表生成…

2026/7/19 13:26:33阅读更多 →
深入学 LangChain 官方文档(二):Model 模型首讲

深入学 LangChain 官方文档(二):Model 模型首讲

深入学 LangChain 官方文档(二):Model 模型首讲 本篇对应的官方文档 LangChain Models:支撑统一模型接口、初始化参数,以及 invoke、stream、batch 三种调用合同。ChatOpenAI integration:支撑模型实例化、…

2026/7/19 13:24:33阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/19 0:01:04阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/19 0:01:04阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/19 0:01:04阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/19 0:01:04阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/19 0:01:04阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/19 0:01:04阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/18 22:49:46阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/18 14:49:24阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/18 18:49:35阅读更多 →