视频看了几百小时还迷糊?关注我,几分钟让你秒懂!


作为后端开发,你写的代码最终都会部署在 Linux 服务器上运行。如果你只会写 Java、调接口,却不会在 Linux 上排查问题、分析性能、管理进程,那你就只是“半吊子”开发者。

本文将手把手带你掌握 后端工程师必须精通的 Linux 命令,并结合 Spring Boot 实际场景,告诉你什么时候用、为什么用、怎么用,连小白都能看懂!


一、为什么后端必须会 Linux?

  • 应用部署在 Linux 服务器(99% 的生产环境)
  • 日志、配置、性能监控都在命令行完成
  • 面试高频考点(“你怎么排查 CPU 100%?”)
  • 自动化运维、CI/CD 脚本都依赖 Shell

💡 记住:不会 Linux 的后端,就像不会开车的司机——只能坐在副驾!


二、核心命令分类 & 使用场景

✅ 1. 进程管理:pstopkilljps

场景:应用卡死、CPU 飙高、查 Java 进程
# 查看所有 Java 进程(最常用!)
jps -l
# 输出:
# 12345 org.springframework.boot.loader.JarLauncher
# 67890 sun.tools.jps.Jps

# 查看进程详细信息(PID=12345)
ps -ef | grep 12345

# 实时监控系统资源(按 q 退出)
top

# 查看某个进程的线程 CPU 占用(定位热点线程)
top -H -p 12345

# 强制杀死进程(慎用!)
kill -9 12345

🔍 实战案例
用户反馈系统变慢,你登录服务器执行 top,发现 Java 进程 CPU 占用 98%。
接着用 top -H -p 12345 找到高 CPU 线程 ID(如 12350),转为 16 进制(0x3042),再用 jstack 12345 | grep -A 20 0x3042 定位到死循环代码!


✅ 2. 网络诊断:netstatsslsoftelnet

场景:端口被占用?服务无法访问?连接泄漏?
# 查看 8080 端口是否被占用
netstat -tunlp | grep 8080
# 或(更现代)
ss -tulnp | grep 8080

# 查看某个进程打开了哪些网络连接
lsof -i -P -n | grep 12345

# 测试能否连通数据库(3306)
telnet 192.168.1.100 3306

# 查看本地监听的所有端口
ss -ltn

🔍 实战案例
启动 Spring Boot 应用时报错 Address already in use
lsof -i :8080 发现是旧进程没关,执行 kill -9 <PID> 后重启成功。


✅ 3. 文件与磁盘:dfdufindls

场景:磁盘爆满?日志占空间?找配置文件?
# 查看磁盘使用情况(关键!)
df -h

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

# 找出大于 100MB 的日志文件
find /var/log -name "*.log" -size +100M

# 按修改时间排序列出文件(最新在前)
ls -lt /var/log/myapp/

🔍 实战案例
系统报警“磁盘使用率 95%”。
du -sh /var/log/* 发现 app.log 占了 50GB,原来是日志没配置滚动策略!
紧急清理:> /var/log/myapp/app.log(清空但不删除文件,避免进程异常)。


✅ 4. 性能分析:vmstatiostatfree

场景:系统卡顿?内存泄漏?I/O 瓶颈?
# 查看内存使用(重点看 available)
free -h

# 查看 CPU、内存、IO 综合状态(每2秒刷新)
vmstat 2

# 查看磁盘 I/O 性能
iostat -x 2

🔍 实战案例
应用响应慢,free -h 显示内存几乎耗尽,swap 被大量使用。
jstat -gc <PID> 发现老年代持续增长 → 内存泄漏!
导出堆 dump:jmap -dump:format=b,file=heap.hprof 12345,用 MAT 分析。


✅ 5. 日志分析:grepawktailless(前文已讲,略)


✅ 6. 权限与用户:chmodchownsudo

场景:启动脚本报权限错误?日志写不进去?
# 给启动脚本执行权限
chmod +x start.sh

# 修改日志目录属主为 appuser
chown -R appuser:appuser /var/log/myapp

# 以普通用户身份运行(安全最佳实践)
sudo -u appuser java -jar app.jar

⚠️ 反例:直接用 root 启动 Java 应用 → 一旦被入侵,黑客拥有最高权限!


三、反例 & 注意事项(血泪教训)

❌ 反例1:在生产环境直接 rm -rf /

# 千万别手抖!
rm -rf /   # 系统直接报废

✅ 正确做法:先 ls 确认路径,再 rm -i 交互式删除。


❌ 反例2:用 kill -9 代替优雅停机

kill -9 12345  # 直接杀进程,可能导致数据丢失

✅ 正确做法:先发 SIGTERM(默认 kill),让 Spring Boot 执行 shutdown hook:

kill 12345  # 应用会正常关闭连接、保存缓存等

❌ 反例3:忽略文件描述符限制

高并发下出现 Too many open files 错误。 ✅ 解决方案:

# 临时提高限制
ulimit -n 65536

# 永久生效:修改 /etc/security/limits.conf
appuser soft nofile 65536
appuser hard nofile 65536

四、Spring Boot + Linux 实战:一键部署脚本

创建 deploy.sh

#!/bin/bash
APP_NAME="myapp.jar"
PID=$(pgrep -f $APP_NAME)

# 停止旧进程
if [ -n "$PID" ]; then
  echo "Stopping $APP_NAME (PID: $PID)..."
  kill $PID
  sleep 5
fi

# 清理旧日志(保留最近3天)
find /var/log/myapp -name "app.*.log" -mtime +3 -delete

# 启动新版本
nohup java -Xms512m -Xmx1g -jar $APP_NAME \
  --spring.profiles.active=prod \
  > /var/log/myapp/app.log 2>&1 &

echo "Started. PID: $(pgrep -f $APP_NAME)"

赋予执行权限并运行:

chmod +x deploy.sh
./deploy.sh

五、总结:后端必备 Linux 命令清单

类别 命令 核心用途
进程 jps, ps, top, kill 查 Java 进程、杀进程、看 CPU
网络 netstat, ss, lsof 查端口、连通性、连接数
磁盘 df, du, find 看空间、找大文件
性能 free, vmstat, iostat 内存、CPU、IO 监控
日志 grep, tail -f, awk 过滤、追踪、提取
权限 chmod, chown, sudo 改权限、切换用户

记住:命令不是背出来的,是在解决问题中练出来的!
下次线上出问题,别只会喊“运维救我”,自己动手查一查,你会成长飞快!


视频看了几百小时还迷糊?关注我,几分钟让你秒懂!

Logo

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

更多推荐