Java后端必会Linux常用命令之一篇搞懂日志、进程、端口、部署
聚焦Java后端开发者高频使用的Linux命令,涵盖日志实时查看(tail-f)、进程管理(ps-ef、kill)、端口排查(netstat、lsof)、项目部署(nohupjava-jar)、文件操作(ls、cd、cp、mv、rm)、关键字搜索(grep)及系统资源监控(top、free、df)。针对接口报错、启动失败、磁盘满等常见场景给出排查步骤。
前言
对于 Ja va 后端开发者而言,Linux 是一个怎么都绕不开的话题。

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


































