
简介这是一份操作系统实验总结文档围绕Linux基础操作、用户与组管理、磁盘管理与文件系统三大模块展开适合计算机相关专业学生及Linux初学者用于实验复盘与实操巩固。文档仅1个docx文件总量12KB结构精炼既方便直接阅读也便于按需修改复用。目前已有309人学习下载。内容覆盖文件与目录管理ls、cd、mkdir、cp、mv、文件权限设置rwx、chmod、chown、文本处理命令grep、sed、awk并延伸到用户账户维护useradd、usermod、userdel、组管理groupadd、groupmod、磁盘分区与格式化fdisk、mkfs、ext4/xfs、挂载配置mount、umount、/etc/fstab及磁盘配额约束quota同时涉及/etc/passwd、/etc/shadow等账户配置文件的查看与管理思路关键步骤均有对应说明。读者可借此快速回顾实验重点、理清权限与存储管理脉络也可作为考前复习提纲、实验报告参考或教师备课素材对照文档逐项动手验证提升Linux系统管理的实际操作与排错能力。1. 这堂实验课到底在练什么把文件权限、用户组、磁盘管理串成一条操作主线如果你在学校或自学环境里做过 Linux 实验大概率遇到过这种场景照着教程敲完了useradd和chmod结果换台机器或者换个发行版命令照样能用但服务就是起不来文件就是写不进去。这不是命令没敲对而是你还没有把“权限模型”“用户组关系”“磁盘挂载状态”当成一个整体来理解。这篇实践总结要做的就是把这些系统管理的基础操作串成一条线文件权限管的是谁能进、谁能改用户组管的是如何批量授权、如何切换身份磁盘管理管的是空间在哪里、怎么挂上去。三条主线在实验里互相影响也是日常服务器运维里最常翻车的地方。适合刚做完操作系统课程实验、想补全细节的读者也适合准备运维岗位面试时需要把基础操作讲清楚的人。2. 文件权限从权限位原理到 chmod/chown 的完整操作链2.1 权限位的底层逻辑rwx 与数字表示法到底在表达什么Linux 下每个文件或目录都带着一组权限位ls -l看到的形如-rwxr-xr--的十字符第一个字符表示类型后面九位按“所有者 / 所属组 / 其他人”分成三段。每段三位分别是 r读、w写、x执行。这听起来是入门内容但实验里最容易出的问题是把“文件上的权限”和“目录上的权限”混为一谈。文件上的 r 表示能读内容w 表示能修改x 表示能作为程序运行。目录上的语义完全不同r 是能列出目录内容w 是能在目录里创建或删除条目x 是能进入目录。这里最常见的翻车点就是给一个目录只配了rwx给所有者但没给其他用户配 x结果其他用户能ls看到名字却在实际访问时被拒绝因为没法“走进”这个目录。数字表示法的本质是让三段权限分别转成八进制数。读等于 4写等于 2执行等于 1三者相加得到单个数字。所以rwxr-xr--对应的是754用chmod 754 文件就能直接设置。很多人记了这个规则但没理解为什么要设计成“加和”而不是“排列组合”加和方式保证了r永远是 4w永远是 2x永远是 1改某个位不影响其他位实用上也方便你在心里把755拆成“所有者全权限、组只读执行、其他人只读执行”。实验课上还有一个常被问到的点chmod 1777与chmod 777的区别。前者多了一个最高位的 1这是 sticky bit粘滞位在 /tmp 这种公共目录上启用后每个用户只能在目录里删除自己创建的文件能有效避免“别人把我临时文件删了”的尴尬。做实验时如果不确定要不要加先记结论普通项目目录用 755 或 750 足够公共临时目录才需要 1777。2.2 chmod 的落地操作改权限的四种写法与适用场景chmod有两种写法一种是数字写法一种是符号写法。实验报告里我一般推荐数字写法因为它简洁、可复现、一看就知道最终权限是什么。但符号写法在“只给某个角色追加某个权限”的场景下更快比如只给所有者加执行权限不需要先查当前权限位。# 数字写法设置所有者 rwx组 r-x其他人 r chmod 754 test.sh # 符号写法给组追加写权限不改变其他位 chmod gw test.sh # 递归设置目录树权限实验里经常用于批量处理某个项目目录 chmod -R 750 /data/project # 去掉其他人的所有权限保留所有者和组权限 chmod o-rwx test.sh-R参数会递归处理目录下所有文件看起来省事但实际用起来要小心它会给目录和文件套同一套数字而一个可执行文件和一个数据文件往往需要不同的权限策略。常见的做法是先给目录统一设成 755再单独处理特殊文件或者用find配合-exec来区分处理。符号写法里的gw表示给组加上写权限o-rwx表示把其他人的所有权限去掉加减号的位置和角色字母组合成一条完整表达式优点是只动指定位不像数字写法需要一次性写出完整的三位权限。实验里最常见的错误是给脚本配了644然后抱怨“为什么不能直接执行”。这不算权限错误是文件上没有 x 位执行器自然拒绝。另一个常见错误是给目录配777图省事结果目录里的文件被别人随意修改实验报告如果写到“为了省事将所有目录置为 777”评审基本都会扣分。如果你真的需要一个多用户共享目录优先考虑先设 755再通过用户组来限制可写范围。2.3 chown/chgrp改所有者和属组实验里最容易漏的一步chmod改的是“权限位”但它解决不了“文件属于谁”的问题。一个文件在系统里必然带着 owner所有者和 group属组ls -l 的第三列和第四列显示的就是它们。做实验时经常出现这种局面你用 A 用户创建了文件然后切换到 B 用户想修改它尽管你在同一个组里但文件的属组还是 A 的主组B 没有写权限。这种问题用 chmod 改权限能绕过去但更像是在凑合正确手段是chown或chgrp。# 把 test.sh 的所有者改成 alice属组改成 dev chown alice:dev test.sh # 只改属组使用 chgrp chgrp dev test.sh # 递归修改一个项目目录-R 同样能处理目录树 chown -R alice:dev /data/projectchown alice:dev这种“用户:组”的写法一次改两边是最常用的形式。需要注意普通用户通常不能把文件的属主改成别人只有 root 或对该文件有授权的用户能执行这也是实验里为什么要配合sudo使用的原因。当你把文件从 A 用户迁移给 B 用户时chown之后最好顺手用ls -l核对一遍属主和属组是否都对了我见过不少次只改了属主、属组还挂在旧账户下面结果权限验证始终不过的情况。这个步骤在实验报告里也很少有人写全但它在“用户组管理”实验里几乎是必考的联动操作你建了用户组把用户加进组然后还要通过 chown/chgrp 把文件资源交给这个组整个链路才完整。如果只是加了个组文件资源的属组还是旧组那这个组存在感等于零。3. 用户与用户组从创建到切换构建多用户环境的整套流程3.1 useradd/groupadd创建用户和用户组的系统默认行为Linux 上创建用户的标准命令是useradd创建组是groupadd。这里最容易被忽略的是useradd在不同发行版上的默认行为不一样。有的发行版默认会创建同名主组并生成家目录有的发行版用useradd时如果不带参数不会生成家目录密码也不设用户创建出来也无法直接登录。所以做实验时不要只敲一条useradd alice就以为万事大吉。# 创建用户并生成家目录指定默认 shell useradd -m -s /bin/bash alice # 创建用户时直接附加到附加组 dev主组保持 alice 本身 useradd -m -G dev -s /bin/bash bob # 创建专用于某个服务的用户不创建家目录也不允许登录 useradd -M -s /usr/sbin/nologin svc-user-m是 make home 的缩写创建家目录-s指定登录 shell实验环境一般用/bin/bash-G指定附加组可以带多个组名用逗号分隔。第三个例子看起来不像常规操作但在真实服务器部署里非常常见跑服务的进程账户不需要家目录更不需要交互式登录用nologin作为 shell 能从入口切断直接登录的路径这是安全基线里的基本要求。创建用户之后默认状态下新用户没有密码可以用passwd alice来设置或修改。实验里如果发现新用户无法切换过去多半不是密码错而是压根没设。还有一个容易踩的坑useradd和adduser是两个不同的命令家族有的发行版里adduser是对useradd的封装会交互式询问密码和全名有的发行版里根本没有adduser。贴到脚本里时最好统一写useradd保证可移植性。3.2 usermod/passwd修改属组、锁定与密码策略用户创建完不是一劳永逸的。课程实验经常要求“把用户加入某组”“禁止某用户登录”“设置密码有效期”这几个需求分别对应usermod和passwd的参数组合。这里最容易记混的是-G和-aG的区别usermod -G dev alice会把 alice 的附加组列表直接覆盖成 dev如果 alice 原来还在其他组里会被悄悄拿掉usermod -aG dev alice才是“追加”语义a 代表 append写脚本时我习惯永远带-a避免误伤已有组关系。# 把 alice 追加到 docker 组保留原有附加组 usermod -aG docker alice # 把 alice 的主组改成 dev注意用户的主组不一定叫 alice usermod -g dev alice # 锁定用户禁止登录解锁用 -u usermod -L alice # 设置 alice 的密码 90 天必须更换一次 passwd -x 90 aliceusermod -g改的是主组一个用户只能有一个主组它的意义在于决定用户新建文件时的默认属组-G改的是附加组一个用户可以有多个附加组附加组决定用户能访问哪些额外资源。这个“主组 vs 附加组”的区分是实验考试的高频题务必记清。passwd -x 90里的 x 是 maximum age 的意思表示密码最长使用天数类似的还有-n最短修改间隔和-w过期前警告天数这些参数在真实服务器密码策略里会配合用实验报告里能主动提一句-x -n -w的组合使用会让评审觉得你不是在背命令。锁定用户的场景在实验里要求“禁止某用户登录”很多人直接删用户但删用户会连带处理家目录和邮件误伤面很大。用usermod -L锁密码是最轻量的方式逻辑上也更好描述。3.3 su 与 sudo切换用户与提权的边界实验报告的常考难点创建了用户组总要验证“这个用户能不能以另一个身份执行操作”。su是切换用户sudo是以别的主体执行命令。两者的核心差异在于su需要输入目标用户的密码而sudo需要输入执行者自己的密码且执行者必须被授予 sudo 权限。这是实验里最常被搞反的点。# 切换到 alice环境变量一起变 su - alice # 以 root 身份执行单个命令不切换会话 sudo useradd -m -s /bin/bash carol # 查看当前用户的 sudo 权限 sudo -lsu - alice中那个-或-l/--login非常关键它表示“以登录 shell 的方式切换”会加载 alice 的环境变量和家目录路径。不带-的su alice只切换用户身份PATH 等环境变量还留着 root 的很容易出现“命令明明装了但找不到”的诡异情况。sudo -l可以列出当前用户在 sudoers 里被允许的命令列表排查“为什么我 sudo 不了”的第一件事就是跑它。sudo 的授权机制写在/etc/sudoers文件里一般用visudo编辑。实验里如果要让某个用户组的人都能执行管理员命令只需写入类似%dev ALL(ALL:ALL) ALL的规则。这里要特地说清楚%dev表示一个组不带%的则代表单独用户ALL(ALL:ALL)分别是“主机范围/执行身份/执行组身份”这种三段式结构在实验报告里如果写得出来会明显拉开与直接抄命令的差距。一般在实验机上我会把用户分成两组纯业务用户不配 sudo只给sudo -l看权限的权限系统管理员用户才放开 ALL。这样既满足实验要求又能实测“未授权用户执行 sudo 时的报错信息”理解更直观。4. 磁盘管理从 df/du 查看到分区、格式化与挂载的完整实验链路4.1 磁盘信息的查看df 与 du 的差别和使用场景磁盘管理实验的第一步永远不是分区而是先搞清“系统现在怎么看磁盘”。df站在文件系统层面报告“哪个分区挂在哪个目录、用了多少、还剩多少”du站在目录层面统计“某个目录里的文件总共占多大”。两者侧重完全不同但实验里经常被当成一回事。# 查看所有已挂载文件系统的使用情况-h 以人类可读格式显示 df -hT # 统计 /data 目录占用的总大小 du -sh /data # 找出 /var 下占用最大的子目录按大小排序 du -h --max-depth1 /var | sort -hdf -hT的T会显示文件系统类型这一步能看出你的磁盘是 ext4、xfs 还是其他格式对后续格式化操作很关键比如 ext4 和 xfs 的扩容工具就完全不同。du -sh里的 s 是汇总h 是人类可读它只给出目录整体大小--max-depth1则限定只能往下看一层配合sort -h能把“到底谁把磁盘吃满了”排序出来这是磁盘告警排查时的标准起手式。这两个命令在实验里的典型坑是你删了一个大文件但df显示空间没变化而du显示目录已经变小。原因通常是删除时那个文件仍被某个进程占用文件在文件系统里的“目录项”被删了但数据块还活着df统计的是实际占用所以空间没释放。遇到这种情况先别急用lsof | grep deleted找到对应进程再决定重启还是重载。另一个有意思的点是df对同一个文件系统可能会显示多个挂载点那是因为同一个分区被 mount 到两个目录下。实验里如果看到这种输出说明已经不是单纯学命令的阶段了而是在验证“挂载点只是访问入口底下的数据是同一份”。4.2 分区与格式化fdisk 的交互操作与文件系统创建实验课的磁盘管理通常会给虚拟机加一块新盘或者用一块空闲盘来做分区练习。最常用的分区工具是fdisk它适合 MBR 分区表磁盘小于 2T 时用起来最顺手。GPT 分区表用parted更稳妥但实验里 90% 的场景 fdisk 就够用。执行fdisk /dev/sdb后会进入交互式命令行输入n新建分区p查看分区表w写入并退出q不保存退出。# 查看系统识别到的所有磁盘 lsblk # 进入 fdisk 交互界面对第二块磁盘分区 sudo fdisk /dev/sdblsblk应该在分区前先跑一次它会列出所有磁盘和它们的分区关系比fdisk -l更容易一眼看懂结构。在fdisk交互里新建分区的默认操作是选分区号、第一扇区、结束扇区绝大多数时候直接回车用默认值即可最后用w写入。写完后可以看到lsblk输出里多了/dev/sdb1这样的设备节点但这只是“分区”创建完成文件系统还没有。接下来是格式化。mkfs系列命令按文件系统类型分ext4 用mkfs.ext4xfs 用mkfs.xfs。这一步是有破坏性的执行前一定要确认设备名没错比如把正在使用的系统盘重新格式化会把整台机器搞崩。实验机上我会先lsblk核对设备路径然后才执行下面的命令。# 把 /dev/sdb1 格式化为 ext4 文件系统 sudo mkfs.ext4 /dev/sdb1 # 如果想指定卷标方便后续按名字识别 sudo mkfs.ext4 -L data_disk /dev/sdb1-L是设置卷标label相当于给文件系统起个名字后面用blkid查看时会一起显示。格式化的耗时取决于磁盘大小现代 SSD 上基本秒完成。格式化结束后用blkid /dev/sdb1能看到 UUID 和文件系统类型这个 UUID 是后面写 fstab 时的核心标识比直接写设备名更可靠因为设备名在重启后可能发生变化。4.3 挂载与开机自动挂载mount 手挂与 /etc/fstab 的配置分区、格式化都完成后磁盘还不能直接用需要把文件系统“接”到某个目录上这个过程叫挂载mount。挂载目标目录通常是一个空目录比如/mnt/data先mkdir建好再挂上去。实验里很多人直接挂到/mnt本身也能用但不符合规范/mnt是给临时挂载点用的数据盘的挂载点一般自定义在/data之类的位置。# 创建挂载点 sudo mkdir -p /data # 手动挂载 sudo mount /dev/sdb1 /data # 验证挂载结果 df -hT /datamount之后立刻用df -hT /data验证能看到文件系统类型、容量、使用量这代表挂载成功。手动挂载的问题是重启后失效如果实验要求“重启后仍生效”必须写进/etc/fstab。fstab 的每一行有六个字段设备标识、挂载点、文件系统类型、挂载选项、dump 备份标记、fsck 检查顺序。最简单可靠的写法是使用 UUID 而不是/dev/sdb1UUID 的获取方式就是blkid或lsblk -f。# 查看 UUID 和文件系统类型 sudo blkid /dev/sdb1 # 在 /etc/fstab 末尾追加一行按 UUID 挂载 UUID粘贴你的UUID /data ext4 defaults 0 2写完后用sudo mount -a验证 fstab 配置是否有语法错误。这条命令会按 fstab 重新挂载所有未挂载的文件系统如果这里不报错说明语法没问题如果报错说明 UUID 抄错、文件系统类型写错或者挂载点不存在。这里给一个血泪经验修改 fstab 后一定要执行mount -a更稳妥的实验习惯是在重启前把 fstab 备份一份cp /etc/fstab /etc/fstab.bak万一写错导致开机进紧急模式至少能靠备份恢复。fstab 最后一列的检查顺序也有讲究根分区是 1其他需要 fsck 的分区是 2不需要检查的是 0。网上很多教程直接写 1其实对非根文件系统并不合适。实验报告里能把这一列讲明白基本就能证明你不是在纯抄配置。5. 实验中的常见翻车与排查权限、用户组、磁盘踩坑实录5.1 报错 Permission denied 的排查顺序现象在目录/data下创建文件失败终端报Permission denied但当前用户明明已经加入了对应的用户组。于是以为权限位没问题反复用chmod 777去试问题虽然临时解决但安全隐患极大。原因/data目录的属主和属组还挂在别的用户/别的组下或者目录的权限位里没有给目标组写权限又或者目标组虽然有了权限但用户还没有真正“刷新”到新组状态。排查顺序应该是先id 用户名看当前用户实际在哪些组再用ls -ld /data看目录的属主、属组、权限位最后确认是否组匹配成功。解决优先用chown 用户:组 /data或chgrp 组 /data把资源移交到目标组再配chmod 770保证组内可读写。如果权限和组都对但用户是新加入的组执行newgrp 组名刷新会话或者重新登录。不要先用 777 绕过问题这在排查阶段会让你分不清根因。5.2 用户组改了不生效newgrp 与登录缓存的坑现象管理员执行usermod -aG dev alice然后让 alice 直接去访问属于 dev 组的资源结果被拒绝。alice 自己也用id查了显示已经在 dev 组里但访问资源依然没有权限。原因id显示的是用户账号在系统层面的组关系但在用户当前会话中进程的用户组凭证GID是在登录或切换用户那一刻确定的。已经打开的 shell 不会自动感知组关系变化除非重新登录或者用newgrp这个命令让当前会话主动切换。解决让 alice 执行newgrp dev输入密码后当前会话的组凭证会刷新。如果想彻底避免这类问题在改完组之后直接要求用户退出重新登录。这类问题在自动化脚本里尤其隐蔽如果脚本里用su alice -c执行操作而 alice 的登录态是旧的就会出现“组明明加了权限还是不够”的玄学现场。5.3 删除大文件后磁盘空间没变小被进程占用现象du看某个目录已经不再统计大文件但df -h显示磁盘占用率没降。反复确认文件已删除甚至用ls也看不到空间就是回不来。原因文件被某个进程打开删除只是断掉了目录项文件的数据块仍被进程持有直到进程关闭文件或退出。这在日志文件、数据库临时文件、还有实验里用 dd 写测试文件后忘记关闭的场景都很常见。du统计的是目录树所以它看不见df统计的是文件系统真实占用所以它仍然算着。解决先用lsof | grep deleted找出还握着已删除文件的进程确认后重启该进程或让进程重新加载配置。如果实验场景只是测试空间释放机制结束这个进程后df应该立刻恢复正常。建议把“先查占用进程再删文件”养成习惯特别是处理日志目录时不要只rm了就以为完事了。5.4 手工挂载重启丢失fstab 写错导致进入紧急模式现象实验时手工mount已经成功了重启后发现挂载没了更糟的情况是系统开机直接停在紧急模式emergency mode提示有文件系统挂载失败。前者是没写 fstab后者多半是 fstab 写错了。原因没写 fstab 重启后丢失很正常因为手工挂载的信息不持久。写错 fstab 导致开机失败常见的三种原因是UUID 抄错多了或少了字符、文件系统类型填错比如把 ext4 写成 xfs、挂载点目录不存在。系统启动时执行mount -a失败就默认进入紧急模式等待人工修复。解决进入紧急模式后先mount -o remount,rw /让根文件系统变为可写状态再打开/etc/fstab把错误行注释掉或修正然后重启。我之前实验课的同事就遇到过把 UUID 抄漏一位的情况结果系统起不来整个人懵了二十分钟才发现是 fstab 的问题。这里再次强调改 fstab 前备份、改完mount -a验证这两步能避免绝大多数重启翻车。如果环境支持也可以把实验盘的挂载条目放在单独文件里通过/etc/fstab的include机制管理但实验机一般不用做这么重。6. 把实验做深一点的三个进阶技巧前面几章覆盖了实验要求的核心操作但如果你想在实验报告里体现出“思考过而不只是敲过命令”下面这三个技巧值得花半小时试一遍。它们不超纲却能把权限管理从“会 chmod”拉到“理解权限是从哪来的、怎么按场景收敛”。第一个技巧是用umask控制新建文件的默认权限。umask是一个“反掩码”它表示“新建文件时要去掉哪些权限”。系统默认值一般是022意味着新建文件去掉组和其他人的写权限。实验里你可以比较umask 022和umask 077下分别 touch 一个新文件的权限差异。前者是多用户协作风格后者是个人私有风格。把这条写进报告能解释“为什么同一条命令在不同机器上生成的文件权限不一样”。第二个技巧是 ACL访问控制列表。它允许你对单个用户或单个组单独授权而不必把权限位改得乱七八糟。比如/data目录按传统权限只允许 dev 组写但你想让 alice 一个特定的人获得读权限而不加入 dev 组传统权限做不到ACL 可以。setfacl -m u:alice:rx /data加上一条规则getfacl /data查看实验报告里只要展示这个对比就能说明多用户场景下权限模型的边界在哪。第三个技巧是 sudo 的有效期调整。sudo 默认记住密码一段时间一般是 15 分钟实验时频繁切来切去很烦人可以用sudo -k强制立即失效或者在 sudoers 里调timestamp_timeout。我记得自己第一次学会这个技巧是在一次连续配环境时反复输密码输到崩溃查了文档才反应过来 sudo 的超时是安全设计不是故意烦人。从那以后我做实验就有意识地用sudo -k来测试权限授予与回收而不是靠重启来重置状态。这三个技巧的共同点是都来自实验过程中的真实痛点而不是为了炫技。你现在回头看这篇总结里讲的权限位、用户组、磁盘挂载会发现它们都是同一个系统里互相咬合的齿轮——权限管访问边界组把人聚合在一起磁盘把资源放到位再被权限机制保护起来。希望这篇实践总结能帮你把实验里的操作从“会敲”变成“懂行”也让你在以后排查服务器问题时能从这三条线快速定位方向而不是盲试命令。本文还有配套的精品资源点击获取