全国计算机等级考试三级Linux技术的真题说难不难说简单也真不简单。我当年考的时候最直观的感受是——它考的压根不是死记硬背的命令而是你到底有没有像一个Linux运维工程师一样思考问题。尤其是“真题3”这种卷子操作题部分几乎就是一个小型公司服务器运维现场的翻版建用户、扩磁盘、配服务、写脚本、查日志一套流程下来你的运维技术栈到底扎实不扎实一目了然。这套题适合谁一是正在备考三级Linux技术、想拿证的同学二是已经在做运维但基础不牢、想系统补课的朋友。如果你是零基础想直接刷题我的建议是先看完命令再回来做不然会卡在“每个字都认识但不会操作”的阶段。这篇文章我就拿真题3作为对象把每一道操作题怎么解、为什么这么解、踩过哪些坑全部摊开讲清楚。1. 这套卷子的底细三级Linux到底在考什么1.1 试卷结构不是重点重点是你有没有完整的技术栈三级Linux技术考试结构上一般分选择题和操作题操作题是大头。选择题大概覆盖Linux基础命令、文件系统、进程管理、网络配置、Shell基础这些常识难度接近运维入门笔试。真正拉开差距的是操作题它通常给你一个模拟的生产环境要求你用命令行完成一系列真实任务。真题3的整体设定我印象很深一家公司有一台CentOS 7.6服务器管理员离职得比较仓促留下了一堆“半成品”配置。你的任务就是在这个环境下完成用户权限整理、磁盘扩容、Web服务上线、备份脚本编写、安全日志排查。这不就是运维入职第一个月的活儿吗考试只是把它压缩到了90分钟。这里我建议大家备考时不要只盯着“背命令”。命令是工具真正要建立的是完整的Linux运维技术栈用户与权限、存储管理、服务管理、Shell脚本、日志与安全这五个模块就是三级考试的骨架。你把这五块串起来真题3这种卷子其实是送分题。1.2 真题3的操作题场景还原我先还原一下真题3的操作题环境后续所有解析都围绕这个场景展开服务器CentOS 7.6IP地址192.168.10.10已安装常用工具。 任务一整理用户与共享目录权限。 任务二为/data目录扩容新增一块1GB虚拟磁盘/dev/sdb需要基于LVM完成。 任务三为域名www.example.local配置Apache虚拟主机网页根目录为/var/www/example。 任务四编写定时备份脚本备份/etc目录到/backup保留最近7天。 任务五排查SSH登录日志找到异常IP并做限制。这套任务非常典型每个任务都对应生产环境中的一类高频操作。下面我一个一个拆。2. 操作题一用户、组与共享目录权限别小看这道基础题2.1 题目要求与完整解题步骤任务一的具体要求是这样的创建用户组dev创建用户zhangsan和lisi并加入dev组创建/project目录作为项目共享目录dev组成员可读写且在该目录下新建的文件自动属于dev组同时让dev组用户执行systemctl restart httpd命令时不需要输入密码。先做用户和组的部分命令如下groupadd dev useradd -G dev zhangsan useradd -G dev lisi这里要特别说明-G参数是把用户加入附加组不加-a的话会覆盖用户原有的附加组。在考试环境里新用户本来就没别的组影响不大但实际运维中我习惯写useradd -G dev -a zhangsan用-a追加避免把用户踢出其他组。这个习惯在真实服务器上非常关键考试时写全-a也不会错。然后创建共享目录并设置权限mkdir /project chown :dev /project # 把属组改为dev chmod 2770 /project # setgid位 组读写 无其他权限这里的关键是数字权限中那个2。2是setgid位。对目录而言一旦设置了setgid任何人在该目录下新建的文件/目录其属组都会自动继承目录的属组而不是当前用户的主组。这正是“新建文件自动属于dev组”的标准解法。为了保险还可以在/etc/skel或者用户环境里设置umask但在这个场景里只要目录有setgid配合dev用户的主组或附加组一致就能满足绝大多数情况。如果题目还要求“文件对其他用户不可见”那chmod 2770已经做到了——非dev组的用户对/project没有写权限也没有执行权限进都进不去。2.2 sudo免密配置的隐藏考点让dev组用户免密重启httpd需要修改sudoers文件。强烈建议用visudo编辑不要直接改/etc/sudoers因为在语法错误时会提示并阻止保存这个保护机制救过我好几次。在/etc/sudoers.d/目录下新建文件比如/etc/sudoers.d/dev-httpd填入%dev ALL(root) NOPASSWD: /usr/bin/systemctl restart httpd注意几件事%dev表示dev组如果只写dev不加%那就成了用户名语法不对。后面的命令路径必须是绝对路径最好用which systemctl确认一下CentOS 7里通常是/usr/bin/systemctl。NOPASSWD:后面没有空格到命令结束如果中间有逗号表示多个命令免密。如果题目要求“可以重启所有服务但不能改密码”就写NOPASSWD: /usr/bin/systemctl这样范围更宽但在安全要求严格的场景不建议。这道题很多人丢分是因为漏了setgid位或者是sudoers语法写错。记住visudo自带语法检查加上之后可以先用sudo -l -U zhangsan验证一下授权是否生效。我用这个命令排查过很多次“为什么授权了还是不能执行”的问题基本都是命令路径不匹配。3. 操作题二LVM磁盘扩容计算题是重头戏3.1 LVM创建与挂载的完整流程任务二是这块新硬盘/dev/sdb有1GB要求使用LVM卷组名vg01逻辑卷lv_data初始200MB挂载到/data目录文件系统xfs。后续数据量增大需要把lv_data在线扩容到800MB并确保文件系统识别。第一步是新盘转PVpvcreate /dev/sdb vgcreate vg01 /dev/sdb lvcreate -L 200M -n lv_data vg01 mkfs.xfs /dev/vg01/lv_data mkdir /data mount /dev/vg01/lv_data /data这里有个小细节分区不是必须的。如果题目给的是整块磁盘可以直接pvcreate不需要先fdisk分区。但如果题目明确说“创建分区/dev/sdb1”就要用fdisk先分区再pvcreate /dev/sdb1。真题里通常直接给整块盘少写一步对考试不影响。格式化xfs时要注意CentOS 7默认文件系统是xfs而xfs不支持直接缩容只支持扩容。如果要缩容就得用ext4配合resize2fs。真题3考的是扩容xfs没问题但如果你实际工作中遇到缩容需求千万别拿xfs硬来先备份、重建、再拷贝。挂载方面如果想开机自动挂载需要写/etc/fstab。考试如果要求“重启后依然生效”一定要追加一行/dev/vg01/lv_data /data xfs defaults 0 0写fstab时我个人的习惯是用UUID而不是设备路径因为设备名可能在重启后变化。但考试环境一般不会变而且题目没要求UUID别把时间花在blkid查询上直接写设备路径反而稳妥。3.2 扩容计算与在线扩容的命令选择扩容到800MB是关键题很多人直接执行lvextend -L 800M结果看到逻辑卷变成800MB但df一看/data还是200MB就懵了。原因很简单lvextend只扩展了逻辑卷本身文件系统还没扩大。正确步骤是lvextend -L 800M /dev/vg01/lv_data xfs_growfs /data如果你用的是ext4第二步应该是resize2fs /dev/vg01/lv_data。这里就是xfs和ext4最大的区别之一xfs在线扩容用xfs_growfs后面跟挂载点ext4用resize2fs后面跟设备路径。每年都有人把这个搞混。计算方面如果题目问“需要多少个PE”而卷组的PE大小是4MB那么200MB就是50个PE800MB就是200个PE。创建逻辑卷时也可以直接用-l 50来指定PE个数效果等同于-L 200M。这类计算题常出现记住公式PE数量 容量 / PE大小。扩容这一步我特别提醒在扩容前先确认vg01有足够的空闲空间用vgs查一下。如果只有1GB的盘已经用了200MB扩到800MB是够的但如果题目改成扩到1.2GB那就超出了卷组总容量需要先扩PV比如vgextend vg01 /dev/sdc再lvextend。考试不会出这种连环坑但实际运维中“卷组空间不足”是最常见的扩容失败原因。还有一个槽点在线扩容前要做备份。虽然xfs_growfs和resize2fs都比较安全但磁盘操作容错率低一旦断电或者文件系统损坏哭都来不及。考试环境没这个问题但工作里一定要先快照或备份。4. 操作题三Apache虚拟主机配置别栽在SELinux上4.1 基于域名的虚拟主机配置步骤任务三要求为www.example.local配置虚拟主机网页根目录/var/www/example监听80端口日志单独存放。第一步确认Apache已安装yum install -y httpd systemctl enable httpd systemctl start httpd然后在/etc/httpd/conf.d/下新建配置文件比如example.conf内容如下VirtualHost *:80 ServerName www.example.local DocumentRoot /var/www/example ErrorLog /var/log/httpd/example_error.log CustomLog /var/log/httpd/example_access.log common /VirtualHost创建目录并放一个测试页mkdir -p /var/www/example echo h1example/h1 /var/www/example/index.html systemctl restart httpd配置文件的放置位置是有讲究的。CentOS的Apache主配置httpd.conf里默认有Include conf.d/*.conf这一段所以在conf.d目录下放独立配置文件是标准做法。考试时要理解这个加载机制否则你改了conf.d里的配置却没生效会怀疑人生。4.2 最常见的问题目录权限和SELinux这道题大家丢分最多的不是虚拟主机语法而是访问不了。访问不了通常是两个原因。第一个是目录权限。/var/www/example如果对other没有读和执行权限Apache进程以apache用户运行就读取不了。要确保chown -R apache:apache /var/www/example chmod -R 755 /var/www/example第二个就是SELinux。CentOS 7默认SELinux是enforcing状态他会在Apache层面拦截文件读取。判断是不是SELinux的问题可以用getenforce如果是Enforcing再看httpd相关的布尔值getsebool -a | grep httpd setsebool -P httpd_can_network_connect on但更常见的坑是/tmp下目录当网站根目录SELinux会拦。标准解决方法有两种要么把目录移到/var/www下要么用semange fcontext修改文件上下文。考试中如果遇到访问被拒绝第一反应先查SELinux这是三年真题都爱埋的坑。 提示如果题目没有明确要求关闭SELinux别用setenforce 0糊弄这不代表问题解决了。正确做法是调整SELinux布尔值或文件上下文这也是真实运维的规范操作。另外测试虚拟主机是否生效可以在服务器本机用curl -H Host: www.example.local http://127.0.0.1或者直接改本地/etc/hosts把域名指向服务器IP再用浏览器访问。考试环境一般只要求curl看返回内容这个步骤要熟练。5. 操作题四备份脚本与定时任务写脚本要能跑、能看清5.1 一个合格的备份脚本该怎么写任务四要求写脚本备份/etc目录到/backup保留7天。这题看起来简单但拿满分不容易因为评分点不止“能备份”还包括“备份文件命名规范”“老备份被清理”“脚本可执行”。我的标准写法是#!/bin/bash DATE$(date %Y%m%d%H%M) BACKUP_DIR/backup if [ ! -d $BACKUP_DIR ]; then mkdir -p $BACKUP_DIR fi tar czf $BACKUP_DIR/etc_$DATE.tar.gz /etc find $BACKUP_DIR -type f -mtime 7 -name *.tar.gz -exec rm -f {} \;几个细节date命令的格式是%Y四位年份%m两位月份%d两位日期%H小时%M分钟这能保证文件名按时间排序不会互相覆盖。使用tar czf其中z表示gzip压缩这能显著减小归档体积。如果题目要求“打包但不压缩”就去掉z。find中使用-mtime 7表示超过7天的文件要注意7和7的区别。7是找7天以前的7是刚好7天。实操中我习惯写成7含义是保留最近7天内含第7天的文件。find的-exec rm -f {} ;是安全的删除方式注意结尾必须有分号且分号前有反斜杠转义这是Shell的语法死穴漏一个都会报错。脚本开头要写#!/bin/bash然后chmod x backup.sh否则定时任务执行不了。脚本写完之后建议先手动执行一遍确认tar包能生成、find能删掉旧文件。这一步非常重要很多考生脚本逻辑没问题但忘了chmod x或者忘了解释器路径导致cron跑不起来白白丢分。5.2 定时任务的写法与排查思路定时任务用crontab -e编辑新增一行0 2 * * 0 /root/backup.sh /var/log/backup_cron.log 21这条cron的含义每周日第7列是0表示周日凌晨2点0分执行备份脚本并把标准输出和错误信息追加到日志文件。crontab的五列分别是分、时、日、月、周这个顺序非常重要写反的人非常多。还有一个细节周字段0和7都表示周日写成0和7都对但建议统一用0。排查定时任务有没有执行是这道题常见的隐藏考法。如果脚本没跑先看cron服务状态systemctl status crond再看日志grep backup /var/log/cron如果在cron日志里看到命令执行了但脚本没效果多半是脚本里的环境变量问题。定时任务的PATH非常精简可能只有/usr/bin:/bin而脚本里如果用了没有绝对路径的命令比如/usr/local/bin下的工具就会报command not found。解决方法是脚本开头统一加上export PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin我写脚本时都会加这一行不是为了好看是真被坑过。6. 操作题五安全日志排查与异常IP封锁考察的是思路6.1 用journalctl和/var/log/secure找到异常登录IP任务五要求排查最近SSH登录失败记录找出异常IP并做限制。这道题考的是日志分析逻辑而日志文件的选择很关键。CentOS 7的SSH认证日志写在/var/log/secure里记的是authpriv这个facility。你可以直接用grep Failed password /var/log/secure这会输出所有密码认证失败的记录包括用户名和来源IP。但Faild password只覆盖密码错误的情况如果SSH配置了公钥认证或者有人尝试不存在的用户信息可能字段不同最好再搜一下grep -i failed\|invalid user /var/log/secure如果系统启用了systemd-journald也可以直接用journalctl看journalctl -u sshd --since 2024-01-01 | grep Failed两种方式都可以。考试往往只问你“怎么看失败记录”这两种都要会。但在真实场景中/var/log/secure是排查SSH爆破的第一优先文件journalctl更偏全量日志各有优势。找出IP之后按失败次数排序grep Failed password /var/log/secure | awk {print $(NF-3)} | sort | uniq -c | sort -nr前面我解释下这条命令的数据逻辑。SSH失败日志格式类似Jan 1 02:00:00 host sshd[1000]: Failed password for invalid user root from 192.168.1.5 port 50000 ssh2从这个字符串数一下端口是倒数第二列$NF-1IP是倒数第三列$NF-3所以用$(NF-3)提取IP。awk、sort、uniq、sort -nr这条管道是日志分析的标准姿势用熟了之后不管什么日志格式都能快速聚合。6.2 防火墙限制IP的两种做法找到高频攻击IP后用firewalld阻断。CentOS 7默认用的是firewalld命令如下firewall-cmd --permanent --add-rich-rulerule familyipv4 source address192.168.1.5 reject firewall-cmd --reloadrich-rule是firewalld里比较高级的规则可以精确到源IP和动作。reject是明确拒绝比drop多返回一个拒绝信息如果想更低调不想暴露端口状态可以用drop。这两者的区别也是考试常考的点。另一种做法是iptables虽然CentOS 7推荐用firewalld但底层还是iptables框架直接执行iptables -A INPUT -s 192.168.1.5 -p tcp --dport 22 -j DROP service iptables save注意CentOS 7默认没装iptables-services直接service iptables save会报错。如果要“保存并重启后依然生效”要么装iptables-services要么用firewalld的permanent参数。考试中一般不会强制iptables用firewalld更贴合CentOS 7的官方生态。 提示更完整的做法是把常用成功登录和失败登录都查一遍判断是有针对性的爆破还是无差别扫描然后决定封IP的粒度。但考试题目通常不会考这么深能把命令写对就行。6.3 日志分析类题目的通用套路日志类题目在三级Linux里很常见不一定是SSH也可能是httpd的错误日志、/var/log/messages里的内核异常。我总结了一套通用套路第一步判断题目的目标是什么。是想找“哪条命令执行失败”还是想找“哪个IP访问最多”还是想找“服务为什么没起来”。第二步选择正确的日志文件。SSH找/var/log/secureApache找/var/log/httpd/access_log和error_log系统整体看/var/log/messages服务自身日志用journalctl -u 服务名。第三步用grepawksortuniq管道做聚合。grep负责过滤awk负责取字段sortuniq -csort -nr负责统计排序这个组合能解决90%的日志分析题。第四步根据结果执行应对操作比如封IP、删旧日志、重启服务。这套套路在真实运维里就是日常工作流考试只是把它出成题目而已。备考时不用背太多命令把这四条流程里的核心命令记熟基本都能应对。7. 备考心得与几个容易踩的坑真题3这份卷子整体难度在三级Linux里算中等偏上因为它把用户、存储、服务、脚本、日志五个核心方向全部串起来了。我做这份卷子最大的感受是考试从来不是考单个命令而是考你对整个运维技术栈的理解是不是线性的。我自己备考时走过的弯路主要有三个写出来给大家提个醒。第一个坑是只刷选择题。选择题刷起来很爽但操作题才是拉分项。三级Linux考试操作题占比高而且每一道操作题都要求你把命令敲出来不是选出来。我建议至少花70%的备考时间在终端里练操作题别在选择题里陷太深。第二个坑是不联系真实场景。比如LVM扩容这道题看起来只是三条命令但实际考试时你面对的分区表、文件系统状态都可能和题目描述有差异。备考时最好自己装一台虚拟机创建几个大小不同的磁盘反复演练“创建PV-VG-LV-扩容”全套动作多练几次细节就刻在脑子里了。我这里提一个训练方法在虚拟机里故意把卷组空间吃满然后新增磁盘、扩展卷组、再扩容LV和文件系统这一套流程完整做完你就比百分之八十的考生强了。第三个坑是不做时间分配。操作题90分钟看起来够用但如果你在某一题上卡住后面就容易慌越慌越容易丢分。我的经验是先把所有操作题通读一遍大概判断每道题难度先从自己有把握的题开始做最后再啃不熟练的。这样至少保证基本分拿到手不会因为某道题卡壳导致整场崩盘。考试不是要拿满分是把该拿的分都拿到。最后再分享一个小技巧如果考试环境里有man手册千万别忘了用。忘了参数查man忘了配置文件的路径也可以查man这个工具在考场上就是免费的参考答案。平时练习时就养成习惯遇到不确定的命令先man一下长期积累下来命令记忆会牢固很多。