在 Linux 使用過程中,需要了解當前系統開放了哪些埠,並且要檢視開放這些埠的具體程序和使用者,可以通過 netstat 命令進行簡單查詢
netstat 命令各個引數説明如下:
-t : 指明顯示 TCP 埠
-u : 指明顯示 UDP 埠
-l : 僅顯示監聽套接字 (所謂套接字就是使應用程式能夠讀寫與收發通訊協議 (protocol) 與資料的程式)
-p : 顯示程序識別符號和程式名稱,每一個套接字/埠都屬於一個程式。
-n : 不進行 DNS 輪詢,顯示 IP(可以加速操作)
即可顯示當前站羣服務器上所有埠及程序服務,於 grep 結合可檢視某個具體埠及服務情況··
netstat -ntlp //檢視當前所有 tcp 埠·
netstat -ntulp |grep 80 //檢視所有 80 埠使用情況·
netstat -ntulp | grep 3306 //檢視所有 3306 埠使用情況·
Linux 檢視程式埠佔用情況
使用命令:
ps -aux | grep tomcat
發現並沒有 8080 埠的 Tomcat 程序。
使用命令:netstat –apn
檢視所有的程序和埠使用情況。發現下面的程序列表,其中最後一欄是 PID/Program name
發現 8080 埠被 PID 為 9658 的 Java 程序佔用。
進一步使用命令:ps -aux | grep java,或者直接:ps -aux | grep pid 檢視
就可以明確知道 8080 埠是被哪個程式佔用了!然後判斷是否使用 KILL 命令幹掉!
方法二:直接使用 netstat -anp | grep portno
即:netstat -anp|grep 8080
netstat -anp|grep 8080 –> tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 28500/java
ps -aux | grep 28500 –> r/local/tomcat9-jforum/tomcat
安裝 lsof list open files//—也可以 netstat -tunlp|grep 埠號 netstat -anp|grep 埠號
yum install 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 用以顯示符合條件的程序情況
lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
46 –> IPv4 or IPv6
protocol –> TCP or UDP
hostname –> Internet host name
hostaddr –> IPv4 地址
service –> /etc/service 中的 service name (可以不止一個)
port –> 埠號 (可以不止一個)
lsof -i //顯示所有開啓的埠
lsof -i:80 //顯示所有開啓 80 埠的程序
lsof -i -U //顯示所有開啓的埠和 UNIX domain 檔案
其實我一般這樣用:
[root@VM_39_230_centos bin]# lsof -i:3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 16422 mysql 19u IPv6 148794 0t0 TCP *:mysql (LISTEN)
mysqld 16422 mysql 39u IPv6 643698 0t0 TCP localhost:mysql->localhost:36582 (ESTABLISHED)
mysqld 16422 mysql 45u IPv6 643699 0t0 TCP localhost:mysql->localhost:36584 (ESTABLISHED)
mysqld 16422 mysql 46u IPv6 643700 0t0 TCP localhost:mysql->localhost:36586 (ESTABLISHED)
mysqld 16422 mysql 47u IPv6 643702 0t0 TCP localhost:mysql->localhost:36588 (ESTABLISHED)
mysqld 16422 mysql 48u IPv6 643704 0t0 TCP localhost:mysql->localhost:36590 (ESTABLISHED)
java 17302 root 122u IPv4 643695 0t0 TCP localhost:36582->localhost:mysql (ESTABLISHED)
java 17302 root 123u IPv4 643701 0t0 TCP localhost:36588->localhost:mysql (ESTABLISHED)
java 17302 root 124u IPv4 643696 0t0 TCP localhost:36586->localhost:mysql (ESTABLISHED)
java 17302 root 125u IPv4 643697 0t0 TCP localhost:36584->localhost:mysql (ESTABLISHED)
java 17302 root 126u IPv4 643703 0t0 TCP localhost:36590->localhost:mysql (ESTABLISHED)
或者
[root@VM_39_230_centos bin]# netstat -ntulp | grep 3306
tcp6 0 0 :::3306 :::* LISTEN 16422/mysqld
找到 pid 然後
[root@VM_39_230_centos bin]# ps -aux | grep 16422
mysql 16422 0.0 47.7 1340428 485944 ? Sl Jun29 1:46 /usr/sbin/mysqld –basedir=/usr –datadir=/var/lib/mysql –plugin-dir=/usr/lib64/mysql/plugin –log-error=/var/lib/mysql/VM_39_230_centos.err –pid-file=/var/lib/mysql/VM_39_230_centos.pid
root 25713 0.0 0.0 112616 700 pts/0 R+ 17:04 0:00 grep –color=auto 16422