后端必须精通的 Linux 操作命令及使用场景(附 Spring Boot 实战)
视频看了几百小时还迷糊?关注我,几分钟让你秒懂!
作为后端开发,你写的代码最终都会部署在 Linux 服务器上运行。如果你只会写 Java、调接口,却不会在 Linux 上排查问题、分析性能、管理进程,那你就只是“半吊子”开发者。
本文将手把手带你掌握 后端工程师必须精通的 Linux 命令,并结合 Spring Boot 实际场景,告诉你什么时候用、为什么用、怎么用,连小白都能看懂!
一、为什么后端必须会 Linux?
- 应用部署在 Linux 服务器(99% 的生产环境)
- 日志、配置、性能监控都在命令行完成
- 面试高频考点(“你怎么排查 CPU 100%?”)
- 自动化运维、CI/CD 脚本都依赖 Shell
💡 记住:不会 Linux 的后端,就像不会开车的司机——只能坐在副驾!
二、核心命令分类 & 使用场景
✅ 1. 进程管理:ps、top、kill、jps
场景:应用卡死、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. 网络诊断:netstat、ss、lsof、telnet
场景:端口被占用?服务无法访问?连接泄漏?
# 查看 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. 文件与磁盘:df、du、find、ls
场景:磁盘爆满?日志占空间?找配置文件?
# 查看磁盘使用情况(关键!)
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. 性能分析:vmstat、iostat、free
场景:系统卡顿?内存泄漏?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. 日志分析:grep、awk、tail、less(前文已讲,略)
✅ 6. 权限与用户:chmod、chown、sudo
场景:启动脚本报权限错误?日志写不进去?
# 给启动脚本执行权限
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 |
改权限、切换用户 |
记住:命令不是背出来的,是在解决问题中练出来的!
下次线上出问题,别只会喊“运维救我”,自己动手查一查,你会成长飞快!
视频看了几百小时还迷糊?关注我,几分钟让你秒懂!
更多推荐

所有评论(0)