Linux 查看端口被佔用

原文鏈接:http://www.zhoubotong.site/post/38.html

端口被佔用網上很多,這種頻繁操作的命令容易忘記,寫這邊文章的目的主要是加深操作命令的印象,

Liux 查看端口占用情況可以使用 lsof 和 netstat 命令。


lsof

lsof(list open files)是一個列出當前系統打開文件的工具。

lsof 查看端口占用語法格式:

lsof -i:端口號 

使用實例

查看服務器 3306 端口的佔用情況

[zpt@iZXw45Z ~]$ sudo lsof -i:3306
COMMAND   PID  USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME
mysqld  28165 mysql   33u  IPv6 165455798      0t0  TCP *:mysql (LISTEN)

可以看到 3306 端口已經被mysql 服務佔用。注意:lsof -i 需要 root 用戶的權限來執行,

這裏補充下上圖lsof命令輸出的各列的含義:

COMMAND: 進程的名稱
PID: 進程標識符
USER: 進程所有者
FD: 文件描述符,應用程序通過文件描述符識別該文件
TYPE: 文件類型
DEVICE: 以逗號分隔設備編號(磁盤名稱)
SIZE: 文件的大小(bytes)
NODE: 索引節點(文件在磁盤上的標識)
NAME: 打開文件的確切名稱 

FD(文件描述列表)

cwd:表示current work dirctory,即:應用程序的當前工作目錄,這是該應用程序啓動的目錄,除非它本身對這個目錄進行更改
txt:該類型的文件是程序代碼,如應用程序二進制文件本身或共享庫,如上列表中顯示的 /sbin/init 程序
lnn:library references (AIX);
er:FD information error (see NAME column);
jld:jail directory (FreeBSD);
ltx:shared library text (code and data);
mxx :hex memory-mapped type number xx.
m86:DOS Merge mapped file;
mem:memory-mapped file;
mmap:memory-mapped device;
pd:parent directory;
rtd:root directory;
tr:kernel trace file (OpenBSD);
v86  VP/ix mapped file;
0:表示標準輸出
1:表示標準輸入
2:表示標準錯誤 

一般在標準輸出、標準錯誤、標準輸入後還跟着文件狀態模式:

u:表示該文件被打開並處於讀取/寫入模式。
r:表示該文件被打開並處於只讀模式。
w:表示該文件被打開並處於。
空格:表示該文件的狀態模式爲unknow,且沒有鎖定。
-:表示該文件的狀態模式爲unknow,且被鎖定。

TYPE(文件類型)

REG:文件
DIR:表示目錄。
CHR:表示字符類型。
BLK:塊設備類型。
UNIX: UNIX 域套接字。
FIFO:先進先出 (FIFO) 隊列。
IPv4:網際協議 (IP) 套接字  

lsof常用參數以及實戰

-a:列出打開文件存在的進程;
-c<進程名>:列出指定進程所打開的文件;
-g:列出GID號進程詳情;
-d<文件號>:列出佔用該文件號的進程;
+d<目錄>:列出目錄下被打開的文件;
+D<目錄>:遞歸列出目錄下被打開的文件;
-n<目錄>:列出使用NFS的文件;
-i<條件>:列出符合條件的進程。(4、6、協議、:端口、 @ip )
-p<進程號>:列出指定進程號所打開的文件;
-u:列出UID號進程詳情;
-h:顯示幫助信息;
-v:顯示版本信息  

查看哪些進程打開了某個文件

lsof /lib/Fonts/Brial.ttf
lsof /dev/null

查看哪些進程打開了某個目錄

lsof ~/www/wwwroot/blog 

查看某個進程程序所打開的文件信息

lsof -c mysql #查看mysql這個進程打開的文件 

lsof綜合舉例

lsof -i:8080:查看8080端口占用
lsof abc.txt:顯示開啓文件abc.txt的進程
lsof -c abc:顯示abc進程現在打開的文件
lsof -c -p 1234:列出進程號爲1234的進程所打開的文件
lsof -g gid:顯示歸屬gid的進程情況
lsof +d /usr/local/:顯示目錄下被進程開啓的文件
lsof +D /usr/local/:同上,但是會搜索目錄下的目錄,時間較長
lsof -d 4:顯示使用fd爲4的進程
lsof -i -U:顯示所有打開的端口和UNIX domain文件 

再介紹另外一種常用的命令:

netstat

netstat -tunlp 用於顯示 tcp,udp 的端口和進程等相關情況。

netstat 查看端口占用語法格式:

netstat -tunlp | grep 端口號
-t (tcp) 僅顯示tcp相關選項

-u (udp)僅顯示udp相關選項

-n 拒絕顯示別名,能顯示數字的全部轉化爲數字

-l 僅列出在Listen(監聽)的服務狀態

-p 顯示建立相關鏈接的程序名 

例如查看 8080 端口的情況,使用以下命令:

netstat -tunlp | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      6256/./express  

更多命令:

netstat -ntlp   //查看當前所有tcp端口
netstat -ntulp | grep 80   //查看所有80端口使用情況
netstat -ntulp | grep 3306   //查看所有3306端口使用情況

kill

在查到端口占用的進程後,如果你要殺掉對應的進程可以使用 kill 命令:

Bash
kill -9 PID

比如上實例,我們看到mysql的 3306 端口對應的 PID 爲 28165,使用以下命令殺死進程:

Bash
kill -9 28165
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章