要查「誰占用 8080」或「服務有沒有 listen」,先看 socket 綁在哪個位址,再對 PID、服務管理器與防火牆。只看到 LISTEN 不代表外部一定連得到。
動手前:輸出可能包含內網 IP、程序名稱與使用者。停止程序前先確認它屬於哪個服務;不要看到 port 被占用就直接 kill -9。
Linux ss
列出 TCP/UDP listening socketLinux
ss -lntup看程序資訊可能需要較高權限。
只看 TCP listenLinux
ss -lnt-n 不解析服務名稱,顯示較快。
只看 UDP listenLinux
ss -lnuUDP 沒有 TCP 那種 established 狀態。
看所有 TCP 連線Linux
ss -ant包含 LISTEN、ESTAB、TIME-WAIT 等。
篩選目的 port 443Linux
ss -ant 'dport = :443'filter 語法依 ss 版本。
篩選來源 port 22Linux
ss -ant 'sport = :22'查看 SSH server 連線。
看 socket 摘要Linux
ss -s快速了解 TCP 狀態分布。
看 Unix domain socketLinux
ss -lx本機服務間通訊常用。
lsof 查程序
查誰占用 TCP 8080Linux/macOS
lsof -nP -iTCP:8080 -sTCP:LISTEN-nP 避免 DNS 與服務名稱解析。
列出所有 TCP listenLinux/macOS
lsof -nP -iTCP -sTCP:LISTEN可對 PID 與 COMMAND。
查單一程序開啟的網路Linux/macOS
lsof -nP -a -p 1234 -i-a 代表條件 AND;PID 換成實際值。
查單一檔案被誰開啟Linux/macOS
lsof /var/log/app.loglog rotate 排查常用。
找已刪除仍開啟檔案Linux
lsof +L1可能是磁碟空間沒釋放的原因。
查某個 mount point 使用者Linux/macOS
lsof +D /mnt/data+D 會遞迴且可能很慢,先限制範圍。
netstat 與 Windows
Linux 傳統 TCP listenLinux net-tools
netstat -lntp新系統優先用 ss;看 PID 可能需較高權限。
macOS 看 TCP listenmacOS
netstat -anv -p tcp | grep LISTENBSD netstat 參數與 Linux 不同。
Windows 看連線與 PIDWindows CMD
netstat -ano最後一欄是 PID,可用 tasklist 對照。
Windows 篩 8080Windows CMD
netstat -ano | findstr :8080可能同時命中本機與遠端 port。
Windows 對 PID 查程序Windows CMD
tasklist /FI "PID eq 1234"把 1234 換成 netstat 查到的 PID。
PowerShell 查 TCP listenWindows PowerShell
Get-NetTCPConnection -State Listen | Sort-Object LocalPort可再用 OwningProcess 對程序。
怎麼確認有做對
- 確認 socket 綁 127.0.0.1、特定介面還是 0.0.0.0/::。
- 用程序管理器或 systemctl 對應 PID。
- 從另一台主機測 TCP port,分清楚 listen 與網路可達性。
常見錯誤
- LISTEN 就認定外網可達。
- 忽略 IPv6 的 :: listener。
- 看到 PID 就直接終止,沒有確認 supervisor。
- lsof +D 對大型目錄造成長時間掃描。
版本與官方文件
參數會隨工具版本與作業系統實作改變。正式環境先用 --help、-h 或系統內建說明確認,再以當版官方文件為準。