Java后端必會Linux常用命令之一篇搞懂日志、進(jìn)程、端口、部署
前言
對于 Java 后端開發(fā)來說,Linux 是繞不開的。
平時(shí)我們寫完 Spring Boot 項(xiàng)目之后,最終大概率還是要部署到 Linux 服務(wù)器上。項(xiàng)目上線之后,如果接口報(bào)錯(cuò)、服務(wù)啟動(dòng)失敗、端口被占用、日志文件太大、磁盤空間不足,基本都需要通過 Linux 命令去排查。
所以 Linux 命令不是運(yùn)維才需要會,Java 后端也必須掌握一些高頻命令。
這篇文章主要總結(jié)后端開發(fā)中最常用的一些 Linux 命令,不追求大而全,重點(diǎn)放在實(shí)際開發(fā)和部署場景中怎么用。
一、目錄和文件相關(guān)命令
1. 查看當(dāng)前目錄
pwd
pwd 用來查看當(dāng)前所在目錄。
比如登錄服務(wù)器之后,不確定自己在哪個(gè)路徑下,就可以先執(zhí)行:
pwd
2. 查看目錄文件
ls ls -l ls -lh ls -a
常用說明:
ls:查看當(dāng)前目錄下的文件
ls -l:以列表形式查看文件詳情
ls -lh:以更友好的方式顯示文件大小
ls -a:查看所有文件,包括隱藏文件
平時(shí)后端開發(fā)最常用的是:
ls -lh
比如查看 jar 包、日志文件、配置文件大小時(shí)非常方便。
3. 切換目錄
cd /opt cd /opt/app cd .. cd ~
說明:
cd /opt:進(jìn)入 /opt 目錄
cd ..:返回上一級目錄
cd ~:回到當(dāng)前用戶家目錄
后端項(xiàng)目一般可能部署在這些目錄:
/opt/app /usr/local/app /home/app
4. 創(chuàng)建目錄
mkdir logs mkdir -p /opt/app/logs
mkdir 用來創(chuàng)建目錄。
如果要一次性創(chuàng)建多級目錄,可以使用:
mkdir -p /opt/app/logs
5. 創(chuàng)建文件
touch app.log touch application.yml
touch 可以用來創(chuàng)建一個(gè)空文件。
比如創(chuàng)建日志文件:
touch app.log
6. 復(fù)制文件
cp app.jar /opt/app/ cp application.yml /opt/app/config/
復(fù)制目錄時(shí)需要加 -r:
cp -r logs /opt/backup/
7. 移動(dòng)或重命名文件
mv app.jar /opt/app/ mv old.log new.log
mv 既可以移動(dòng)文件,也可以重命名文件。
比如把日志文件重命名:
mv nohup.out nohup-2026-05-08.out
8. 刪除文件或目錄
rm app.log rm -rf logs/
注意:
rm -rf
這個(gè)命令要謹(jǐn)慎使用,尤其不要在根目錄或者不確定的目錄下亂執(zhí)行。
二、查看文件內(nèi)容
1. 查看整個(gè)文件
cat app.log
cat 適合查看內(nèi)容比較少的文件。
如果日志文件很大,不建議直接使用 cat,容易刷屏。
2. 分頁查看文件
less app.log
less 適合查看大文件。
常用操作:
空格:向下翻頁
b:向上翻頁
/關(guān)鍵字:搜索關(guān)鍵字
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
查看最后 100 行日志:
tail -n 100 app.log
5. 實(shí)時(shí)查看日志
tail -f app.log tail -f nohup.out
這是后端開發(fā)最常用的命令之一。
比如 Spring Boot 項(xiàng)目啟動(dòng)后,可以通過下面命令實(shí)時(shí)查看日志:
tail -f nohup.out
如果線上接口報(bào)錯(cuò),也可以實(shí)時(shí)觀察日志輸出:
tail -f app.log
三、搜索日志和關(guān)鍵字
1. grep 搜索關(guān)鍵字
grep "ERROR" app.log grep "Exception" app.log grep "NullPointerException" app.log
比如排查空指針異常:
grep "NullPointerException" app.log
2. 顯示行號
grep -n "ERROR" app.log
-n 可以顯示匹配內(nèi)容所在的行號。
3. 忽略大小寫
grep -i "error" app.log
4. 查看關(guān)鍵字前后幾行
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 行
排查異常時(shí)很有用:
grep -C 10 "Exception" app.log
四、進(jìn)程相關(guān)命令
1. 查看所有進(jìn)程
ps -ef
2. 查看 Java 進(jìn)程
ps -ef | grep java
這是部署 Java 項(xiàng)目時(shí)非常常用的命令。
比如查看 Spring Boot 項(xiàng)目是否正在運(yùn)行:
ps -ef | grep app.jar
3. 使用 jps 查看 Java 進(jìn)程
ps -ef
jps 是 JDK 自帶的工具,可以查看 Java 進(jìn)程。
jps -l
可以顯示完整類名或 jar 包路徑。
4. 結(jié)束進(jìn)程
kill 進(jìn)程ID kill -9 進(jìn)程ID
一般可以先使用:
kill 進(jìn)程ID
如果進(jìn)程無法正常結(jié)束,再使用:
kill -9 進(jìn)程ID
比如:
kill -9 12345
五、端口相關(guān)命令
1. 查看端口占用
netstat -tunlp
查看某個(gè)端口是否被占用:
netstat -tunlp | grep 8080
2. 使用 lsof 查看端口
lsof -i:8080
比如 Spring Boot 啟動(dòng)失敗,提示 8080 端口被占用,可以執(zhí)行:
lsof -i:8080
然后根據(jù)查到的 PID 結(jié)束進(jìn)程:
kill -9 進(jìn)程ID
3. 使用 ss 查看端口
ss -tunlp ss -tunlp | grep 8080
有些 Linux 系統(tǒng)中,ss 比 netstat 更推薦使用。
六、Spring Boot 項(xiàng)目部署常用命令
1. 前臺啟動(dòng)
java -jar app.jar
這種方式啟動(dòng)后,終端關(guān)閉,程序也會停止。
所以實(shí)際部署時(shí)一般不這么用。
2. 后臺啟動(dòng)
nohup java -jar app.jar > nohup.out 2>&1 &
這是非常常見的 Spring Boot 后臺啟動(dòng)命令。
解釋一下:
nohup:表示不掛斷運(yùn)行
java -jar app.jar:啟動(dòng) jar 包
> nohup.out:標(biāo)準(zhǔn)輸出寫入 nohup.out
2>&1:錯(cuò)誤輸出也寫入 nohup.out
&:后臺運(yùn)行
啟動(dòng)后可以查看日志:
tail -f nohup.out
3. 指定配置文件啟動(dòng)
nohup java -jar app.jar --spring.profiles.active=prod > nohup.out 2>&1 &
表示使用 prod 環(huán)境配置啟動(dòng)。
4. 指定端口啟動(dòng)
nohup java -jar app.jar --server.port=8081 > nohup.out 2>&1 &
5. 指定 JVM 參數(shù)啟動(dòng)
nohup java -Xms512m -Xmx1024m -jar app.jar > nohup.out 2>&1 &
說明:
-Xms512m:初始堆內(nèi)存 512MB
-Xmx1024m:最大堆內(nèi)存 1024MB
七、系統(tǒng)資源查看命令
1. 查看 CPU 和內(nèi)存占用
top
top 可以實(shí)時(shí)查看系統(tǒng)資源占用情況。
常見關(guān)注:
CPU 使用率
內(nèi)存使用率
系統(tǒng)負(fù)載
哪個(gè)進(jìn)程占用資源高
2. 查看內(nèi)存
free -h
-h 表示用更友好的單位顯示,比如 GB、MB。
3. 查看磁盤空間
df -h
如果項(xiàng)目日志寫不進(jìn)去,或者服務(wù)器異常,磁盤空間是必須排查的一項(xiàng)。
4. 查看目錄大小
du -sh * du -sh logs/
查看當(dāng)前目錄下各文件和目錄大?。?/p>
du -sh *
查看 logs 目錄大?。?/p>
du -sh logs/
5. 查看系統(tǒng)負(fù)載
uptime
可以查看系統(tǒng)運(yùn)行時(shí)間和平均負(fù)載。
八、壓縮和解壓命令
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@服務(wù)器IP:/opt/app/
比如:
scp app.jar root@192.168.1.100:/opt/app/
2. scp 下載文件
scp root@服務(wù)器IP:/opt/app/app.log ./
比如下載服務(wù)器日志:
scp root@192.168.1.100:/opt/app/app.log ./
3. 上傳目錄
scp -r dist/ root@服務(wù)器IP:/opt/app/
十、權(quán)限相關(guān)命令
1. 修改文件權(quán)限
chmod 755 start.sh chmod +x start.sh
如果 shell 腳本無法執(zhí)行,可以加執(zhí)行權(quán)限:
chmod +x start.sh
然后執(zhí)行:
./start.sh
2. 修改文件所屬用戶
chown appuser:appuser app.jar
表示把 app.jar 的所屬用戶和用戶組改為 appuser。
十一、常見后端排查場景
場景一:接口報(bào) 500,怎么查?
先看日志:
tail -f app.log
搜索異常:
grep -C 10 "Exception" app.log
如果是空指針:
grep -C 10 "NullPointerException" app.log
場景二:Spring Boot 項(xiàng)目啟動(dòng)失敗
先看啟動(dòng)日志:
tail -f nohup.out
查看 Java 進(jìn)程:
ps -ef | grep java
查看端口是否被占用:
lsof -i:8080
如果端口被占用,可以結(jié)束對應(yīng)進(jìn)程:
kill -9 進(jìn)程ID
場景三:服務(wù)器磁盤滿了
查看磁盤空間:
df -h
查看當(dāng)前目錄下文件大小:
du -sh *
一般日志目錄可能比較大:
du -sh logs/
可以壓縮歷史日志:
tar -zcvf logs-backup.tar.gz logs/
場景四:項(xiàng)目突然變慢
查看系統(tǒng)資源:
top
查看內(nèi)存:
free -h
查看磁盤:
df -h
查看 Java 進(jìn)程:
ps -ef | grep java
十二、常用命令速查表
| 場景 | 命令 |
|---|---|
| 查看當(dāng)前目錄 | pwd |
| 查看文件列表 | ls -lh |
| 切換目錄 | cd /opt/app |
| 創(chuàng)建目錄 | mkdir -p logs |
| 創(chuàng)建文件 | touch app.log |
| 復(fù)制文件 | cp app.jar /opt/app/ |
| 移動(dòng)文件 | mv app.jar /opt/app/ |
| 刪除文件 | rm app.log |
| 實(shí)時(shí)看日志 | tail -f app.log |
| 搜索異常 | grep -C 10 "Exception" app.log |
| 查看 Java 進(jìn)程 | `ps -ef |
| 查看端口 | lsof -i:8080 |
| 殺掉進(jìn)程 | kill -9 進(jìn)程ID |
| 查看內(nèi)存 | free -h |
| 查看磁盤 | df -h |
| 查看目錄大小 | du -sh * |
| 后臺啟動(dòng) jar | nohup java -jar app.jar > nohup.out 2>&1 & |
| 解壓 tar.gz | tar -zxvf app.tar.gz |
| 壓縮目錄 | tar -zcvf logs.tar.gz logs/ |
| 上傳文件 | scp app.jar root@服務(wù)器IP:/opt/app/ |
總結(jié)
Linux 命令對于 Java 后端開發(fā)來說非常重要。
實(shí)際工作中,我們不一定要記住所有 Linux 命令,但是一些高頻命令必須熟悉,比如文件操作、日志查看、進(jìn)程管理、端口排查、項(xiàng)目部署、磁盤和內(nèi)存查看、權(quán)限修改。
尤其是部署 Spring Boot 項(xiàng)目、查看線上日志、排查端口占用、分析服務(wù)器資源這些場景,基本每天都會遇到。
所以學(xué)習(xí) Linux 命令,不是為了背命令,而是為了在項(xiàng)目出問題時(shí),能夠快速定位問題、解決問題。
到此這篇關(guān)于Java后端必會Linux常用命令之一篇搞懂日志、進(jìn)程、端口、部署的文章就介紹到這了,更多相關(guān)Java后端Linux常用命令內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java實(shí)現(xiàn)n位數(shù)字的全排列
今天小編就為大家分享一篇關(guān)于Java實(shí)現(xiàn)n位數(shù)字的全排列,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-02-02
java向上轉(zhuǎn)型發(fā)生的時(shí)機(jī)知識點(diǎn)詳解
在本篇文章里小編給大家整理分享的是關(guān)于java向上轉(zhuǎn)型發(fā)生的時(shí)機(jī)知識點(diǎn)內(nèi)容,有興趣的讀者們可以參考下。2021-05-05
淺談Java并發(fā) J.U.C之AQS:CLH同步隊(duì)列
AQS內(nèi)部維護(hù)著一個(gè)FIFO隊(duì)列,該隊(duì)列就是CLH同步隊(duì)列。下面小編來簡單介紹下這個(gè)隊(duì)列2019-05-05
net.sf.json.JSONObject 為null 的判斷方法
下面小編就為大家?guī)硪黄猲et.sf.json.JSONObject 為null 的判斷方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02
Java Web Listener實(shí)現(xiàn)事件監(jiān)聽與處理
Java Web開發(fā)中的Listener是一種事件機(jī)制,通過監(jiān)聽Web應(yīng)用程序的事件,實(shí)現(xiàn)對事件的處理,從而實(shí)現(xiàn)更加靈活和高效的應(yīng)用程序開發(fā)。Listener能夠監(jiān)聽的事件包括應(yīng)用程序啟動(dòng)和關(guān)閉、Session創(chuàng)建和銷毀、請求和響應(yīng)對象的創(chuàng)建和銷毀等2023-04-04
java實(shí)現(xiàn)航空用戶管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)航空用戶管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07
Netty分布式高性能工具類FastThreadLocal和Recycler分析
這篇文章主要為大家介紹了Netty分布式高性能工具類FastThreadLocal和Recycler分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03

