前言
“要求熟悉Linux操作系统”——这行字几乎出现在所有后端开发、运维、测试、数据工程师的招聘要求(JD)里。但“熟悉”是一个非常模糊的词,到底要熟悉到什么程度?是会用 ls、cd 就行,还是需要能手写内核模块?
很多同学在面试时,被面试官一个场景题就问懵了,比如“服务器CPU突然100%,你怎么排查?”。这背后考察的,正是你对Linux系统深入、体系化的理解。
本文将面试中关于Linux的考查点,划分为五个由浅入深的层次。你可以对照这个体系,检查自己的知识盲区,并进行针对性的学习和准备。这不仅是一份面试指南,更是一份帮你构建Linux知识体系的路线图。
第一层:Linux生存法则 - 日常操作与基础命令
这是在Linux环境下能“活下来”的最低要求,也是后续一切操作的基础。
- 文件与目录核心操作
-
- 文件系统结构 (FHS):你需要知道Linux的主要目录是干什么的,而不是把所有东西都放
/home。
- 文件系统结构 (FHS):你需要知道Linux的主要目录是干什么的,而不是把所有东西都放
-
-
/etc:存放系统和应用的配置文件。/var:存放经常变化的文件,如日志 (/var/log)、缓存。/usr:存放用户安装的程序和文件。/home:用户主目录。/tmp:临时文件目录。
-
-
- 文件操作三剑客:
cp,mv,rm。除了基本用法,务必掌握常用参数:
- 文件操作三剑客:
-
-
-r:递归操作,用于目录。-f:强制执行,无提示。-i:交互式,操作前询问。
-
-
- 文件查找:
# 在/var/log目录下查找所有以.log结尾的文件
find /var/log -name "*.log"
# 在Nginx错误日志中查找所有包含"error"的行
grep -i "error" /var/log/nginx/error.log
-
-
find:功能强大,可按名称、大小、时间、权限等多种条件查找。实时遍历硬盘,速度较慢但精准。grep:在文件中搜索文本内容,支持正则表达式,是排查日志、配置的神器。
-
- 权限管理
-
- 读懂权限:理解
rwx(读、写、执行) 对文件和目录的意义。能看懂drwxr-xr-x这种表示法。 - 修改权限:掌握
chmod命令的两种用法。
- 读懂权限:理解
-
-
- 数字法:
chmod 755 file.sh(rwx r-x r-x) - 符号法:
chmod u+x file.sh(给用户user增加执行权限)
- 数字法:
-
-
- 修改属主/属组:
chown user:group file。
- 修改属主/属组:
- 文本查看与处理
# 统计当前目录下的文件个数
ls -l | grep "^-" | wc -l
-
- 查看命令:
cat,more,less,head,tail。面试高频点是tail -f,用于实时监控日志文件增长。 - 管道
|:将前一个命令的输出,作为后一个命令的输入。这是Linux命令组合的精髓。 - 重定向
>和>>:
- 查看命令:
-
-
>:覆盖写入文件。>>:追加写入文件。
-
-
- 组合示例:
第二层:系统管理员之眼 - 进程与资源监控
能熟练操作文件还不够,你得能“看懂”一台服务器的运行状态。
- 进程管理
-
- 查看进程:
ps命令是基础。
- 查看进程:
-
-
ps aux(BSD风格):显示所有用户的进程,信息详细。ps -ef(System V风格):功能类似,格式不同。
-
-
- 实时监控:
top/htop(推荐)。你需要看懂关键指标:
- 实时监控:
-
-
load average:系统负载,三个数值分别代表1、5、15分钟的平均负载。%CPU:CPU使用率。%MEM:内存使用率。
-
-
- 结束进程:
kill命令。
- 结束进程:
-
-
kill PID:默认发送TERM(15) 信号,让程序优雅退出。kill -9 PID:发送KILL(9) 信号,强制杀死进程。这是最后的手段。
-
- 资源监控
-
- 磁盘空间:
-
-
df -h:查看磁盘分区的使用情况。du -sh *:查看当前目录下各文件/文件夹的大小。
-
-
- 内存使用:
free -h。理解used,free,buff/cache的区别很重要。 - 系统信息:
uname -a(内核信息),lscpu(CPU信息)。
- 内存使用:
- 服务管理 (Systemd)
# 启动、停止、重启Nginx服务
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
# 查看服务状态
sudo systemctl status nginx
# 设置开机自启动
sudo systemctl enable nginx
-
- 现代Linux发行版大多使用
systemd进行服务管理,systemctl是核心命令。
- 现代Linux发行版大多使用
第三层:网络世界的侦探 - 网络配置与诊断
现代应用几乎都离不开网络,网络排错是面试高频场景。
- 网络状态查看
# 查看哪些进程在监听TCP端口
sudo ss -tlnp
-
- IP地址:
ip addr(推荐) 或ifconfig(旧)。 - 路由表:
ip route或route -n。 - 监听端口:
ss -tlnp(推荐) 或netstat -tlnp。ss更快,信息更简洁。
- IP地址:
- 网络诊断工具
# 检查Baidu的80端口是否可访问
telnet www.baidu.com 80
-
ping:检查网络连通性和延迟。telnet/nc:检查远程主机的特定端口是否开放。curl:强大的HTTP客户端,可用于测试API接口。nslookup/dig:用于DNS查询,排查域名解析问题。
- 防火墙:了解
iptables或firewalld的基本概念,知道如何查看规则、开放/关闭端口。
第四层:效率的魔法 - Shell脚本与自动化
这一层是区分普通使用者和高效工程师的分水岭。
- Shell脚本基础
-
- 基本结构:
#!/bin/bash,变量,if/else,for/while循环。 - 特殊变量:
$?(上个命令的退出状态码,0为成功),$#(参数个数),$@(所有参数),$0(脚本名),$1(第一个参数)。
- 基本结构:
- 文本处理三剑客 (进阶)
-
grep:已在第一层提到。sed:流编辑器,擅长对文本进行批量替换、删除、插入等操作。awk:强大的文本分析工具,擅长按列处理文本,进行计算和格式化输出。
- 定时任务
# 分 时 日 月 周 命令
# 每天凌晨3点备份数据库
0 3 * * * /path/to/backup_script.sh
-
crontab:用于设置周期性执行的任务。必须掌握其配置格式。
第五层:王者之路 - 场景化排错与实战演练
这是面试的“最终BOSS”,考察你的综合运用能力和解决问题的思路。以下是几个经典场景,你需要能够清晰、有条理地回答出来。
场景一:一台线上服务器CPU使用率突然飙升到100%,你会如何排查?
标准回答思路:
- 定位进程:使用
top命令,按P键(大写)按CPU使用率排序,找到占用CPU最高的进程及其PID。 - 分析进程:
-
- 如果是业务进程(如Java应用),使用
jstack PID查看线程堆栈,定位到具体的高CPU消耗线程。 - 如果是异常进程,
ps aux | grep PID查看其完整命令,判断是否为恶意脚本或程序。
- 如果是业务进程(如Java应用),使用
- 分析原因:
-
- 查看该进程的相关日志,分析是否有大量错误或异常请求。
- 使用
strace -p PID跟踪该进程的系统调用,看它在“忙”什么。
- 解决问题:根据分析结果,进行相应处理(杀死恶意进程、优化代码、重启服务等)。
场景二:用户反馈网站无法访问,你的排错思路是什么?
标准回答思路(从客户端到服务端,逐层排查):
- 客户端排查:在我自己电脑上
ping域名,检查网络和DNS。 - DNS排查:使用
nslookup或dig域名,看是否能正确解析到服务器IP。 - 网络链路排查:
ping服务器IP,检查网络是否可达。使用telnet 服务器IP 端口(如80/443),检查端口是否开放。 - 服务器排查:
-
- 登录服务器,
ss -tlnp查看服务端口是否在监听。 systemctl status nginx/httpd查看Web服务是否正常运行。- 检查防火墙规则 (
iptables -L或firewall-cmd --list-all),看是否拦截了端口。 - 查看Web服务器和应用服务器的访问日志和错误日志,定位具体问题。
- 登录服务器,
场景三:一个脚本我手动执行是好的,但放到cron里就不工作了,可能是什么原因?
标准回答思路(经典问题):
- 环境变量问题:
cron默认的环境变量非常少,可能找不到你在脚本中使用的命令。解决方案:在脚本中source~/.bashrc,或在命令前使用绝对路径(如/usr/bin/python)。 - 路径问题:脚本中使用了相对路径,而
cron的执行目录不是你预期的目录。解决方案:在脚本开头cd到指定目录,或全部使用绝对路径。 - 权限问题:执行脚本的用户在
cron环境下没有权限操作某些文件。 - 日志排查:将
cron任务的输出重定向到日志文件,方便排查。* * * * * /path/to/script.sh >> /var/log/my_script.log 2>&1。
总结
“熟悉Linux”从来不是指背诵几百个命令。面试官真正想看到的,是你面对未知问题时,能否利用Linux提供的工具集,形成一套清晰、逻辑化的排错思路。
1082

被折叠的 条评论
为什么被折叠?



