以下是一些常见的Linux运维面试题,涵盖基础命令、系统管理、网络配置、故障排查等核心技能,分为初级中级高级三个层次供参考:


一、初级题目(基础操作与概念)

  1. 文件与目录管理

    • 如何递归删除目录及其子内容? Rm -rf dir
    • 解释 chmod 755 file.txt 的含义,如何给目录设置默认权限?
      给file.txt授予755的权限7代表可以读,写,执行,5 代表读,执行。
    • find 命令如何查找7天内被修改过的 .log 文件并删除? find /path/to/search -type f -name "*.log" -mtime -7 -exec rm {} ;
  2. 进程管理

    • 如何查看系统实时进程状态(类似Windows任务管理器)?
      Top -c
    • 如何强制终止一个进程及其所有子进程?
      Kill 和pkill
    • ps aux 输出的 STAT 列中 SZD 分别代表什么状态? S(休眠),Z(僵尸进程),D(不可中断的睡眠)
  3. 系统信息查看

    • 如何查看系统内存使用情况? Free -h
    • 如何查看磁盘分区及挂载信息?
      Df -h lsblk
    • 解释 load average(负载平均值)的三个数值含义。 分别是1分钟,5分钟,15分钟的平均负载值
  4. 网络基础

    • 如何查看当前系统的所有TCP连接?
      netstat -tnlp • -t: 显示 TCP 连接。 • -n: 以数字形式显示地址和端口号。 • -l: 显示监听中的服务器套接字。 • -p: 显示监听套接字的进程 ID 和进程名称。 Netstat -tunlp -u 显示 UDP 连接。这个选项会过滤出所有的 UDP 网络连接信息。与 -t 选项一起使用时,可以同时显示 TCP 和 UDP 连接,但在这个特定的 -tunlp 组合中,它意味着除了 TCP 连接外,还会显示 UDP 连接

    • curlwget 的主要区别是什么?
      Curl 是请求,wget是下载

    • 如何测试到目标主机的网络延迟和丢包率? ping -c 100 -i 0.1 <host> 查看延迟,traceroute <host> 查看路径,iperf 或 nping 测试带宽和丢包率


二、中级题目(系统管理与服务配置)

  1. 权限与用户管理

    • 如何创建一个禁止登录但可以运行脚本的系统用户?
      useradd -s /sbin/nologin username
    • 解释 /etc/passwd/etc/shadow 的区别。
      第一个是存储用户信息的,第二个是存储密码的
    • 如何限制用户对 /var/log 目录的访问,仅允许读取? Chmod +444 /var/log chmod 555 /var/log 和 setfacl -m u:username:r /var/log
  2. 服务与日志

    • 如何用 journalctl 查看最近1小时的系统日志? journalctl --since "1 hour ago"
    • 如何配置 logrotate 对Nginx日志按日切割并保留30天? 编辑 /etc/logrotate.d/nginx,设置 daily 和 rotate 30
    • 如何让 systemd 服务在崩溃后自动重启? 在 [Service] 部分添加 Restart=always
  3. 网络配置

    • 如何永久修改Linux的IP地址(非DHCP)?
      编辑 /etc/network/interfaces(Debian系)或 /etc/sysconfig/network-scripts/ifcfg-<interface>(RedHat系)
    • 如何用 iptables 阻止某个IP访问80端口? Iptables -I INPUT -p tcp –-dport 80 -s x.x.x.x -j DROP
    • 解释 netstatsslsof 的适用场景差异。 netstat 显示连接、路由表等;ss 更现代,性能更好;lsof 列出打开的文件,包括网络文件
  4. Shell脚本

    • 编写脚本:统计Nginx日志中访问量前10的IP地址。 awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -n 10
    • 如何避免脚本因错误(如文件不存在)中途退出?
      使用 set -e 的反作用,或在错误命令后加 || true
    • 解释 $?$0$# 在脚本中的含义。 $? 表示上一个命令的退出状态,$0 表示脚本名,$# 表示参数个数

三、高级题目(性能优化与架构)

  1. 性能排查
    • 服务器负载高但CPU使用率低,可能是什么原因?如何排查? 可能是I/O瓶颈、内存不足、网络问题。使用 iostat、vmstat、dstat 分析
    • 如何分析一个进程的IO读写情况?
      iotop 或 pidstat -d 查看进程I/O
    • 解释 sarvmstatiostat 的输出关键指标。 sar 收集系统活动信息,vmstat 报告虚拟内存统计,iostat 显示CPU和I/O设备的统计
  2. 安全与加固
  • 如何禁用SSH的密码登录,仅允许密钥认证?
    编辑 /etc/ssh/sshd_config,设置 PasswordAuthentication no
  • 如何快速清理服务器上的挖矿病毒进程?
    使用 ps aux | grep <miner_process> 找到PID,kill -9 <PID>,检查并删除相关文件,检查crontab和启动项
  • 解释SELinux的 EnforcingPermissiveDisabled 模式区别。 Enforcing 强制模式,Permissive 允许但不阻止违规,Disabled 关闭
  1. 存储与备份
  • 如何在线扩展LVM逻辑卷的容量? lvextend -L +<size>G /dev/mapper/<VG>-<LV>,然后 resize2fs /dev/mapper/<VG>-<LV>(ext4文件系统)
  • 如何实现MySQL数据库的增量备份? 使用 mysqldump --single-transaction --flush-logs --master-data=2 或 Percona XtraBackup
  • 解释 rsync--delete 参数风险及规避方法。 风险在于删除目标中源没有的文件,使用前确保源和目标一致性,使用 --dry-run 测试
  1. 自动化与集群
  • 如何用Ansible批量修改100台服务器的时区?
    ansible all -i hosts -m timezone -a "name=Asia/Shanghai"
  • 解释Kubernetes中Pod、Deployment、Service的关系。 Pod是容器运行的基本单位,Deployment管理Pod的副本和更新,Service提供访问Pod的负载均衡和IP
  • 如何设计一个高可用的Nginx反向代理集群? 使用Nginx的 upstream 指令配置多个后端服务器,启用负载均衡和健康检查

四、场景题(综合能力)

  1. 故障模拟
  • 某PHP网站突然无法访问,如何逐步排查? 检查Nginx/Apache、PHP-FPM、数据库服务状态,查看日志,确认网络连通性
  • 服务器磁盘空间不足,但 du 统计大小远小于 df 显示,可能是什么原因? 可能是文件删除未释放空间(如删除大文件后未重启服务),使用 lsof | grep deleted 检查
  • 用户反馈SSH连接缓慢,如何定位问题? 可能是文件删除未释放空间(如删除大文件后未重启服务),使用 lsof | grep deleted 检查
  1. 架构设计
  • 如何设计一个每天处理1亿条日志的收集与分析系统?
    使用ELK Stack(Elasticsearch, Logstash, Kibana)或EFK(Elasticsearch, Fluentd, Kibana)
  • 解释微服务架构下日志聚合的常见方案(如ELK、Loki)。
    集中化日志存储(如Elasticsearch),使用日志管理工具(如Kibana, Grafana Loki)
  • 如何实现跨地域服务器的文件实时同步? 使用 rsync 结合 cron,或使用分布式文件系统(如Ceph, GlusterFS)

五、附加技能(加分项)

  1. 容器与云原生
  • 如何用Dockerfile优化镜像层体积?
    优化Docker镜像:减少层数,使用多阶段构建,清理不必要的文件

  • 解释Kubernetes中ConfigMap和Secret的使用场景。 ConfigMap和Secret:ConfigMap存储配置数据,Secret存储敏感信息,如密码、密钥

  • 如何排查Pod一直处于 Pending 状态的问题? Pod Pending:检查Pod所在节点的资源限制(CPU, 内存),检查PVC(Persistent Volume Claim)是否绑定成功

  1. 监控与告警
  • 如何用Prometheus监控MySQL的慢查询?
    使用Prometheus的 mysqld_exporter 或 Percona Monitoring and Management
  • 解释Zabbix主动模式与被动模式的区别。 使用Prometheus的 mysqld_exporter 或 Percona Monitoring and Management
  • 设计一个服务器资源阈值的告警规则(如CPU>90%持续5分钟)。 使用Prometheus Alertmanager,配置告警规则如 groups: [...] rules: [...] for: 5m labels: severity: critical