简介:这份题库面向准备UOS运维系统运维工程师相关认证与岗位面试的学习者,围绕Linux服务配置、系统管理与自动化运维等常见考点组织题目,可用于日常自测、考前冲刺和知识盲区排查。压缩包内含1个doc文档,大小约61KB,以选择题、多选题和判断题为主,题目附带参考答案,便于快速核对。内容覆盖NFS服务端/etc/exports配置、Apache全局配置与默认80端口、sshd禁用用户及22端口、KVM虚拟机删除与libvirtd守护进程、DNS 53端口、Ansible自定义模块与jinja模板、Docker创建nginx容器及目录挂载、NTP服务器添加、FTP匿名登录、数据库服务器与表关系、find按文件名查找、源码包编译工具make与gcc等。已有2038人学习,适合通过集中刷题梳理服务配置命令、端口号与模块语法,定位薄弱环节后再回到实验环境验证,提升排错与应试的准确度。
1. 一张运维考卷的知识地图:从端口号到虚拟化的六个抽屉
运维岗的笔试卷子有个共同点:单题都不深,但覆盖面极宽。最新这套 UOS 运维系统运维工程师题库就是典型样本——一张卷子里同时出现了 NFS 的/etc/exports、Ansible 的自定义模块与 jinja 模板、KVM 的 virsh 子命令、Apache 的配置文件路径、sshd 的DenyUsers语句、DNS 与 Telnet 的端口号、Docker 的-v挂载顺序、数据库聚合函数和find的-name选项。看着零散,其实能归成六个抽屉:网络服务与端口、存储与虚拟化、Web 服务与证书、自动化与容器、数据库与文件系统,以及横跨所有模块的路径与端口记忆。这幅地图适合已经上手过 Linux、正在准备运维岗笔试的人;如果你只会敲命令却说不出配置落在哪个文件,那它正好是查漏补缺的起点。
2. 网络服务与端口:sshd、DNS、NTP、FTP 的配置落点
这一章是整个题库里重复率最高的部分,因为它同时考三件事:服务用哪个配置文件、配置项长什么样、以及默认端口是多少。运维岗的面试官和出题人普遍默认「端口号是基本功」,所以哪怕你答对了DenyUsers的语法,端口写错一样扣分。把这一章当成一张对照表来背,比零散记题效率高得多。
2.1 sshd:登录控制与监听端口
sshd 的主配置文件是/etc/ssh/sshd_config,注意它是sshd_config而不是ssh_config——后者是客户端配置,一字之差经常被当成同一个东西。禁止某个用户远程登录,用的是DenyUsers tom这条语句,关键词是复数形式DenyUsers;题库里那个长得很像的DenyUser tom是干扰项,OpenSSH 根本不认。同理还有AllowUsers,用于白名单放行。
这两类语句的处理顺序是固定规则:先匹配DenyUsers,再匹配AllowUsers,然后是DenyGroups,最后是AllowGroups。这条顺序解释了为什么一个用户同时出现在两个列表里时会被拒绝——拒绝的判断先跑。改完配置文件不要直接重启服务,先用sshd -t做语法校验,通过了再重启,能省掉一次远程连接被自己掐断的血泪经验。
# /etc/ssh/sshd_config 中常见的几行改动 Port 22 # 监听端口,改动后防火墙与安全组要同步放行 PermitRootLogin no # 禁止 root 直接远程登录 DenyUsers tom # 拒绝 tom 登录(注意是复数 DenyUsers) AllowUsers ops01 ops02 # 白名单,一旦启用,未列出的账号全部被拒 PasswordAuthentication yes # 密码登录开关,按安全要求调整 # 改完先校验语法,再重启 sshd -t && systemctl restart sshd上面这段里,Port决定监听端口,题库中 sshd 的默认端口答案就是 22;PermitRootLogin控制 root 能否直接登录;DenyUsers与AllowUsers是互斥感很强的一对,实际使用中更推荐只用白名单,因为「默认拒绝、显式放行」比「默认放行、逐个拉黑」更难出漏洞。sshd -t是语法检查,失败时它会直接告诉你出错行号,比看journalctl -u sshd的报错更快。
提示:改了
Port之后如果连不上,先确认防火墙规则和semanage port的端口标签是否同步放行,这两处是翻车高发区。
2.2 DNS 与端口表:一张必须默写出来的对照表
DNS 的默认端口是 53,同时监听 TCP 与 UDP:UDP 用于常规查询,TCP 用于区域传送和超长响应。题库里把 53 和 80、69 放在同一个选项组里,考的就是你能不能一眼分开。顺带把常用端口一次性捋清楚,表比口诀可靠:
| 服务 | 默认端口 | 协议 | 常见记错点 |
|---|---|---|---|
| SSH | 22 | TCP | 与 Telnet 的 23 相邻,容易串位 |
| Telnet | 23 | TCP | 题库把它写成 20,是典型错误项 |
| FTP 控制 / 数据 | 21 / 20 | TCP | 20 只在主动模式下用于数据传输 |
| DNS | 53 | TCP + UDP | 与 HTTP 的 80 混淆 |
| TFTP | 69 | UDP | 同为 UDP,与 53 容易混 |
| HTTP | 80 | TCP | Apache 默认监听端口 |
| HTTPS | 443 | TCP | 与 80 成对记忆 |
| MySQL | 3306 | TCP | 与 1433 常被张冠李戴 |
| NTP | 123 | UDP | 时间同步,别记成 132 |
| SMTP | 25 | TCP | 邮件发送 |
客户端侧的解析配置是/etc/resolv.conf,里面用nameserver指定 DNS 地址;服务端侧的域名文件、区域文件属于另一套内容,复习时不要把两者混在一个页面里。题库里还有一道题问「DNS 是不是为基于 TCP/IP 的网络提供主机名到 IP 地址的解析系统」,答案是肯定——它强调的是「域名 ↔ IP」的双向映射能力,而不只是单向查询。
2.3 NTP 与 FTP:时间同步和匿名访问的两个细节
NTP 这一块,题库问的是「如何手动添加一台新的 NTP 服务器」,答案落在add server上。这个选项描述的其实是两条路径:一是在配置文件里增加一行server记录并重启服务,二是在运行时用chronyc add server动态追加。两种方式都能生效,但前者持久、后者临时,考试按选项选,实操按场景选。
# 持久方式:写入 /etc/chrony.conf server 203.0.113.10 iburst # iburst 表示启动时快速发一组包,加快首次同步 # 生效与验证 systemctl restart chronyd chronyc sources -v # 看当前源列表和状态标记 chronyc tracking # 看系统时钟偏移、层级、参考源 chronyc activity # 看在线源数量iburst这个参数值得单独记:不加它,首次同步可能要等几分钟;加上之后启动即连发四个包,收敛快得多。chronyc sources -v里每行前面的^*表示当前选中的同步源,^-表示备选,^?表示不可达——这三个符号看懂了,时间同步的排查基本就不用求人。
FTP 部分最容易出错的是匿名账号名。题库给的标准答案是guest,而在真实的 vsftpd 环境里,匿名登录常用的账号是ftp或anonymous,密码通常填任意邮箱格式即可。这不是题库写错,而是不同系统对匿名映射的默认值不同;复习时按题库口径记答案,实操时用ftp或anonymous去试,两个都留着才不吃亏。
至于「把用户限制在主目录」,关键配置是chroot_local_user=YES搭配chroot_list_file,指向一个记录例外用户名的文件。题库里那道判断题说「需要将用户名放在/etc/vsftpd」,答案是错——/etc/vsftpd是配置目录,用户名要写进chroot_list_file指定的那个列表文件里,目录和文件是两回事。
3. 存储与虚拟化:NFS 共享目录和 KVM 的生命周期动词
存储与虚拟化这两块在题库里的占比不高,但每道题都直指一个具体的配置文件或命令动词,属于「会就是会、不会编不出来」的类型。NFS 考的是共享定义写在哪、选项怎么配;KVM 考的是 virsh 那组动词各自代表什么语义。把这两块放在一起复习,是因为它们的排查思路一致:先看服务状态,再看定义文件,最后验证实际效果。
3.1 NFS:/etc/exports 的写法与生效链路
配置 NFS 服务端,主要改的文件是/etc/exports。题库第一题就在问这个,四个选项里只有它是共享定义文件,其余几个是不同发行版的启动脚本路径,属于纯粹的干扰项。文件格式是「共享目录 + 允许的客户端 + 括号内的选项」,三段之间用空格分隔,括号要紧贴客户端地址,中间不能有空格,这是格式上最常见的坑。
# /etc/exports:目录 + 允许访问的网段 + 括号内的权限选项 /data 192.168.10.0/24(rw,sync,no_root_squash) /backup 192.168.10.50(ro,sync) # 重新加载共享定义(比 restart 更平滑) exportfs -arv # 在客户端或服务端本机验证共享是否可见 showmount -e 192.168.10.10参数逐个说明:rw表示读写,对应的ro是只读;sync表示数据先落盘再回应客户端,安全性高但性能略低,异步的async相反;no_root_squash表示客户端 root 保留 root 身份,慎用,默认的root_squash会把客户端 root 映射成匿名用户,更安全。exportfs -arv里的-a是全部、-r是重新读取、-v是显示过程,三条合起来比直接重启服务更少中断现有连接。showmount -e后面跟服务端地址,输出的是该服务端当前对外暴露的共享列表,排查「客户端挂载失败」时先跑这一条,能立刻分清是共享没发出来还是网络不通。
注意:改完
/etc/exports不执行exportfs -r是不会生效的,很多人改完文件就去客户端挂载,看到报错以为是权限问题,其实是共享根本没重载。
3.2 KVM:virsh 动词里藏着的语义差别
KVM 这块题库考了两道:一道问删除虚拟机的命令,一道问守护进程。删除虚拟机的正确答案是virsh undefine server01,而选项里的virsh destroy是「强制关机」而不是「删除」。这两个动词的语义差别,是整个虚拟化章节里最容易翻车的地方。
virsh list --all # 列出全部虚拟机,含已关机状态 virsh start server01 # 开机 virsh shutdown server01 # 优雅关机,依赖 guest 内 acpid virsh destroy server01 # 强制断电,等价于拔电源,定义仍保留 virsh undefine server01 # 删除虚拟机定义(配置文件),磁盘默认保留 virsh undefine server01 --remove-all-storage # 连磁盘文件一起删除 virsh dominfo server01 # 查看状态、内存、vCPU 等概要把上面几行读一遍会发现一个规律:destroy管的是电源状态,undefine管的是定义是否存在。虚拟机被undefine之后就再也list不到了,但磁盘镜像还躺在存储池里——这正是很多人以为「删干净了」结果存储被占满的原因。要彻底清理,得加--remove-all-storage,或者手动去存储池目录删镜像文件。
守护进程那道题,答案是libvirtd。virsh是客户端命令,libvirt是库的名字,libvirtd才是那个常驻的守护进程,三者只差一两个字母,属于典型的「眼熟但记不牢」。验证方式很直接:
systemctl status libvirtd # 守护进程状态,起不来时 virsh 会报连接失败 systemctl is-active libvirtd # 只输出 active / inactive,适合脚本判断如果virsh list报「failed to connect to the hypervisor」,先看libvirtd是不是没起,再看当前用户是否在libvirt组里——这两个原因占了绝大多数。题库里那道题只问进程名,但真正排障时这两步是连在一起的,一起记比分开背更牢。
3.3 Apache:三层配置与站点名指令
Apache 的配置在题库里出现了三次,分别问全局配置文件、主配置文件、以及指定站点名的指令。看起来矛盾,其实是因为选项里同时掺了 Debian 系和 RHEL 系的路径:/etc/apache2/apache2.conf是 Debian/Ubuntu 系的主配置,/etc/httpd/conf/httpd.conf是 RHEL/CentOS 系的主配置,/etc/apache2/ports.conf专门放监听端口,/var/www/html/index.html是默认首页而不是配置文件。考试按题目给出的环境选,复习时把两套路径并列记住,比记单一路径更抗变。
# RHEL 系主配置 /etc/httpd/conf/httpd.conf(Debian 系对应 /etc/apache2/apache2.conf) ServerRoot "/etc/httpd" # 服务根目录,日志与模块的相对路径基准 Listen 80 # 监听端口,默认 80 ServerName web.internal:80 # 站点名,用于区分虚拟主机与生成重定向地址 DocumentRoot "/var/www/html" # 站点文件根目录,和 ServerName 不是一回事 <Directory "/var/www/html"> AllowOverride None # 是否允许 .htaccess 覆盖配置 Require all granted # 访问控制,授权所有来源 </Directory>ServerName和DocumentRoot这对概念极易混:前者回答「这个站点对外叫什么名字」,后者回答「文件放在哪个目录」。题库里问「用来指定该 Web 服务器的站点名」,答案是ServerName;问文件根目录才是DocumentRoot。另外ServerAdmin是管理员邮箱、ServerRoot是服务安装根目录,四个Server*指令排在一起就是典型的混淆设计,记忆时按「名字—目录—邮箱—根」的顺序对应。
监听端口那题也要留意:题库里有一道说 Apache 默认监听端口是 8080,另一道说主配置是httpd.conf,两题的环境描述不同。标准 HTTP 的默认端口是 80,8080 通常作为备用或反向代理端口出现,别把「常见」当「默认」。
3.4 证书:openssl 与 ssh-keygen 的分工
「做安全的 Web 主机,用哪个命令生成私钥和证书文件」,答案是openssl。干扰项里ssh-keygen生成的是 SSH 密钥对(id_rsa/id_rsa.pub那一套),用于免密登录和主机认证,和 Web 站点的 TLS 证书不是一回事;md5sum是校验工具,keytool面向 Java 密钥库。这四个放在一起考,考的就是「密钥用途」这个概念。
# 一条命令同时生成 2048 位私钥与自签证书 openssl req -x509 -newkey rsa:2048 -nodes \ -keyout /etc/pki/tls/private/web.key \ -out /etc/pki/tls/certs/web.crt \ -days 365 -subj "/CN=web.internal"参数拆开看:-x509表示直接输出自签证书而不是证书请求;-newkey rsa:2048表示新建一把 2048 位 RSA 私钥;-nodes表示私钥不加密存储,方便服务自动读取,代价是私钥文件权限必须收紧到 600;-days 365是有效期;-subj "/CN=..."直接指定主题,省掉交互式问答,适合脚本化。生成的.key是私钥、.crt是证书,两者配对使用,Apache 里分别对应SSLCertificateKeyFile与SSLCertificateFile。
4. 自动化、容器与数据库:Ansible 三件套和 Docker 挂载
这一章的三个主题在真实工作里经常一起出现:用 Ansible 批量改配置,用 Docker 跑服务,用数据库存结果。题库把它们放在同一份卷子里,说明出题人默认运维岗需要一条从「批量配置」到「服务运行」再到「数据落库」的完整链路认知。复习时别当成三门课,按链路串起来看。
4.1 Ansible:SSH 架构与变量关键字
Ansible 的关键特征有三个:基于 SSH、无需在被控端安装代理、支持自定义模块。题库那道单选题的正确答案就是「支持自定义模块」,另外几个选项里,「不支持自定义模块」是错的,「基于 ssh 架构」这句话本身没错但被放在了错误选项位置——这种设计很阴,复习时要看清题干问的是「正确的描述」还是「错误的描述」。
自定义模块的落地方式很直接:在项目根目录建library/目录,把写好的 Python 脚本扔进去,playbook 里就能按模块名调用;也可以用ANSIBLE_LIBRARY环境变量或ansible.cfg里的library配置指定路径。这一点在题库里只问了一句「是否支持」,实际操作里却是自动化落地最常用的扩展手段。
模板文件用的是 jinja2 语法,题库答案就是「jinja 语法」。变量定义这块,有效的关键词是vars和vars_prompt:前者在 play 里静态定义,后者在运行时交互式询问。选项里的par_prompt、Parameter都是拼出来的假词,看到就该排除。
# 变量既可以在 play 里用 vars 定义,也可以用 vars_prompt 交互式收集 - hosts: web vars: pkg_name: nginx # 静态变量,play 执行期间不变 vars_prompt: - name: listen_port # 运行时才确定的值 prompt: "请输入监听端口" private: false tasks: - name: 分发 jinja2 模板 template: src: nginx.conf.j2 # 模板里用 {{ listen_port }} 引用变量 dest: /etc/nginx/nginx.conf notify: reload nginxvars适合放固定值,vars_prompt适合放每次执行都可能变的值,两者可以共存。template模块和copy模块的区别也在这里:copy原样搬运文件,template会把.j2里的{{ }}先渲染再传,所以模板必须用 jinja2 语法写,写成 shell 的$变量是不会被替换的。
4.2 Ansible 模块:lvg、lvol、file 的职责边界
题库有两道模块题,一道问创建卷组和逻辑卷用什么模块,一道问哪个模块支持创建软链接。前者答案是lvg和lvol:lvg管卷组(volume group),lvol管逻辑卷(logical volume),vg和LV是拼凑出来的干扰项。后者答案是file模块,配合state: link使用。
- hosts: storage tasks: - name: 在 /dev/sdb 上创建卷组 vg_data community.general.lvg: vg: vg_data pvs: /dev/sdb - name: 在卷组上切出 20G 逻辑卷 community.general.lvol: vg: vg_data lv: lv_app size: 20g - name: 创建软链接 file: src: /data/app-1.2 # 源路径,必须已存在 dest: /data/app # 链接路径 state: linklvg的pvs是物理卷列表,lvol的size支持20g、100%FREE这类写法。file模块的state是它的核心参数:link建软链、directory建目录、absent删除、touch更新时间戳。copy模块负责把内容复制过去,不做链接;command模块是命令式执行,不具备幂等性,用它建软链第二次跑就会报错——这正是题库里把file单列出来的原因。
4.3 Docker:-v 冒号顺序与容器轻量化的原因
Docker 那道题问「通过镜像 nginx:uos 创建名为 web 的容器,并把宿主机/var/www挂载到容器/data」,正确答案是带冒号的那条:-v /var/www:/data。冒号左边是宿主机路径,右边是容器内路径,顺序写反了容器里就是空目录,而且不会报错——这是最典型的「静默失败」。
# 冒号左侧宿主机、右侧容器,-d 后台运行,--name 指定容器名 docker run -d -v /var/www:/data --name web nginx:uos # 验证挂载是否按预期生效 docker inspect web --format '{{json .Mounts}}'-d让容器在后台跑,-v定义挂载,--name给容器一个固定名字方便后续exec、logs、rm。docker inspect那条命令输出的是实际生效的挂载列表,Source是宿主机路径、Destination是容器路径,对照一眼就能判断有没有写反。
多选题里还考了容器的特性:构建一次多平台运行、资源占用低、启动秒级。这几条都对,唯一错的是「容器需要安装完整的操作系统、占用空间大」——容器共享宿主机内核,这正是它比虚拟机轻的根本原因。把这条和 KVM 那章对照着看,两种虚拟化路线的差别就清楚了:虚拟机模拟硬件、各自跑完整内核,容器隔离进程、共用内核。
4.4 数据库与 find:库表关系、聚合函数与按名查找
数据库部分考了三个点:库表关系、聚合函数、建表与删除语句。库表关系那题的正确答案是「一个数据库服务器可以管理多个数据库,一个数据库可以包含多个表」,另外三个选项都在「只能管一个」或「只能含一个」上做手脚。这个结论没什么可推导的,记住层级「服务器 > 数据库 > 表 > 行」即可。
聚合函数里,SUM求和、MAX求最大、COUNT计数、AVG求平均,题库问「求数据总和」,答案是SUM。这类题不该丢分,但要注意COUNT(*)和COUNT(字段)的区别:前者统计行数,后者跳过 NULL。
-- 一次查询里对比四种聚合结果 SELECT SUM(amount) AS 总额, COUNT(*) AS 行数, AVG(amount) AS 均值, MAX(amount) AS 最大值 FROM orders; -- 建表:自增列必须是整型,通常配合主键 CREATE TABLE emp ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(32) NOT NULL ); -- DELETE 只删行,表结构仍在;DROP TABLE 才是连结构一起删 DELETE FROM employ WHERE id > 100;find那题很直接:按文件名查找用-name,其余-size按大小、-type按类型、-user按属主。三个参数各管一个维度,考试只考对应关系,实操里经常组合使用。
find /var/log -name "*.log" # 按文件名,支持通配符 find / -type d -name "conf" # 类型 + 名字组合 find /data -size +100M # 大于 100M 的文件 find /home -user tom # 属主为 tom 的文件5. 易错点与易漏点:五个最容易在考场上翻车的地方
5.1 端口、路径与文件名类
易漏点一:Telnet 的 23 和 FTP 的 20/21 串位。为什么会漏:这两个服务现在用得少,复习时容易一带而过,只记住「20 是 FTP」,看到 Telnet 就顺手选了 20。怎么补:把端口按「相邻数字成组」记——22/23 是 SSH 与 Telnet 一对,20/21 是 FTP 的数据与控制一对,成组记忆比单点记忆抗干扰。默写一遍第 2 章那张端口表,错一个就重来。
易漏点二:Apache 配置文件路径的两套体系。为什么会漏:题库里同时出现/etc/apache2/apache2.conf和/etc/httpd/conf/httpd.conf,两题答案不同,复习时如果只背一条,另一条必错。怎么补:按发行版分两列记,Debian 系走/etc/apache2/,RHEL 系走/etc/httpd/;ports.conf只管端口,index.html是页面不是配置,把「目录 / 主配置 / 端口文件 / 页面」四类分开归类。
5.2 命令语义与题库口径类
易漏点三:把virsh destroy当成删除虚拟机。为什么会漏:destroy这个英文词在日常语境里就是「销毁」,直觉上等于删除,但它在 libvirt 里只表示强制关机。怎么补:记一句对照——destroy管电源,undefine管定义,--remove-all-storage才管磁盘。三者按「电—壳—盘」的顺序理解,一次就分得开。
易漏点四:DELETE FROM到底删不删表结构。为什么会漏:题库那道判断题给的是「包括表结构」,判为正确;而标准 SQL 里DELETE只删行,DROP TABLE才连结构一起删。两种口径不一致,只背一种就会在另一种场景里出错。怎么补:考试按题库口径作答,实操按标准语义执行,心里同时存两条并标注来源,遇到同类题先看题干给的是「考试口径」还是「标准语义」。
易漏点五:FTP 匿名用户名与 Ansible 变量关键字的「假词」。为什么会漏:匿名账号在题库里是guest,真实环境里是ftp或anonymous;Ansible 变量关键字里vars、vars_prompt是真的,par_prompt、Parameter是拼出来唬人的。怎么补:对「长得像但没见过」的选项保持警惕,凡是没有在官方配置示例里出现过的关键词,一律先当干扰项处理;匿名账号则两个名字都记,按环境切换。
6. 复习清单:三轮过题法和一张自测表
这份题库的题量不大,但覆盖面散,硬背的效率很低。我的做法是分三轮,每轮只解决一个层次的问题,三轮下来基本能把「记不住」和「记混了」分开处理。
| 轮次 | 目标 | 具体动作 | 判断通过的标准 |
|---|---|---|---|
| 第一轮 | 建立定位 | 只回答「这题考哪个文件 / 哪个命令」,不查答案 | 能说出模块归属就算过 |
| 第二轮 | 补齐细节 | 逐题写出配置项、参数、端口号 | 与标准答案逐字对齐 |
| 第三轮 | 制造混淆 | 把相似项放一起对比(20/21、22/23、destroy/undefine) | 能在三秒内选出正确项 |
第一轮最容易被跳过,但它恰恰是最值钱的一轮。很多人一上来就背答案,结果是「这题我见过」却说不清它属于哪个模块,换个问法就废。第一轮强迫自己只做归类,比如看到「禁止 tom 远程登录」立刻反应到 sshd 的DenyUsers,看到「创建逻辑卷」立刻反应到lvol,把答案和模块绑在一起,比绑在题干上牢得多。
第二轮才是对细节。这一步建议动手写,不要只用眼睛看:把sshd_config的四行、/etc/exports的两行、httpd.conf的五条指令、openssl的六个参数各默写一遍,写不出来的当场回查。写的过程会暴露一批「以为自己会」的点,比如exportfs -arv三个字母各代表什么、-nodes到底省掉了哪一步。
第三轮专门制造混淆。把第 2 章的端口表和本章的易错点清单并排看,逐条问自己「这两个我分得开吗」。分不开的就单独抄在一张纸上,考前只看那张纸。这轮不需要新知识,只需要把已经存在的模糊地带压实。
从那以后我每次复习这类题库,都会强制先走一遍「归类—默写—制造混淆」的三步,哪怕时间只够走一遍半,也不会直接从背答案开始——因为跳过归类的背,考场上换个问法就原形毕露。希望帮到你。
本文还有配套的精品资源,点击获取