面试官问“熟悉 Linux 吗”?别只会 cd 和 ls!Java 后端必会的 Linux 生存指南
“你平时开发用 Linux 吗?熟悉哪些常见命令?”
这时候,如果你怯生生地回答:“额……我平时都在 Windows 上的 IDEA 里写代码,Linux 只会 cd 和 ls……”
完蛋,扣分项。
在面试官眼里,这意味着什么?
-
你缺乏实战经验:公司的服务器 99.9% 都是 Linux(CentOS/Ubuntu)。
-
你没有线上排查能力:代码上线后报错了,你连日志都打不开,难道等运维帮你查?
今天这篇,咱们不搞“Linux 命令大全”那种字典式的教学。我按Java 后端开发的真实场景,把必须掌握的 20% 核心命令拎出来,解决你 80% 的工作难题。
第一章:日志排查篇 —— 后端的“千里眼”
这是后端开发最高频的场景。服务报错了,测试跑过来喊:“Bug!500 了!”
这时候你连上服务器,该怎么办?
1. 实时盯盘:tail
当你重启了项目,想盯着控制台看启动日志,或者想实时看现在的报错流。
-
命令:
tail -f catalina.out-
-f(follow):像监控摄像头一样,实时滚动显示文件末尾的内容。
-
-
进阶场景:日志刷得太快看不清?
-
tail -n 200 -f app.log:先打印最后 200 行,然后开始滚动。
-
2. 大海捞针:grep
日志文件有几百兆,几百万行,你想找到那个该死的 NullPointerException 或者某个 订单号。
-
基础:
grep "NullPointerException" app.log -
面试加分项(关键上下文):
-
痛点:光搜到报错那一行没用啊,我看不到堆栈信息(Stack Trace),不知道是哪行代码错了。
-
解法:
grep -C 10 "Error" app.log -
-C(Context):显示匹配行的前后 10 行。 -
-A(After):显示后 10 行。 -
-B(Before):显示前 10 行。 -
口诀:A后B前C中间。
-
3. 巨型文件浏览:less vs cat
如果日志文件有 5GB,千万别手贱用 cat 或 vim 打开!
-
cat:会一次性把 5GB 内容打印到终端,你的终端会直接卡死,服务器内存飙升。 -
less:这是老司机的选择。它按需加载,秒开大文件。-
命令:
less big_log.log -
进去怎么玩:
-
按
G(大写):直接跳到文件最末尾(看最新日志)。 -
按
?Exception:从下往上搜索 "Exception"。 -
按
n:查找下一个。 -
按
q:退出。
-
-
第二章:进程与端口篇 —— “服务怎么挂了?”
1. 查进程:ps
你想确认你的 Java 服务到底起没起来,或者有没有僵死进程。
-
命令:
ps -ef | grep java-
ps(Process Status):查看进程状态。 -
-ef:显示所有进程的完整信息。 -
|(管道符):把左边的输出结果,丢给右边处理。
-
-
看什么:最重要的是第二列的 PID (进程 ID)。
2. 查端口:netstat
启动 Spring Boot 经常报:“Port 8080 is already in use”。到底是谁占了我的坑?
-
命令:
netstat -nlp | grep 8080-
-n:显示数字地址(不解析域名)。 -
-l:只显示监听中的端口。 -
-p:显示占用该端口的进程 PID 和程序名(这个最重要)。
-
3. 杀进程:kill
-
命令:
kill [PID] -
面试避坑:面试官问“kill -9 和 kill -15 区别?”
-
kill -15(默认):发送 SIGTERM 信号。相当于跟程序说:“兄弟,你要挂了,赶紧把手头的活(保存数据、关闭连接)干完,然后自己关掉。”这是优雅关闭。 -
kill -9:发送 SIGKILL 信号。相当于直接拔电源。程序没有反应时间,可能会导致数据丢失。 -
正确姿势:先试
-15,如果它卡死不动了,再用-9强杀。
-
第三章:资源监控篇 —— “服务器怎么卡成 PPT 了?”
这是区分“初级程序员”和“高级程序员”的分水岭。
1. 系统体检表:top
这就相当于 Windows 的“任务管理器”。
-
命令:
top -
核心关注点:
-
Load Average (平均负载):右上角的三个数字(1分钟、5分钟、15分钟)。如果这个数字超过了 CPU 核数(比如 4 核 CPU,负载到了 10),说明系统快崩了。
-
%CPU:哪个进程在狂吃 CPU?
-
%MEM:哪个进程在狂吃内存?
-
-
交互技巧:进去后按
P(按 CPU 排序),按M(按内存排序)。
2. 内存去哪了:free
-
命令:
free -h-
-h(human):用人类看得懂的 GB/MB 单位显示,而不是显示一堆字节数。
-
-
看哪里:重点看
available。如果swap(交换分区) 被大量使用,说明物理内存不够了,系统正在用硬盘当内存用,速度会慢如蜗牛。
3. 磁盘满了吗:df
有时候服务突然报错“No space left on device”,往往是日志把磁盘打满了。
-
命令:
df -h -
看哪里:看
Use%。如果根目录/达到了 100%,必须赶紧删日志。
第四章:终极面试题 —— 线上 CPU 100% 怎么排查?
如果面试官问到这个问题,请坐直身体,因为这是你展示技术深度的高光时刻。单纯的 Linux 命令已经不够了,你需要一套组合拳。
标准回答流程(建议背诵):
-
定位进程:
-
先用
top命令,发现 PID 为1001的 Java 进程 CPU 占用率飙到了 200%。
-
-
定位线程:
-
使用
top -Hp 1001。 -
-H:显示线程模式。 -
找到该进程下最耗 CPU 的那个线程 ID(假设是
1008)。
-
-
进制转换:
-
因为 Java 堆栈日志里的线程 ID 是 16 进制的,操作系统看的是 10 进制的。
-
用命令
printf "%x" 1008得到 16 进制值,比如3f0。
-
-
导出堆栈(捉拿真凶):
-
使用 JDK 自带命令
jstack 1001 | grep -A 20 0x3f0。 -
即:打印进程 1001 的堆栈,搜索线程 ID 为 0x3f0 的位置,并显示后 20 行。
-
-
分析原因:
-
看堆栈里的代码行号。通常你会发现是死循环、频繁 GC 或者 复杂的算法逻辑 导致的。
-
第五章:文件权限篇 —— “Permission Denied” 怎么办?
1. 赋权:chmod
你写了个脚本 run.sh,运行却报“权限不足”。
-
命令:
chmod +x run.sh(赋予执行权限) -
粗暴版:
chmod 777 run.sh(所有人可读可写可执行,生产环境慎用!)
2. 拷文件:scp
想把本地的 Jar 包传到服务器上?
-
命令:
scp local_file.jar root@192.168.1.10:/opt/app/
总结:如何优雅地回答面试官?
下次面试官问:“熟悉 Linux 命令吗?”
请不要只回答“会 cd 和 ls”。你可以这样自信地总结:
“平时开发和部署中经常使用 Linux。
除了基础的文件操作,我工作中主要用它做三件事:
日志分析:熟练使用
tail -f实时监控,配合grep -C上下文搜索,大文件用less翻阅。服务管理:用
ps和netstat排查进程和端口冲突,理解kill -9和-15的区别。性能排查:遇到线上卡顿时,我会用
top看负载,free看内存。如果是 CPU 飙高,我会配合top -Hp和jstack定位到具体的 Java 线程代码。”
这套回答,既有广度,又有深度,直接把面试官的好感度拉满!
博主建议:
一定要找个 Linux 环境(阿里云服务器,或者本地装个虚拟机)亲手敲一遍!肌肉记忆比死记硬背强一万倍。
下期预告:
Linux 搞定了,那 Docker 呢?

更多推荐




所有评论(0)