发布于2026-07-01 阅读(0)
扫一扫,手机访问
对于 Ja va 后端开发者而言,Linux 是一个怎么都绕不开的话题。

大多数时候,你精心打磨的 Spring Boot 项目,最终还是要被部署到一台 Linux 服务器上。一旦项目上线,各种状况就来了:接口报错、服务启动失败、端口被莫名其妙地占用、日志文件撑爆磁盘……这些场景,只要你不打算用重启大法解决一切,那就免不了要用 Linux 命令去排查。
所以,别再觉得 Linux 只是运维同事的专属技能。对于后端开发者来说,掌握一些高频命令,就是保障项目稳定运行的硬通货。这篇文章就不做“面面俱到”的百科全书了,重点聚焦我们在实际开发和部署中最常用的那些场景。
pwd
当你登录到一台陌生的服务器,大脑一片空白时,第一件事就是搞清自己在哪。这时 pwd 就是你最忠实的向导。
pwd
它会直接告诉你当前所处的绝对路径。
ls ls -l ls -lh ls -a
这几个命令看着简单,但用法却不少,我们来拆解一下:
ls:最基础的,列出当前目录下的文件名。ls -l:以列表形式展示,能看到文件的权限、所有者、大小、修改时间。ls -lh:这个最实用,因为它会用 KB、MB 这种好理解的单位显示文件大小。ls -a:把隐藏文件(比如 .gitignore)也揪出来。日常开发中,ls -lh 基本是高频使用的。不管是查看 jar 包的大小,还是检查日志文件是否过大,它都非常直观。
cd /opt cd /opt/app cd .. cd ~
这一点不难理解,cd 命令帮你实现目录间的灵活跳跃。比如:
cd /opt:直接跳转到 /opt 目录。cd ..:返回上一级目录。cd ~:回到当前用户的家目录。一般来说,Ja va 后端项目喜欢驻扎在 /opt/app、/usr/local/app 或 /home/app 这类目录下。
mkdir logs mkdir -p /opt/app/logs
如果你想一次性创建一个多级目录树,比如 /opt/app/logs,直接使用 mkdir -p /opt/app/logs 就能一步到位,不必一层层手动创建,省心不少。
touch app.log touch application.yml
这个命令非常“轻型”,就是个空文件生成器。比如你需要创建一个日志文件来记录信息,直接 touch app.log 即可。
cp app.jar /opt/app/ cp application.yml /opt/app/config/
复制文件是常规操作,但如果是复制目录,记得加一个 -r 参数:cp -r logs /opt/backup/
mv app.jar /opt/app/ mv old.log new.log
这里有个小技巧:mv 命令既可以搬家,也可以改名。比如你想把 nohup.out 这个日志文件改名备份,直接执行 mv nohup.out nohup-2026-05-08.out 就行。
rm app.log rm -rf logs/
这里需要特别提醒一下:rm -rf 是核武器级别的命令,一定一定慎用。尤其是在根目录或者你不确定当前路径的情况下,随意执行这行命令,可能会带来灾难性的后果。
cat app.log
cat 适合查看没有多少内容的文件。如果日志文件很大,那它会把你的命令行窗口刷得眼花缭乱。
less app.log
less 是大文件阅读神器。你可以这样操作:按空格向下翻页,按 b 向上翻页,输入 /关键字 可以快速搜索,查看完毕按 q 就能退出。
head app.log head -n 100 app.log
如果你想快速预览日志的开头部分,比如前 100 行,可以用 head -n 100 app.log。
tail app.log tail -n 100 app.log
跟 head 对称,tail 看的是文件的尾部。比如:tail -n 100 app.log 可以查看最后 100 行的日志。
tail -f app.log tail -f nohup.out
这个命令可以说是后端开发的“必备良药”。当你的 Spring Boot 项目启动后,或者线上接口发生报错需要实时追踪时,tail -f nohup.out 或 tail -f app.log 就能让你像看直播一样看到日志的最新输出。
grep "ERROR" app.log grep "Exception" app.log grep "NullPointerException" app.log
当线上接口返回 500,你第一反应肯定是:异常在哪里?这时 grep 就登场了。比如排查空指针异常,一行 grep "NullPointerException" app.log 就能帮你快速定位。
grep -n "ERROR" app.log
加上 -n 参数,它会同时告诉你匹配行在文件中的行号,方便你结合上下文排查。
grep -i "error" app.log
-i 参数可以忽略大小写,这意味着你输 “error”,它会同时匹配 “Error”、“ERROR” 等所有变体。
grep -C 5 "Exception" app.log grep -A 5 "Exception" app.log grep -B 5 "Exception" app.log
对于理解报错的上下文,这三个参数很有帮助:
-C 5:显示匹配行以及前后各 5 行。-A 5:显示匹配行及其后 5 行。-B 5:显示匹配行及其前 5 行。排查异常时,通常是 grep -C 10 "Exception" app.log,能看到更完整的上下文。
ps -ef
ps -ef | grep ja va
这是个非常高频的组合。当你排查 Spring Boot 项目是否正在运行时,ps -ef | grep app.jar 能够迅速锁定目标进程。
ps -ef
如果你比较“Ja va 化”,JDK 自带了一个挺方便的小工具叫 jps -l,它能直接列出所有正在运行的 Ja va 进程,并显示完整类名或 jar 包路径。
kill 进程ID kill -9 进程ID
关于结束进程,通常我们会先尝试温和的 kill 进程ID,如果进程不听话,再用强制性的 kill -9 进程ID。
netstat -tunlp
当你启动 Spring Boot 时,如果看到“Port 8080 is already in use”的提示,那第一件事就是用 netstat -tunlp | grep 8080 来查看究竟是哪个进程占用了 8080 端口。
lsof -i:8080
另一个常用的命令是 lsof。比如 Spring Boot 启动失败,提示 8080 端口被占,你可以执行 lsof -i:8080,然后根据查到的 PID,执行 kill -9 进程ID 来释放端口。
ss -tunlp ss -tunlp | grep 8080
在一些较新的 Linux 系统中,ss 命令比 netstat 更受推荐,性能更优。
ja va -jar app.jar
这种方式一运行,你的终端就变成了项目的“控制台”。一旦关闭终端,程序也会随之终止,所以一般不用在生产环境里。
nohup ja va -jar app.jar > nohup.out 2>&1 &
这是最常见的 Spring Boot 后台启动方式。我们来拆解一下:
nohup:跟终端断开后也不会停止运行。ja va -jar app.jar:启动 jar 包。> nohup.out:标准输出写入 nohup.out 文件。2>&1:错误输出也一并写入 nohup.out。&:让它在后台运行。启动之后,通过 tail -f nohup.out 就可以实时查看日志。
nohup ja va -jar app.jar --spring.profiles.active=prod > nohup.out 2>&1 &
意思是使用 prod 环境的配置启动项目。
nohup ja va -jar app.jar --server.port=8081 > nohup.out 2>&1 &
nohup ja va -Xms512m -Xmx1024m -jar app.jar > nohup.out 2>&1 &
这里 -Xms512m 设置初始堆内存为 512MB,-Xmx1024m 设置最大堆内存为 1024MB。
top
top 是一个实时监控器,可以直观地看到系统资源的使用情况:CPU 使用率、内存使用率、系统负载、以及哪个进程是“耗能大户”。
free -h
加上 -h 参数后,它会用 GB、MB 这样很容易理解的单位来显示内存总量和使用情况。
df -h
如果项目日志写不进去了,或者服务器突然变得异常,去检查一下磁盘空间往往会发现线索。
du -sh * du -sh logs/
du -sh * 可以查看当前目录下所有文件和目录的大小,而 du -sh logs/ 则专注查看 logs 目录的大小。
uptime
它可以告诉你系统已经运行了多久,以及最近 1 分钟、5 分钟、15 分钟的平均负载情况。
tar -zxvf app.tar.gz
tar -zcvf logs.tar.gz logs/
比如你想备份日志,可以像这样压缩:tar -zcvf logs-2026-05-08.tar.gz logs/
unzip dist.zip
zip -r logs.zip logs/
scp app.jar root@服务器IP:/opt/app/
比如你想把本地的 app.jar 上传到远程服务器,执行 scp app.jar root@192.168.1.100:/opt/app/ 即可。
scp root@服务器IP:/opt/app/app.log ./
从服务器下载日志文件到本地,一行搞定:scp root@192.168.1.100:/opt/app/app.log ./
scp -r dist/ root@服务器IP:/opt/app/
chmod 755 start.sh chmod +x start.sh
如果你写的 shell 脚本没有执行权限,先加一下:chmod +x start.sh,然后就能用 ./start.sh 来执行了。
chown appuser:appuser app.jar
这条命令可以把 app.jar 的所属用户和用户组都改为 appuser。
先看实时日志:tail -f app.log,搜索异常:grep -C 10 "Exception" app.log,如果是空指针,可以再精确搜索:grep -C 10 "NullPointerException" app.log
先看启动日志:tail -f nohup.out,接着查 Ja va 进程:ps -ef | grep ja va,再看看端口是否被占:lsof -i:8080,如果端口被占用,释放它:kill -9 进程ID
先查看磁盘空间:df -h,然后查看目录大小:du -sh *,通常日志目录是“吃磁盘”大户,可以用 du -sh logs/ 确认。如果日志太大,可以先压缩备份:tar -zcvf logs-backup.tar.gz logs/
这里需要组合技能:用 top 看系统资源,free -h 看内存,df -h 看磁盘,再用 ps -ef | grep ja va 看看是不是 Ja va 进程占用了太多资源。
| 场景 | 命令 |
|---|---|
| 查看当前目录 | pwd |
| 查看文件列表 | ls -lh |
| 切换目录 | cd /opt/app |
| 创建目录 | mkdir -p logs |
| 创建文件 | touch app.log |
| 复制文件 | cp app.jar /opt/app/ |
| 移动文件 | mv app.jar /opt/app/ |
| 删除文件 | rm app.log |
| 实时看日志 | tail -f app.log |
| 搜索异常 | grep -C 10 "Exception" app.log |
| 查看 Ja va 进程 | ps -ef|grep ja va |
| 查看端口 | lsof -i:8080 |
| 杀掉进程 | kill -9 进程ID |
| 查看内存 | free -h |
| 查看磁盘 | df -h |
| 查看目录大小 | du -sh * |
| 后台启动 jar | nohup ja va -jar app.jar > nohup.out 2>&1 & |
| 解压 tar.gz | tar -zxvf app.tar.gz |
| 压缩目录 | tar -zcvf logs.tar.gz logs/ |
| 上传文件 | scp app.jar root@服务器IP:/opt/app/ |
Linux 命令对于 Ja va 后端开发来讲,不是锦上添花,而是必备技能。
不一定要把所有命令都背得滚瓜烂熟,但那些高频的、跟日常工作息息相关的命令——文件操作、日志查看、进程管理、端口排查、项目部署、磁盘和内存分析、权限修改,一定要做到心中有数。
尤其是当我们部署 Spring Boot 项目、排查线上日志、分析端口冲突、或者检查服务器资源时,这些命令就像是解决疑难杂症的“趁手工具”。学习 Linux 命令,最终目的不是死记硬背,而是为了在项目出问题时,能快速找到症结、解决问题。
上一篇:怎样提高进程运行效率
下一篇:C++的const相关知识点总结
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8