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 题详解
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。




