“你平时开发用 Linux 吗?熟悉哪些常见命令?”

这时候,如果你怯生生地回答:“额……我平时都在 Windows 上的 IDEA 里写代码,Linux 只会 cdls……”

完蛋,扣分项。 

在面试官眼里,这意味着什么?

  1. 你缺乏实战经验:公司的服务器 99.9% 都是 Linux(CentOS/Ubuntu)。

  2. 你没有线上排查能力:代码上线后报错了,你连日志都打不开,难道等运维帮你查?

今天这篇,咱们不搞“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,千万别手贱用 catvim 打开!

  • 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

  • 核心关注点

    1. Load Average (平均负载):右上角的三个数字(1分钟、5分钟、15分钟)。如果这个数字超过了 CPU 核数(比如 4 核 CPU,负载到了 10),说明系统快崩了。

    2. %CPU:哪个进程在狂吃 CPU?

    3. %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 命令已经不够了,你需要一套组合拳

标准回答流程(建议背诵):

  1. 定位进程

    • 先用 top 命令,发现 PID 为 1001 的 Java 进程 CPU 占用率飙到了 200%。

  2. 定位线程

    • 使用 top -Hp 1001

    • -H:显示线程模式。

    • 找到该进程下最耗 CPU 的那个线程 ID(假设是 1008)。

  3. 进制转换

    • 因为 Java 堆栈日志里的线程 ID 是 16 进制的,操作系统看的是 10 进制的。

    • 用命令 printf "%x" 1008 得到 16 进制值,比如 3f0

  4. 导出堆栈(捉拿真凶)

    • 使用 JDK 自带命令 jstack 1001 | grep -A 20 0x3f0

    • 即:打印进程 1001 的堆栈,搜索线程 ID 为 0x3f0 的位置,并显示后 20 行。

  5. 分析原因

    • 看堆栈里的代码行号。通常你会发现是死循环频繁 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。

除了基础的文件操作,我工作中主要用它做三件事:

  1. 日志分析:熟练使用 tail -f 实时监控,配合 grep -C 上下文搜索,大文件用 less 翻阅。

  2. 服务管理:用 psnetstat 排查进程和端口冲突,理解 kill -9-15 的区别。

  3. 性能排查:遇到线上卡顿时,我会用 top 看负载,free 看内存。如果是 CPU 飙高,我会配合 top -Hpjstack 定位到具体的 Java 线程代码。”

这套回答,既有广度,又有深度,直接把面试官的好感度拉满! 


博主建议:

一定要找个 Linux 环境(阿里云服务器,或者本地装个虚拟机)亲手敲一遍!肌肉记忆比死记硬背强一万倍。

下期预告:

Linux 搞定了,那 Docker 呢?

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐