DevOps 面试题大全(一):Linux 基础与系统管理 50 题详解

前言

Linux 是 DevOps 工程师的必备技能。本文整理了 50 道 Linux 基础与系统管理面试题,包含详细答案和解析,涵盖从初级到高级的各个知识点。

一、基础题(1-15 题)

1. 如何查看 Linux 系统版本?

# 方法 1:查看系统版本
cat /etc/os-release

# 方法 2:查看内核版本
uname -r

# 方法 3:查看发行版信息
lsb_release -a

# 方法 4:查看内核详细信息
uname -a

2. 如何查看当前系统的负载?

# 查看系统负载
uptime

# 输出示例:
# 14:30:25 up 10 days,  2:30,  1 user,  load average: 0.52, 0.83, 0.95
# 含义:1 分钟、5 分钟、15 分钟的平均负载

# 查看 CPU 核心数
nproc
cat /proc/cpuinfo | grep processor | wc -l

# 负载解读:
# 负载值/CPU 核心数 < 1:系统空闲
# 负载值/CPU 核心数 = 1:CPU 刚好满载
# 负载值/CPU 核心数 > 1:CPU 过载

3. 如何查看内存使用情况?

# 查看内存使用
free -h

# 输出示例:
#               total        used        free      shared  buff/cache   available
# Mem:           15Gi       8.0Gi       4.0Gi       200Mi       3.0Gi       6.5Gi
# Swap:         2.0Gi          0B       2.0Gi

# 字段说明:
# total: 总内存
# used: 已使用内存
# free: 空闲内存
# buff/cache: 缓存占用
# available: 可用内存(最重要)

# 查看详细内存信息
cat /proc/meminfo

4. 如何查看磁盘使用情况?

# 查看磁盘空间
df -h

# 查看目录大小
du -sh /var/log

# 查看目录下各文件夹大小
du -h --max-depth=1 /var/log | sort -hr

# 查找大文件(大于 100M)
find / -type f -size +100M -exec ls -lh {} \;

5. 如何查看当前登录的用户?

# 查看当前登录用户
who

# 查看当前用户
whoami

# 查看用户登录历史
last

# 查看登录失败的记录
lastb

# 查看当前运行的进程
ps -ef | grep $USER

6. 如何查看进程?

# 查看所有进程
ps -ef

# 查看进程树
pstree

# 实时查看进程
top
htop  # 更友好的界面

# 查看特定进程
ps -ef | grep nginx

# 查看进程占用资源
ps aux --sort=-%mem | head  # 按内存排序
ps aux --sort=-%cpu | head  # 按 CPU 排序

7. 如何杀死进程?

# 根据 PID 杀死进程
kill 1234

# 强制杀死进程
kill -9 1234

# 根据进程名杀死
pkill nginx
killall nginx

# 优雅地停止进程
kill -15 1234  # SIGTERM

# 查看信号列表
kill -l

8. 如何查看端口占用?

# 查看端口占用
netstat -tunlp | grep 80
ss -tunlp | grep 80  # 推荐,更快

# 查看特定进程占用的端口
lsof -i :80
lsof -i tcp:80

# 查看所有监听端口
netstat -tlnp
ss -tlnp

9. 如何查看网络连接?

# 查看所有网络连接
netstat -an

# 查看 ESTABLISHED 连接
netstat -an | grep ESTABLISHED

# 查看连接数统计
netstat -an | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

# 查看与特定 IP 的连接
netstat -an | grep 192.168.1.1

10. 如何查看路由表?

# 查看路由表
route -n
ip route show

# 查看默认网关
ip route | grep default

# 添加路由
route add -net 10.0.0.0/8 gw 192.168.1.1

# 删除路由
route del -net 10.0.0.0/8

11. 如何测试网络连通性?

# ping 测试
ping www.baidu.com
ping -c 4 192.168.1.1  # 发送 4 个包

# 跟踪路由
traceroute www.baidu.com
tracepath www.baidu.com

# 测试端口连通性
telnet 192.168.1.1 80
nc -zv 192.168.1.1 80

# DNS 解析测试
nslookup www.baidu.com
dig www.baidu.com

12. 如何查看文件权限?

# 查看文件权限
ls -l filename

# 输出示例:
# -rwxr-xr-- 1 root root 1234 Jan 1 12:00 filename
# 含义:
# - : 文件类型(-文件,d 目录,l 链接)
# rwx: 所有者权限
# r-x: 组权限
# r--: 其他人权限

# 修改权限
chmod 755 filename
chmod +x filename  # 添加执行权限
chmod -x filename  # 移除执行权限

# 修改所有者
chown user:group filename

13. 如何查找文件?

# 按名称查找
find / -name "filename"

# 按类型查找
find / -type f  # 文件
find / -type d  # 目录

# 按大小查找
find / -size +100M  # 大于 100M
find / -size -1M    # 小于 1M

# 按时间查找
find / -mtime -7    # 7 天内修改
find / -atime +30   # 30 天前访问

# 按权限查找
find / -perm 755

# 查找并删除
find /tmp -name "*.log" -delete

14. 如何查看文件内容?

# 查看全部内容
cat filename

# 分页查看
less filename
more filename

# 查看前 N 行
head -n 10 filename

# 查看后 N 行
tail -n 10 filename

# 实时查看日志
tail -f /var/log/messages
tail -f filename | grep "error"

# 查看中间部分
sed -n '10,20p' filename

15. 如何压缩和解压缩文件?

# tar 压缩
tar -czvf archive.tar.gz /path/to/dir

# tar 解压
tar -xzvf archive.tar.gz

# tar 查看内容
tar -tzvf archive.tar.gz

# zip 压缩
zip -r archive.zip /path/to/dir

# zip 解压
unzip archive.zip

# gzip 压缩
gzip filename  # 生成 filename.gz
gunzip filename.gz

---

二、进阶题(16-35 题)

16. 如何查看系统启动时间?

# 查看启动时间
uptime -s

# 查看运行时间
uptime -p

# 查看上次重启时间
who -b

# 查看系统运行时间(秒)
cat /proc/uptime

17. 如何查看 CPU 信息?

# 查看 CPU 信息
cat /proc/cpuinfo

# 查看 CPU 核心数
nproc
grep -c processor /proc/cpuinfo

# 查看 CPU 型号
grep "model name" /proc/cpuinfo | head -1

# 实时查看 CPU 使用率
top
htop
mpstat -P ALL 1  # 每秒刷新,显示所有 CPU

18. 如何查看系统日志?

# 查看系统日志
tail -f /var/log/messages  # CentOS/RHEL
tail -f /var/log/syslog    # Ubuntu/Debian

# 使用 journalctl(systemd 系统)
journalctl -f              # 实时查看
journalctl -xe             # 查看错误
journalctl -u nginx        # 查看特定服务
journalctl --since "2024-01-01"
journalctl --since "1 hour ago"

# 查看内核日志
dmesg | tail
dmesg -w  # 实时查看

19. 如何管理服务?

# systemd 系统(CentOS 7+, Ubuntu 16.04+)
systemctl start nginx
systemctl stop nginx
systemctl restart nginx
systemctl status nginx
systemctl enable nginx   # 开机自启
systemctl disable nginx  # 禁用自启
systemctl list-units --type=service  # 列出所有服务

# SysVinit 系统(老版本)
service nginx start
service nginx stop
service nginx restart
/etc/init.d/nginx start

20. 如何查看用户和组?

# 查看所有用户
cat /etc/passwd

# 查看所有组
cat /etc/group

# 查看特定用户信息
id username
finger username

# 查看用户所属组
groups username

# 创建用户
useradd -m -s /bin/bash username
passwd username

# 删除用户
userdel -r username  # -r 同时删除家目录

# 修改用户
usermod -aG sudo username  # 添加到 sudo 组

21. 如何查看定时任务?

# 查看当前用户的 crontab
crontab -l

# 查看 root 的 crontab
crontab -u root -l

# 编辑 crontab
crontab -e

# 查看系统级定时任务
cat /etc/crontab
ls -la /etc/cron.d/
ls -la /etc/cron.daily/

# crontab 格式:
# * * * * * command
# | | | | |
# | | | | +--- 星期 (0-7,0 和 7 都是周日)
# | | | +----- 月份 (1-12)
# | | +------- 日期 (1-31)
# | +--------- 小时 (0-23)
# +----------- 分钟 (0-59)

22. 如何查看环境变量?

# 查看所有环境变量
env
printenv

# 查看特定变量
echo $PATH
echo $HOME

# 设置环境变量
export VAR_NAME=value

# 永久设置(添加到 ~/.bashrc)
echo 'export VAR_NAME=value' >> ~/.bashrc
source ~/.bashrc

# 删除环境变量
unset VAR_NAME

23. 如何查看磁盘 I/O?

# 查看磁盘 I/O
iostat -x 1  # 每秒刷新
iostat -d 1  # 只看磁盘

# 查看进程 I/O
iotop

# 查看磁盘使用情况
df -i  # inode 使用
df -h  # 空间使用

# 查看磁盘详细信息
fdisk -l
lsblk
blkid

24. 如何查看网络接口?

# 查看网络接口
ip addr show
ifconfig  # 老命令

# 查看接口统计
ip -s link

# 启用/禁用接口
ip link set eth0 up
ip link set eth0 down

# 配置 IP 地址
ip addr add 192.168.1.100/24 dev eth0
ip addr del 192.168.1.100/24 dev eth0

25. 如何配置防火墙?

# iptables
iptables -L -n  # 查看规则
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -j DROP
iptables-save > /etc/iptables/rules.v4

# firewalld(CentOS 7+)
firewall-cmd --list-all
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reload

# ufw(Ubuntu)
ufw status
ufw allow 80/tcp
ufw enable

26-35. 更多进阶题(简略版)

题号 题目 关键命令
26 如何查看 SSH 登录日志? grep "sshd" /var/log/secure
27 如何查看文件被哪个进程占用? lsof filename
28 如何查看系统打开的文件数? lsof | wc -l
29 如何查看 DNS 配置? cat /etc/resolv.conf
30 如何查看 hosts 配置? cat /etc/hosts
31 如何创建软链接? ln -s source target
32 如何查看命令的位置? which command
33 如何查看命令帮助? man command
34 如何查看历史命令? history
35 如何批量替换文件内容? sed -i 's/old/new/g' file

---

三、高难题(36-50 题)

36. 系统负载高如何排查?

# 1. 查看负载
uptime

# 2. 查看进程
top
htop

# 3. 查看 CPU 使用
mpstat -P ALL 1

# 4. 查看内存
free -h

# 5. 查看 I/O
iostat -x 1

# 6. 查看网络
sar -n DEV 1

# 7. 查看进程树
pstree -p

# 8. 查看系统调用
strace -p PID

# 9. 查看内核消息
dmesg -T

# 10. 查看等待队列
vmstat 1

37. 磁盘空间满如何清理?

# 1. 查看磁盘使用
df -h

# 2. 查找大文件
find / -type f -size +500M -exec ls -lh {} \;

# 3. 查找大目录
du -h --max-depth=1 / | sort -hr | head -20

# 4. 清理日志
> /var/log/messages
journalctl --vacuum-time=1d

# 5. 清理缓存
yum clean all  # CentOS
apt-get clean  # Ubuntu

# 6. 清理临时文件
rm -rf /tmp/*

# 7. 查找删除但未释放的文件
lsof | grep deleted

# 8. 重启服务释放文件
systemctl restart rsyslog

38-50. 更多高难题(简略版)

题号 题目 关键点
38 如何排查内存泄漏? ps aux, valgrind
39 如何排查 CPU 100%? top, pidstat, perf
40 如何排查 I/O 瓶颈? iostat, iotop, vmstat
41 如何排查网络连接数过多? netstat, ss, ulimit
42 如何优化系统性能? sysctl, 内核参数
43 如何配置内核参数? /etc/sysctl.conf
44 如何查看系统调用? strace, ltrace
45 如何调试程序? gdb, strace
46 如何查看文件变化? inotifywait
47 如何同步文件? rsync, scp
48 如何备份系统? tar, dd, rsync
49 如何恢复误删文件? extundelete, lsof
50 如何排查系统启动慢? systemd-analyze

---

四、实战场景题

场景 1:网站访问慢

# 排查步骤:
# 1. 检查网络延迟
ping www.example.com
traceroute www.example.com

# 2. 检查服务器负载
uptime
top

# 3. 检查 Web 服务
systemctl status nginx
netstat -tlnp | grep :80

# 4. 检查日志
tail -f /var/log/nginx/access.log
tail -f /var/log/nginx/error.log

# 5. 检查数据库
mysqladmin processlist

# 6. 检查磁盘 I/O
iostat -x 1

# 7. 检查带宽
iftop
nethogs

场景 2:磁盘空间不足告警

# 处理步骤:
# 1. 确认磁盘使用
df -h

# 2. 查找大文件
find / -type f -size +100M -exec ls -lh {} \;

# 3. 查找大目录
du -h --max-depth=1 /var | sort -hr

# 4. 清理日志
> /var/log/nginx/access.log
journalctl --vacuum-time=1d

# 5. 清理缓存
yum clean all

# 6. 设置监控
cat >> /etc/crontab << EOF
0 2 * * * root find /var/log -name "*.log" -mtime +7 -delete
EOF

场景 3:服务器无法 SSH 连接

# 排查步骤(通过控制台):
# 1. 检查 SSH 服务
systemctl status sshd

# 2. 检查端口监听
netstat -tlnp | grep 22

# 3. 检查防火墙
iptables -L -n
firewall-cmd --list-all

# 4. 检查 SSH 配置
cat /etc/ssh/sshd_config

# 5. 检查日志
tail -f /var/log/secure

# 6. 重启 SSH 服务
systemctl restart sshd

# 7. 测试连接
ssh -v user@host

---

总结

本文整理了 50 道 Linux 基础与系统管理面试题,涵盖:

  • ✅ 基础命令(1-15 题)
  • ✅ 进阶技能(16-35 题)
  • ✅ 高级排查(36-50 题)
  • ✅ 实战场景(3 个场景)

掌握这些知识点,足以应对大多数 DevOps 面试中的 Linux 相关问题。建议结合实际工作场景练习,加深理解。


下一篇预告:DevOps 面试题大全(二):Docker 容器技术 50 题详解

发表回复

后才能评论