
朋友甩给我一套他们学校整理的《Linux 实验大全》某个农林类高校内部用的课程实验合集。我翻完之后的第一反应是这套东西不像作业更像一个浓缩版的运维入门训练营。整套实验从系统安装、命令行基础开始一路做到用户权限管理、Shell脚本、磁盘LVM、网络配置、Samba文件共享、DNS/DHCP、防火墙策略最后还有一个综合性的服务器搭建项目。内容排布完全是按“单机操作 → 服务配置 → 综合运维”的思路在走。如果你正在学Linux但不知道从哪下手或者带实验课不知道该怎么设计项目再或者刚转运维、想系统补一补服务搭建和排错基本功这套实验里踩过的坑、绕过的弯路都值得仔细过一遍。我这次把其中几个核心实验落地复现了一遍顺便把实验里最容易被忽略、但真正影响成败的细节全部整理出来下面一篇一篇拆开聊。1. 实验体系的整体设计与思路拆解1.1 从零搭建到服务配置的进阶路线整套实验的编排逻辑非常清晰总共可以分成五个递进层级。第一个层级是系统安装与命令行入门。这部分实验看着简单但它的作用是把“能开机”和“能操作”之间的距离拉平。很多同学第一次用Linux双击终端都不知道怎么打开更别提分区、挂载、配置IP了。这套实验从虚拟机安装开始先解决“系统能跑起来”的问题然后逐步训练cd、ls、cp、mv、vim、tar这些最基础但日常必用的命令。这个阶段的目标不是背命令而是让你不再害怕命令行界面。第二个层级是用户、权限、磁盘与文件系统。这部分是整套实验的地基。原因很简单Linux是个多用户系统权限模型搞不清楚后面所有服务配置都会出问题。磁盘管理同样如此你搭Web服务器、搭文件共享服务器最后都会遇到“空间不够怎么办”“挂载点怎么规划”这类硬问题。第三个层级是Shell脚本与自动化。实验做到这里基本开始接触重复性工作的批处理。批量创建用户、根据条件执行不同逻辑、定时备份数据这些脚本任务在真实运维环境里每天都会遇到。实验课设计这个模块核心意图是让学生从“手动敲命令”切换到“写一段逻辑让系统自己跑”。第四个层级是网络配置与常用服务搭建。DNS、DHCP、FTP、Samba、HTTPD一个一个服务独立实验然后组合使用。这个阶段的价值在于建立起“服务之间会互相依赖”的意识客户端要想通过域名访问网站得有DNS解析要想自动获取IP得有DHCP服务要想跨平台共享文件得配Samba。第五个层级是综合实验。期末阶段把前面所有模块串起来搭一个完整的小型服务器环境。这时候你才会真正意识到前面每个实验单独做都很顺但一组合起来防火墙、权限、网络连通性、服务自启到处都可能埋雷。1.2 各实验模块的学习目标与隐藏考点每个模块表面上是完成一个任务但老师的评分点往往藏在细节里。用户与权限实验的隐藏考点是数字权限换算和umask。班级里总有同学懒得理解rwx字符权限直接记chmod 777遇到任何问题都给最大权限。这样确实省事但实验报告里让你解释权限数值怎么来的就露馅了。rwx对应4、2、1可读是4可写是2可执行是1三组权限相加得到三个数字这个换算必须形成条件反射。磁盘与LVM实验的隐藏考点是卷组扩容和逻辑卷缩小。很多同学能跟着文档把LVM建出来pvcreate、vgcreate、lvcreate三步一气呵成但一旦磁盘空间不够要扩容或者在实验环境中需要缩容腾空间就完全没思路了。实际上LVM的价值恰恰在于动态调整考试时很容易在这些操作上增加难度。网络服务实验的隐藏考点是服务依赖关系。比如Samba实验光是装好samba包还不行SELinux如果处于enforcing状态客户端一样访问不了共享目录。FTP实验则经常被防火墙挡在门外。这些跨模块的整合能力才是拉开分数差距的地方。1.3 这套实验体系对实际工作的还原度我说这套实验像运维入门训练营并不是客套话。现在不少中小公司的服务器环境还保留着非常传统的部署方式CentOS 7系统、手动配置网络、脚本初始化环境、Samba做内网共享、Nginx或Apache承载Web服务、iptables或firewalld管控端口。这套实验里练过的几乎所有场景都能直接映射到真实工作里。我自己的体会是实验课和背题库最大的区别在于题库只能让你记住“怎么做”实验则逼你在环境异常时自己想办法“修好它”。这种处理未知问题的能力完全靠一遍一遍实操堆出来没法速成。2. 环境准备与工具链选型2.1 虚拟机方案与硬件规划做这套实验不需要买服务器一台普通电脑装个虚拟机软件就够跑完所有项目。主流的虚拟机方案有VMware Workstation和VirtualBox。两个工具在实验场景下功能上都够用区别在于VMware在快照和网络模式切换上更顺滑VirtualBox则免费开源、批量部署虚拟机更方便。如果只是跟着实验做选哪个都行。我这次复现用的是VMware Workstation主要原因是它的快照功能更成熟做服务实验时频繁回滚系统格外重要。虚拟机配置不需要太高单台虚拟机给2核CPU、2GB内存、20GB硬盘就能流畅跑完大部分实验。如果需要同时起两三台虚拟机模拟多服务器环境宿主机最好有16GB以上内存否则会明显卡顿。注意创建虚拟机时虚拟磁盘建议选择“将磁盘存储为单个文件”。虽然预分配磁盘性能更好但实验环境经常需要复制、移动虚拟机文件单个文件管理起来方便得多。2.2 发行版选择与软件源加速实验手册通常以CentOS 7为主部分学校也会用Ubuntu Server两者在命令细节上有差异比如系统服务的查看命令是systemctl还是service包管理器是yum还是apt。建议以你课程指定的发行版为准去做不要中途随意切换否则实验报告的截图和命令都会对不上。我用的是CentOS 7镜像原因很简单它和很多企业内部服务器的系统版本一致配置文件和命令习惯能直接平移到工作环境。装完系统的第一件事是配软件源。CentOS默认源在国内环境下速度不稳定建议切换到国内常见镜像源比如高校或开源组织维护的公共镜像站。操作方式是把/etc/yum.repos.d/CentOS-Base.repo替换成对应镜像站的配置然后执行yum clean all yum makecache重建缓存。这一步做完后续安装服务包的速度会明显提升。很多同学跳过了这步结果装个samba包等了好几分钟还容易因为网速问题出现下载超时特别影响实验节奏。2.3 远程连接与文件传输工具实验过程中我一定推荐用远程终端工具连接虚拟机而不是直接在虚拟机窗口里操作。原因有三个一是终端窗口的字体、配色和滚轮体验比虚拟机控制台舒服得多二是复制命令时不容易漏字符三是后续涉及多个虚拟机联动时多标签页的终端工具比来回切换虚拟机窗口高效得多。常用的终端工具包括Xshell、MobaXterm、SecureCRT。Xshell免费版功能足够日常使用MobaXterm则自带X Server以后做图形界面相关的实验比如在Linux里跑带界面的软件会方便一些。新建连接时填虚拟机的IP地址用户root端口22认证方式选密码。需要注意的是Ubuntu Server默认可能没安装openssh-serverCentOS默认会装上。如果你的虚拟机是Ubuntu且连不上SSH先执行systemctl status sshd看看服务是否存在不存在就apt install openssh-server补装。文件传输场景命令行下用scp最方便。把本机文件传到服务器scp /path/to/local/file root192.168.100.10:/root/把服务器文件拉回本地scp root192.168.100.10:/root/test.txt /path/to/local/需要交互式浏览服务器目录时也可以直接使用终端工具内置的SFTP面板图形化程度高适合偶尔传一次文件的情况。2.4 快照策略做实验前必打的保险这套实验里面有很多操作是不可逆的尤其是磁盘分区、LVM调整、防火墙配置。一旦手滑把逻辑卷删了或者把关键配置文件改坏想手动恢复可能要花半小时以上有的甚至只能重装系统。我的习惯是分阶段打快照。以下三个节点是必打的第一个节点是虚拟机刚装完系统、配置好IP、完成软件源更新后。这个快照是干净基础环境后面任何实验搞崩了都能瞬间回到这个状态。第二个节点是每个实验开始前。新建一个用户、调整一个权限、改一份配置文件之前先拍快照比什么备份命令都靠谱。第三个节点是综合实验开始前。这时的系统已经装好各种服务包如果综合实验做砸了直接回滚到这里比重新装一遍服务快得多。快照不是改名字存下就完事最好在名字里写明用途比如“base_clean”“before_samba”。不然存了十几个快照过两周自己都分不清哪个是哪个。3. 核心实验逐项拆解与实操要点3.1 用户与权限管理实验命令之外的权限模型用户与权限管理是整套实验的重头戏。实验要求通常是创建用户、配置用户组、设置密码、修改文件归属、调整目录权限最后验证不同用户对文件的访问结果。咱们模拟一个实际场景服务器上要建立一个/public共享目录web组用户对它有读写权限dev组用户只能读其他用户完全不能访问。第一步创建用户组和用户。假设web组里有用户zhangsandev组里有用户lisigroupadd web groupadd dev useradd -g web zhangsan useradd -g dev lisi passwd zhangsan passwd lisi第二步批量建目录和设置组归属mkdir /public chown root:web /public chmod 2770 /public这里我要重点解释一下chmod 2770这个权限值。第一个2是特殊权限位表示SGID意思是任何用户在/public下创建的文件其属组自动继承为web组而不是创建者自己的主组。这在多人协作场景下非常有用。后面的770表示属主有rwx权限7421属组有rwx权限其他用户无任何权限。如果不加SGID会出现一个问题zhangsan在目录里创建了一个文件这个文件的属组是zhangsan自己的主组web没问题但如果lisi虽然是dev组的他或其他人创建文件时文件属组就变成了他自己的主组导致同组协作的其他人无法编辑。加上SGID之后这个坑直接绕过去。第三步验证。切换到zhangsan写文件、切换到lisi读文件、再切到一个普通用户测试拒绝访问su - zhangsan echo test /public/a.txt exit su - lisi cat /public/a.txt exit实验报告里经常要求解释“为什么某个用户访问被拒绝”这题考的就是对属主、属组、其他用户三套权限位的理解不是背命令能应付的。3.2 Shell脚本编程实验从手动到自动的分水岭Shell脚本实验是很多人的第一道坎因为它不再是“敲一条命令等一个结果”而是开始写逻辑。实验要求大体包含变量赋值、条件判断、循环、位置参数、函数。先看一个批量创建用户的经典脚本。这个脚本在实验报告里出现频率极高但它背后的逻辑通用性很强#!/bin/bash # batch_create_users.sh userfile/root/userlist.txt password123456 if [ ! -f $userfile ]; then echo 用户列表文件不存在: $userfile exit 1 fi while read username do if id $username /dev/null; then echo 用户 $username 已存在跳过 else useradd $username echo $password | passwd --stdin $username echo 用户 $username 创建成功 fi done $userfile这个脚本里包含了好几个考试爱考的知识点if判断文件是否存在、while循环逐行读取、命令执行结果的重定向与判断、管道给passwd传密码。实验报告里如果让你画出脚本执行流程图很多同学会卡在“用户已存在时跳过的逻辑分支”上其实就藏在这个脚本的if判断里。再强调一遍脚本执行方式的区别。bash xxx.sh是用解释器直接执行脚本脚本本身不需要执行权限当前环境不会读取脚本内修改的变量./xxx.sh会以当前用户身份执行脚本前提是脚本要有可执行权限source xxx.sh则是在当前Shell进程里执行脚本里定义的变量和修改会保留在当前环境中。考试里经常出现一个场景脚本里export了一个环境变量用source执行后echo能看到直接./执行后却看不到。这个考点就是考察两种执行方式对当前环境的影响。理解了这三者的区别Shell脚本实验基本不会丢分。3.3 Samba文件共享服务实验SELinux与防火墙的双重考验Samba实验是整个课程里最磨人的一个。它的配置本身不复杂复杂的是环境里总有两股力量在跟你作对SELinux和防火墙。实验场景通常是这样一台Linux服务器配置Samba共享目录/data/shareWindows客户端通过局域网访问实现跨平台文件交换。安装与配置流程如下。先装包yum install -y samba samba-client修改/etc/samba/smb.conf在末尾添加共享段[share] comment Shared Directory path /data/share browseable yes writable yes guest ok no配置Samba系统用户useradd -s /sbin/nologin smbuser smbpasswd -a smbuser chown -R smbuser:smbuser /data/share接着是很多人会挂掉的步骤放行SELinux。CentOS 7默认SELinux处于enforcing状态Samba要访问某个目录必须设置对应的布尔值setsebool -P samba_enable_home_dirs on setsebool -P samba_export_all_rw on如果用的不是普通共享目录而是一个新建的非默认路径还需要给目录打上samba共享文件类型的标签chcon -t samba_share_t /data/share然后是防火墙放行firewall-cmd --permanent --add-servicesamba firewall-cmd --reload最后启动服务并设置开机自启systemctl start smb systemctl enable smb systemctl start nmb systemctl enable nmb客户端的Linux挂载命令是mount -t cifs //192.168.100.10/share /mnt/share -o usernamesmbuser,password123456我在复现过程中故意走了一遍不配置SELinux的流程。结果非常典型服务正常启动、端口正常监听、smbclient本机还能看到共享但另一台机器一访问就被拒绝。这种“服务看起来很正常但就是连不上”的情况基本就是SELinux或防火墙在背后拦截。排查顺序一定要记牢先看服务状态再看端口再看SELinux最后看防火墙。3.4 综合实验小规模网站环境搭建课程的压轴实验通常是一个综合性的Web服务项目。常见要求是一台Linux服务器安装HTTPD或Nginx配置两个基于域名的虚拟主机分别对应不同站点目录并设置不同权限最后通过防火墙规则只对外开放80端口并写一个日常启动/停止服务的脚本。一个可参考的市级联式做法是先用yum install -y httpd装好Apache在/etc/httpd/conf.d/下新建两个配置文件使用VirtualHost区分不同域名。每个站点目录单独建用户和权限组一个站点适合普通浏览、目录只读另一个站点面向内容维护允许指定用户写入。随后在firewalld中放行http服务并拒绝SSH以外的高危端口对外访问。综合实验里面最容易翻车的地方是虚拟主机配置语法错误。执行httpd -t做语法检查直接把测试输出顶上去是减少后续麻烦的最快方式。改完配置之后还必须systemctl reload httpd很多人改完不重载服务导致新配置不生效排查半天才意识到。做完综合实验你基本可以把前面所有模块串成一条线用户权限管理服务于站点内容隔离网络配置保证客户端可达Web服务提供内容防火墙策略控制入口Shell脚本实现日常运维自动化。整套实验的价值在这个环节才真正体现出来。4. 常见问题排查与避坑实录4.1 SSH连接失败的排查路线SSH连不上是实验里最频繁出现的报障场景。遇到这个问题不要盲目重启虚拟机按照下面这个顺序一步一步排查。先看服务状态systemctl status sshd命令不存在或服务不存在先确认有没有装openssh-server。服务状态正常再看端口监听ss -tnlp | grep 22没有输出说明ssh服务可能没起来或者端口被改过。有监听但连不上优先检查防火墙firewall-cmd --list-all看22端口是否被放行没有就执行firewall-cmd --permanent --add-servicessh firewall-cmd --reload最后确认虚拟机的IP地址。很多同学用DHCP自动获取IP重启后IP变了终端工具里还填着旧地址自然连不上。建议在实验开始前就给虚拟机配置固定IP方法是在/etc/sysconfig/network-scripts/ifcfg-ens33里设置BOOTPROTOnone或static并指定IPADDR、NETMASK、GATEWAY、DNS1四个参数。4.2 Samba实验中最常见的隐形坑我把Samba实验单独列出来因为这个服务的踩坑率远高于其他实验。三个最典型的隐形坑如下。第一个是SELinux拦截。服务正常、端口通、Samba用户密码也正确但Windows客户端始终提示没有权限访问。十有八九是SELinux的问题。临时关闭SELinux可以用setenforce 0但实验里我建议用setsebool和chcon去正确放行既解决问题又能在实验报告里写出有技术含量的排查过程。第二个是防火墙只放行了SMB端口但没放行服务。firewalld里有两种放行方式一种是放行端口比如tcp 445另一种是放行服务比如samba服务。如果只是手动放行了端口SELinux相关的服务策略可能依然不生效建议直接使用firewall-cmd --add-servicesamba。第三个是workgroup不一致。Samba默认的workgroup是SAMBA或WORKGROUPWindows客户端的计算机工作组往往是WORKGROUP不一致会导致浏览列表里看不到服务器。不过这个问题在现代客户端里表现不明显因为直接输入IP地址访问不受浏览列表影响但在考试环境里如果要求通过“网络”页面浏览服务器这个配置必须对齐。4.3 Shell脚本的语法级离奇报错Shell脚本实验的报错往往不是难在语法本身而是难在执行环境差异。最常见的报错是/bin/bash^M: bad interpreter。这个报错一般是在Windows上编辑脚本后直接传到Linux执行惹的祸。Windows文本文件的换行符是回车加换行\r\n而Linux只认换行\n。vim里能看出来文件末尾每行可能有个^M符号。解决办法很简单用vim打开脚本在末行模式下执行set ffunix再保存即可。另一个高频报错是“Permission denied”。执行./script.sh时出现这个提示意味着脚本没有执行权限。解决办法是chmod x script.sh。但注意如果你用bash script.sh执行则不需要x权限因为bash直接读取文件内容。还有一类容易混淆的错误是if [ $var value ]里的空格问题。中括号两侧必须有空格缺少空格会导致脚本直接报预期的错误。这是新手写脚本时最容易忽略的细节。4.4 虚拟机网络不通的几个关键点实验中经常遇到虚拟机ping不通网关、终端工具连不上、apt或yum无法联网的情况。网络问题排查起来虽然繁琐但关键检查点就那么几个。第一个是虚拟机的网络模式。实验环境建议使用NAT模式NAT模式下虚拟机和宿主机在同一个私有网段宿主机联网正常即可不受物理网络环境影响。如果用的是桥接模式虚拟机需要占用真实局域网的IP环境里的路由器或交换机如果开了端口隔离立刻就会断网。不是桥接模式不能用而是要确认物理网络允许。第二个是网卡配置文件是否存在且正确。CentOS 7中接口名可能是ens33或eth0查看能否看到IP地址ip addr如果网卡正常但IP地址缺失手动编辑对应网卡配置文件后重启网络服务或直接用dhclient获取地址。第三个是DNS配置。配了IP地址也能ping通路由器但pip或yum无法解析域名基本就是DNS没配对。确认配置文件里存在可用的DNS地址如果临时调试可以直接echo nameserver 8.8.8.8 /etc/resolv.conf重启网络服务后进新配置。5. 把实验经验迁移到真实运维场景5.1 从课堂脚本到实用巡检工具Shell脚本实验里学的循环、判断、参数处理落到真实工作中最直接的应用是服务器巡检。一个环境中长期跑的任务往往是把基础命令组合成可复用脚本。比如写一个脚本先检查磁盘使用率超过多少就告警再检查关键服务进程是否存活最后把结果追加到当日日志文件。这个脚本的核心逻辑和课堂实验里的while循环加if判断一模一样只是把实验里的useradd换成了du、df、systemctl这些实际业务相关命令。真实环境里另一个高频需求是批量初始化新服务器创建新用户、配SSH密钥、装基础包、设置时区同步。这些操作单独执行很枯燥但只要能把课堂实验里学过的变量和循环迁移过来写成一个初始化脚本就能一次性处理多台机器。我见过不少从这套实验体系出来的同学第一份工作里被夸“脚本基本功扎实”靠的就是在校时把这些实验反复做到熟练。5.2 服务实验教会你的不只是配置Samba实验最大的价值不光是让你会写smb.conf而是帮你建立一套排查服务问题的思维框架。配置都正确、服务也开着出了问题先看端口、看SELinux、看防火墙、看日志。这套排查顺序在之后处理任何网络服务时都通用。再往深说一层Samba实验还逼你理解了跨平台文件共享的需求本质。Windows和Linux要交换文件Samba只是其中一种解决方案后续如果接触NFS、S3、对象存储你会发现它们解决的是同一个问题在不同场景下的变体。服务配置的知识会过时但这个“从需求出发选择方案”的思路不会过时。5.3 学习这套实验的正确姿势我的建议很简单不要只做一次尽量做两遍。第一遍跟着文档按部就班做一遍目标是跑通流程拿到正确结果。第二遍把文档合上只靠需求描述从头自己推演一遍遇到不会的再回来查。第二遍做起来会比第一遍慢但效果远好于第一遍。在实验记录方面我习惯把每条核心命令和关键输出截图放到一个按章节组织的文档里形成自己的命令速查手册。这套材料的价值在毕业后的工作里依然很大遇到类似场景翻出来就用比重新上网搜索高效得多。最后再分享一个我自己复现这套实验时的小技巧遇到搞不定的报错先自己尝试定位实在无解再把完整报错信息连同上下文一起搜索。很多同学遇到报错就只搜后半句英文忽略了前面的文件路径和行号结果搜了一堆不相关的内容。报错信息里最前面的定位信息往往比错误描述本身更关键。这套实验做到最后你锻炼出来的排查能力就是做运维、做开发都离不开的底层技能。