当前位置:首页>Linux>Linux 运维面试题详解(二)Shell 脚本 · awk/sed · 手写题 · 自动化思路 · systemd + 日志 + 故障复盘

Linux 运维面试题详解(二)Shell 脚本 · awk/sed · 手写题 · 自动化思路 · systemd + 日志 + 故障复盘

  • 2026-08-25 13:57:40
Linux 运维面试题详解(二)Shell 脚本 · awk/sed · 手写题 · 自动化思路 · systemd + 日志 + 故障复盘


一、Shell 脚本基础(必考原理)

1. Shell 脚本第一行为什么要写 #!/bin/bash?

标准回答:

指定脚本解释器,告诉系统用哪个 shell 来执行脚本

面试官加分点:

  • 不写可能使用 /bin/sh
  • 不同系统 /bin/sh 可能指向 dash / bash

2. $0 $1 $@ $* $# $? 各是什么意思?

变量
含义
$0
脚本名
n
位置参数
$#
参数个数
$@
所有参数(推荐)
$*
所有参数(合并成一个)
$?
上一条命令返回值

面试必说:循环参数时优先用 $@


3. Shell 中如何进行条件判断?

if [ -f file ]; thenecho"file exists"fi

常用判断:

  • -f 普通文件
  • -d 目录
  • -z 空字符串
  • -eq -ne -gt -lt 数值比较

二、现场手写 Shell 脚本题(高频)

4. 统计日志中访问 IP 次数最多的前 10 个

awk '{print $1}' access.log | sort | uniq -c | sort -nr | head

面试官关注点:

  • 是否能拆解问题
  • 管道是否熟练

5. 找出系统中占用 CPU 最高的 5 个进程

ps aux | sort -k3 -nr | head -5

6. 统计某目录下文件数量(不包含子目录)

ls -l | grep '^-' | wc -l

进阶说法:

find . -maxdepth 1 -type f | wc -l

7. 批量杀死某用户的所有进程

pkill -u username

或:

ps -u username -o pid= | xargs kill -9

生产环境要说明:慎用 -9


三、awk(面试最爱)

8. awk 的基本结构是什么?

awk 'pattern {action}' file

内置变量(必考):

  • NR:行号
  • NF:字段数
  • $1~$n:字段

9. awk 统计某一列的总和

awk '{sum+=$2} END {print sum}' file

10. awk 按指定分隔符处理

awk -F ':''{print $1}' /etc/passwd

四、sed(文本修改神器)

11. sed 和 awk 的区别?

高分回答:

  • sed:行级编辑(替换、删除)
  • awk:列级处理(统计、分析)

12. sed 常用命令

sed 's/old/new/g' filesed -i 's/8080/80/g' nginx.confsed '/^#/d' file

五、自动化与运维思维(面试官最看重)

13. 你理解的运维自动化是什么?

模板回答:

把重复、易错、人工操作的事情,用脚本或工具固化下来

常见自动化场景:

  • 日志清理
  • 批量部署
  • 健康检查
  • 备份

14. 写一个磁盘使用率超过 80% 报警脚本思路

#!/bin/bashTHRESHOLD=80df -P | awk 'NR>1 {print $5,$6}' | whileread use mount; do  rate=${use%%%}if [ $rate -ge $THRESHOLD ]; thenecho"$mount usage $rate%" | mail -s "Disk Alert" adminfidone

面试官更看 思路是否完整,不是语法完美


六、面试官常见追问(高分区)

15. Shell 脚本如何调试?

bash -x script.sh

16. crontab 有哪些坑?

  • 环境变量不全
  • 路径要写绝对路径
  • 输出要重定向日志


七、systemd 基础与核心原理(必考)

17、systemd 是什么?解决了什么问题?

答:

  • systemd 是 Linux 新一代系统和服务管理器(PID=1),替代传统 SysVinit

  • 核心能力:

    • 统一服务管理
    • 并行启动,提升开机速度
    • 依赖关系管理
    • 集中日志(journald)

一句话面试回答:

systemd 统一了启动、服务、日志和依赖管理,是现代 Linux 的“中枢调度器”。


18、systemd 和 init / service 的区别?

对比项
SysVinit
systemd
启动方式
串行
并行
依赖管理
脚本顺序
显式依赖
服务管理
service
systemctl
日志
分散
journalctl
状态感知
弱
强

19、Unit 是什么?常见 Unit 类型有哪些?

**答:**Unit 是 systemd 管理的最小对象

常见类型:

  • service:服务(最常用)
  • socket:套接字
  • target:运行级别
  • mount:挂载点
  • timer:定时任务(替代 cron)

八、systemctl 高频面试命令(必须秒答)

20、服务管理常用命令

systemctl start nginx
systemctl stop nginx
systemctl restart nginx
systemctl reload nginx
systemctl status nginx

面试追问:restart 和 reload 区别?

  • restart:完全重启,连接会断
  • reload:重载配置,不断连接(需服务支持)

21、如何设置服务开机自启?

systemctl enable nginx
systemctl disable nginx
systemctl is-enabled nginx

底层原理:

  • 在 /etc/systemd/system/ 下创建符号链接

22、如何查看系统中所有服务状态?

systemctl list-units --type=service
systemctl list-unit-files
systemctl --failed

面试加分点:

systemctl --failed 是排查服务器“莫名异常”的第一条命令


九、Service 文件详解(面试最爱手写)

23、一个标准 service 文件示例

[Unit]
Description=Nginx Service
After=network.target

[Service]
Type=forking
ExecStart=/usr/sbin/nginx
ExecReload=/usr/sbin/nginx -s reload
ExecStop=/usr/sbin/nginx -s quit
PIDFile=/run/nginx.pid
Restart=on-failure

[Install]
WantedBy=multi-user.target

24、Service 文件中最重要的参数(必背)

[Unit]

  • After / Before:启动顺序
  • Requires / Wants:依赖关系

[Service]

  • Type(面试必问):

    • simple(默认)
    • forking(传统守护进程)
    • oneshot(一次性任务)
  • ExecStart:启动命令

  • Restart:自动重启策略

[Install]

  • WantedBy:绑定 target

25、修改 service 后为什么要 daemon-reload?

systemctl daemon-reload

答:

  • systemd 只在启动时加载 unit 文件
  • 修改后必须重新加载配置

十、journalctl 日志系统(必考)

26、journalctl 是什么?

  • systemd 的集中日志系统
  • 替代 /var/log/messages 部分功能
  • 支持按时间、服务、PID 查询

27、journalctl 高频查询命令

journalctl
journalctl -u nginx
journalctl -xe
journalctl --since "2024-01-01"
journalctl -f

面试官最爱:

服务起不来,第一步:journalctl -xe


28、journalctl 和传统日志的区别?

对比项
rsyslog
journald
存储
文本
二进制
查询
grep
条件过滤
可靠性
一般
高
结构化
否
是

十一、真实生产故障复盘

29、案例一:服务启动失败,但端口不存在

现象:

  • systemctl start 服务失败
  • netstat 无端口监听

排查步骤:

  1. systemctl status 服务
  2. journalctl -u 服务名
  3. 手动执行 ExecStart
  4. 检查权限 / 端口 / 配置文件

常见原因:

  • 端口被占用
  • 配置文件语法错误
  • SELinux / 权限

30、案例二:服务频繁自动重启

现象:

  • systemctl status 显示 auto-restart

原因:

  • 程序启动即退出
  • Type 设置错误
  • 依赖未就绪

处理:

  • 调整 Restart 策略
  • 延迟启动(After)

31、案例三:服务器重启后服务没起来

排查思路:

  1. 是否 enable
  2. 是否被依赖服务阻塞
  3. 查看 failed units
systemctl is-enabled 服务名
systemctl --failed

32、systemd 故障排查模板(直接背)

服务异常 → systemctl status → journalctl -xe → 手动执行命令 → 查端口 / 权限 / 配置


33、为什么说 systemd 是运维分水岭?

因为 systemd 把“服务状态、依赖、日志、自恢复”全部收敛在一起, 一个熟练 systemd 的运维,可以不慌、不乱、可复盘。


点个赞吧

 点击关注公众号,阅读更多精彩内容

往期内容推荐
没有外网也能升级 OpenSSH?RPM 离线包制作全流程实战
国产操作系统崛起!麒麟 V10 SP3 安装与使用指南
Harbor 部署与使用手册(保姆级教程)
Dockerfile 实战:从 0 构建你的第一份企业级镜像(含多阶段构建神器)
从零到实战:一次 Jenkins Pipeline 重构的完整思考过程
Jenkins 最稳部署指南(含版本选择、Compose 部署、插件推荐)

以上内容仅为作者个人观点,仅供交流与探讨,欢迎各位读者在留言区理性讨论与交流。

最新文章

随机文章