news 2026/9/9 7:32:36

三级Linux技术真题3操作题详解:从用户权限到LVM扩容的运维实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
三级Linux技术真题3操作题详解:从用户权限到LVM扩容的运维实战

全国计算机等级考试三级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.6,IP地址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,并确保文件系统识别。

第一步是新盘转PV:

pvcreate /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个PE,800MB就是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 "<h1>example</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 2>&1

这条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-1,IP是倒数第三列$NF-3,所以用$(NF-3)提取IP。awk、sort、uniq、sort -nr这条管道是日志分析的标准姿势,用熟了之后不管什么日志格式都能快速聚合。

6.2 防火墙限制IP的两种做法

找到高频攻击IP后,用firewalld阻断。CentOS 7默认用的是firewalld,命令如下:

firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=192.168.1.5 reject" firewall-cmd --reload

rich-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/secure,Apache找/var/log/httpd/access_log和error_log,系统整体看/var/log/messages,服务自身日志用journalctl -u 服务名。

第三步,用grep+awk+sort+uniq管道做聚合。grep负责过滤,awk负责取字段,sort+uniq -c+sort -nr负责统计排序,这个组合能解决90%的日志分析题。

第四步,根据结果执行应对操作,比如封IP、删旧日志、重启服务。

这套套路在真实运维里就是日常工作流,考试只是把它出成题目而已。备考时不用背太多命令,把这四条流程里的核心命令记熟,基本都能应对。

7. 备考心得与几个容易踩的坑

真题3这份卷子整体难度在三级Linux里算中等偏上,因为它把用户、存储、服务、脚本、日志五个核心方向全部串起来了。我做这份卷子最大的感受是:考试从来不是考单个命令,而是考你对整个运维技术栈的理解是不是线性的。

我自己备考时走过的弯路主要有三个,写出来给大家提个醒。

第一个坑是只刷选择题。选择题刷起来很爽,但操作题才是拉分项。三级Linux考试操作题占比高,而且每一道操作题都要求你把命令敲出来,不是选出来。我建议至少花70%的备考时间在终端里练操作题,别在选择题里陷太深。

第二个坑是不联系真实场景。比如LVM扩容这道题,看起来只是三条命令,但实际考试时你面对的分区表、文件系统状态都可能和题目描述有差异。备考时最好自己装一台虚拟机,创建几个大小不同的磁盘,反复演练“创建PV-VG-LV-扩容”全套动作,多练几次细节就刻在脑子里了。我这里提一个训练方法:在虚拟机里故意把卷组空间吃满,然后新增磁盘、扩展卷组、再扩容LV和文件系统,这一套流程完整做完,你就比百分之八十的考生强了。

第三个坑是不做时间分配。操作题90分钟看起来够用,但如果你在某一题上卡住,后面就容易慌,越慌越容易丢分。我的经验是:先把所有操作题通读一遍,大概判断每道题难度,先从自己有把握的题开始做,最后再啃不熟练的。这样至少保证基本分拿到手,不会因为某道题卡壳导致整场崩盘。考试不是要拿满分,是把该拿的分都拿到。

最后再分享一个小技巧:如果考试环境里有man手册,千万别忘了用。忘了参数查man,忘了配置文件的路径也可以查man,这个工具在考场上就是免费的参考答案。平时练习时就养成习惯,遇到不确定的命令先man一下,长期积累下来,命令记忆会牢固很多。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/9 7:31:44

行星齿轮转盘机构整机设计流程与避坑指南

行星转盘机构在自动化设备里属于出现频率很高的非标单元。不管是转盘装配机、多工位分度台&#xff0c;还是检测设备里的回转承载台&#xff0c;结构逻辑基本都是同一套&#xff1a;电机驱动、齿轮减速、转盘输出。这次要拆解的项目是一个“太阳轮 行星齿轮”构成的旋转台整机…

作者头像 李华
网站建设 2026/9/9 7:29:08

从SVA到符号testbench:验证意图的另一种表达方式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/9 7:27:19

从技能盘点开始,构建个人技能树与技能组合优势

1. 别急着收藏干货&#xff0c;先把“skills”这件事拆明白这些年我越来越觉得&#xff0c;大家嘴里常说的“skills”&#xff0c;其实是个被严重低估又严重误读的词。很多人一提技能&#xff0c;第一反应就是“我会 Python”“我会做 PPT”“我会剪辑”&#xff0c;好像技能就…

作者头像 李华
网站建设 2026/9/9 7:24:11

RWA赛道全面拆解:从美债代币化到房地产碎片化

RWA&#xff08;Real World Assets&#xff0c;现实世界资产代币化&#xff09;最近两年应该是区块链行业里讨论度最高的叙事之一&#xff0c;连很多传统金融圈的朋友也开始盯着链上的美国国债产品看。简单说&#xff0c;RWA就是把现实世界的资产——国债、信贷、黄金、房地产、…

作者头像 李华
网站建设 2026/9/9 7:22:37

AQS队列机制深度解析:从Node到CLH变体

1. 从上一章的尾巴说起&#xff1a;state与队列的关系上一章我们把AQS的顶层设计捋了一遍&#xff0c;知道了它内部维护了一个volatile int state&#xff0c;通过CAS对state做修改来实现锁的语义。但当时留了个问题没展开&#xff1a;如果CAS失败&#xff0c;线程去哪儿排队&a…

作者头像 李华