Linux 查看端口占用情況可以使用 lsof 、ss和 netstat 命令。
一、lsof
lsof命令詳解
lsof(list open files)是一個(gè)列出當(dāng)前系統(tǒng)打開文件的工具。lsof 查看端口占用語(yǔ)法格式:
lsof -i:端口號(hào)
如查看服務(wù)器 2379端口的占用情況:
#注意,lsof默認(rèn)是沒有安裝的,需要自行安裝
yum install lsof -y
[root@k8s-m1 ~]# lsof -i:2379
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
etcd 5680 root 7u IPv4 42209 0t0 TCP k8s-m1:2379 (LISTEN)
可以看到 2379 端口已經(jīng)被輕 etcd 服務(wù)占用。
lsof -i 需要 root 用戶的權(quán)限來執(zhí)行,如下圖:
[root@k8s-m1 ~]# lsof -i|more
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rpcbind 5403 rpc 6u IPv4 41399 0t0 UDP *:sunrpc
rpcbind 5403 rpc 7u IPv4 42127 0t0 UDP *:909
rpcbind 5403 rpc 8u IPv4 42128 0t0 TCP *:sunrpc (LISTEN)
rpcbind 5403 rpc 9u IPv6 42129 0t0 UDP *:sunrpc
rpcbind 5403 rpc 10u IPv6 42130 0t0 UDP *:909
rpcbind 5403 rpc 11u IPv6 42131 0t0 TCP *:sunrpc (LISTEN)
chronyd 5426 chrony 5u IPv4 41466 0t0 UDP localhost:323
chronyd 5426 chrony 6u IPv6 41467 0t0 UDP localhost:323
sshd 5670 root 3u IPv4 48132 0t0 TCP *:ssh (LISTEN)
sshd 5670 root 4u IPv6 48134 0t0 TCP *:ssh (LISTEN)
etcd 5680 root 5u IPv4 42205 0t0 TCP k8s-m1:2380 (LISTEN)
etcd 5680 root 6u IPv4 42208 0t0 TCP localhost:2379 (LISTEN)
etcd 5680 root 7u IPv4 42209 0t0 TCP k8s-m1:2379 (LISTEN)
etcd 5680 root 8u IPv4 42210 0t0 TCP k8s-m1:2380->k8s-m2:48008 (ESTABLISHED)
etcd 5680 root 9u IPv4 45366 0t0 TCP k8s-m1:2380->k8s-m3:41006 (ESTABLISHED)
etcd 5680 root 10u IPv4 45367 0t0 TCP k8s-m1:2380->k8s-m3:41016 (ESTABLISHED)
etcd 5680 root 11u IPv4 42211 0t0 TCP k8s-m1:2380->k8s-m2:48010 (ESTABLISHED)
etcd 5680 root 12u IPv4 43860 0t0 TCP k8s-m1:2379->k8s-m3:57352 (ESTABLISHED)
etcd 5680 root 14u IPv4 61002 0t0 TCP k8s-m1:2379->k8s-m2:48626 (ESTABLISHED)
etcd 5680 root 15u IPv4 7534239 0t0 TCP k8s-m1:2379->k8s-m2:41368 (ESTABLISHED)
etcd 5680 root 16u IPv4 13158470 0t0 TCP k8s-m1:2379->k8s-m1:38664 (ESTABLISHED)
etcd 5680 root 18u IPv4 13137657 0t0 TCP k8s-m1:2379->k8s-m1:38670 (ESTABLISHED)
參數(shù)說明:
COMMAND:進(jìn)程的名稱
PID: 進(jìn)程標(biāo)識(shí)符
USER:進(jìn)程所有者
FD:文件描述符,應(yīng)用程序通過文件描述符識(shí)別該文件。如cwd、txt等
TYPE:文件類型,如IPv4、IPv6、DIR、REG等
DEVICE:指定磁盤的名稱
SIZE:文件的大小
NODE:索引節(jié)點(diǎn)(文件在磁盤上的標(biāo)識(shí))
NAME:打開文件的確切名稱
其中:FD不容易理解,特別說明一下:
?。?)cwd:表示 current work dirctory,即:應(yīng)用程序的當(dāng)前工作目錄,這是該應(yīng)用程序啟動(dòng)的目錄,除非它本身對(duì)這個(gè)目錄進(jìn)行更改
?。?)txt:該類型的文件是程序代碼,如應(yīng)用程序二進(jìn)制文件本身或共享庫(kù),如 /sbin/init 程序
(3)lnn: library references (AIX)
?。?)er: FD information error (see NAME column)
(5)jld: jail directory(FreeBSD)
?。?)ltx: shared library text(code and data)
?。?)mxx: hex memory-mapped type number xx.
?。?)m86:DOS Merge mapped file
(9) mem: memory-mapped file
?。?0)mmap: memory-mapped device
?。?1)pd: parent directory
(12)rtd: root directory
?。?3)tr: kernel trace file (OpenBSD)
(14)v86 VP/ix mapped file
?。?5)0:表示標(biāo)準(zhǔn)輸出
?。?6)1:表示標(biāo)準(zhǔn)輸入
(17)2:表示標(biāo)準(zhǔn)錯(cuò)誤
一般在標(biāo)準(zhǔn)輸出、標(biāo)準(zhǔn)錯(cuò)誤、標(biāo)準(zhǔn)輸入后還跟著文件狀態(tài)模式:r w u 等
(1)u:表示該文件被打開并處于讀取/寫入模式
?。?)r:表示該文件被打開并處于只讀模式
?。?)w:表示該文件被打開并處于只寫入模式
?。?)空格:表示該文件的狀態(tài)模式為 unknown ,且沒有鎖定
(5)- : 表示該文件的狀態(tài)模式為 unknown ,且被鎖定
同時(shí)在文件狀態(tài)模式后面,還跟著相關(guān)的鎖
?。?)N:for a Solaris NFS lock of unknown type
(2)r: for a read lock on part of the file
?。?)R:for a read lock on the entire file
(4)w: for a write lock on part of the file (文件的部分寫鎖)
?。?)W: for a write lock on the entire file(整個(gè)文件的寫鎖)
?。?)u: for a read and write lock of any length
?。?)U: for a lock of unknown type
?。?)x: for an SCO OpenServer Xenix lock on part of the file
?。?)X:for an SCO OpentServer Xenix lock on the entire file
?。?0)space : if there is no lock
更多 lsof 的命令如下:
lsof : 簡(jiǎn)單地執(zhí)行l(wèi)sof會(huì)列出當(dāng)前系統(tǒng)中所有被打開的文件
lsof -u margu : 列出用戶margu打開的文件, 可指定多個(gè)用戶, 默認(rèn)是OR的關(guān)系
lsof -i : 列出打開的套接字
lsof -i tcp : 列出打開的tcp套接字
lsof -i:80:查看80端口占用
lsof -i :ssh : 列出打開22端口的進(jìn)程
lsof -i tcp:2379 : 列出打開2379號(hào)tcp端口的進(jìn)程
lsof -n 不將IP轉(zhuǎn)換為hostname,缺省是不加上-n參數(shù)
lsof test.txt:顯示開啟文件abc.txt的進(jìn)程
lsof -c test:顯示abc進(jìn)程現(xiàn)在打開的文件
lsof -c -p 12345:列出進(jìn)程號(hào)為12345的進(jìn)程所打開的文件
lsof -g gid:顯示歸屬gid的進(jìn)程情況
lsof +d /usr/local/:顯示目錄下被進(jìn)程開啟的文件
lsof +D /usr/local/:同上,但是會(huì)搜索目錄下的目錄,時(shí)間較長(zhǎng)
lsof -d 4:顯示使用fd為4的進(jìn)程
lsof -i -U:顯示所有打開的端口和UNIX domain文件
lsof -p 12345:看進(jìn)程號(hào)為12345的進(jìn)程打開了哪些文件
lsof -s :列出打開文件的大小,如果沒有大小,則留下空白
lsof -d mem : 列出打開映射文件的進(jìn)程
lsof -d txt : 列出打開的可執(zhí)行文件
lsof server.log : 列出打開server.log文件的進(jìn)程, 可指明多個(gè)文件
二、lsof應(yīng)用實(shí)例:
1、du和df顯示磁盤使用量不一樣
用戶刪除了大量的文件后,du命令就不會(huì)在文件系統(tǒng)目錄中統(tǒng)計(jì)這些文件。如果此時(shí)還在運(yùn)行中的進(jìn)程持有這個(gè)已經(jīng)被刪除的文件句柄,那么這個(gè)文件就不會(huì)真正在磁盤中被刪除,分區(qū)超級(jí)塊中的信息也就不會(huì)更改,df命令仍會(huì)統(tǒng)計(jì)這個(gè)被刪除的文件。 通過lsof命令查詢處于deleted狀態(tài)的文件,被刪除的文件在系統(tǒng)中被標(biāo)記為deleted。如果系統(tǒng)有大量deleted狀態(tài)的文件,會(huì)導(dǎo)致du和df命令統(tǒng)計(jì)結(jié)果不一致。
可執(zhí)行如下命令查看lsof |grep deleted
解決方法
根據(jù)lsof列出的進(jìn)程號(hào),終止相應(yīng)進(jìn)程或者重啟相應(yīng)的服務(wù)。也可以重啟實(shí)例,重啟實(shí)例系統(tǒng)會(huì)退出現(xiàn)有的進(jìn)程,重啟后重新加載過程中,會(huì)釋放調(diào)用的deleted文件的句柄。
重要:但某些時(shí)候,我們的服務(wù)器上沒有l(wèi)sof的命令,而且也不能連外網(wǎng)進(jìn)行安裝,可以通過以下的方法查找deleted狀態(tài)的文件。
[root@k8s-m1 ~]# ll /proc/*/fd/|grep deleted
lrwx------ 1 mysql mysql 64 Jun 21 14:53 12 -> /tmp/ibdhpN9t (deleted)
lrwx------ 1 mysql mysql 64 Jun 21 14:53 5 -> /tmp/ibJeq1IW (deleted)
lrwx------ 1 mysql mysql 64 Jun 21 14:53 6 -> /tmp/ibhiCbh3 (deleted)
lrwx------ 1 mysql mysql 64 Jun 21 14:53 7 -> /tmp/ib1JgnP9 (deleted)
lrwx------ 1 mysql mysql 64 Jun 21 14:53 8 -> /tmp/ib5ed98m (deleted)
2、查找誰(shuí)在使用文件系統(tǒng)
在卸載文件系統(tǒng)時(shí),如果該文件系統(tǒng)中有任何打開的文件,操作通常將會(huì)失敗。那么通過lsof可以找出那些進(jìn)程在使用當(dāng)前要卸載的文件系統(tǒng),如下:
在一個(gè)窗口中打開某個(gè)路徑下的文件,如
[root@k8s-m1 docker]# vim /home/docker/Dockerfile
#新開一個(gè)窗口
[root@k8s-m1 ~]# lsof /home/docker
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 25386 root cwd DIR 253,2 4096 16784069 /home/docker
vim 26008 root cwd DIR 253,2 4096 16784069 /home/docker
在這個(gè)示例中,用戶root正在其/home/docker目錄中進(jìn)行一些操作。一個(gè) bash是實(shí)例正在運(yùn)行,并且它當(dāng)前的目錄為/home/docker,另一個(gè)則顯示的是vim正在編輯/home/docker下的文件。要成功地卸載/home/docker,應(yīng)該在通知用戶以確保情況正常之后,中止這些進(jìn)程。 這個(gè)示例說明了應(yīng)用程序的當(dāng)前工作目錄非常重要,因?yàn)樗员3种募Y源,并且可以防止文件系統(tǒng)被卸載。這就是為什么大部分守護(hù)進(jìn)程(后臺(tái)進(jìn)程)將它們的目錄更改為根目錄、或服務(wù)特定的目錄(如 sendmail 示例中的 /var/spool/mqueue)的原因,以避免該守護(hù)進(jìn)程阻止卸載不相關(guān)的文件系統(tǒng)。
3、恢復(fù)刪除的文件當(dāng)(不是所有時(shí)候都有用,可以嘗試)
Linux計(jì)算機(jī)受到入侵時(shí),常見的情況是日志文件被刪除,以掩蓋攻擊者的蹤跡。管理錯(cuò)誤也可能導(dǎo)致意外刪除重要的文件,比如在清理舊日志時(shí),意外地刪除了數(shù)據(jù)庫(kù)的活動(dòng)事務(wù)日志。有時(shí)可以通過lsof來恢復(fù)這些文件。當(dāng)進(jìn)程打開了某個(gè)文件時(shí),只要該進(jìn)程保持打開該文件(進(jìn)程要一直存在,文件要一直被使用,沒有被一直使用的文件是不行的),即使將其刪除,它依然存在于磁盤中。這意味著,進(jìn)程并不知道文件已經(jīng)被刪除,它仍然可以向打開該文件時(shí)提供給它的文件描述符進(jìn)行讀取和寫入。除了該進(jìn)程之外,這個(gè)文件是不可見的,因?yàn)橐呀?jīng)刪除了其相應(yīng)的目錄索引節(jié)點(diǎn)。在/proc 目錄下,其中包含了反映內(nèi)核和進(jìn)程樹的各種文件。/proc目錄掛載的是在內(nèi)存中所映射的一塊區(qū)域,所以這些文件和目錄并不存在于磁盤中,因此當(dāng)我們對(duì)這些文件進(jìn)行讀取和寫入時(shí),實(shí)際上是在從內(nèi)存中獲取相關(guān)信息。如/var/log/messages對(duì)于許多應(yīng)用程序,尤其是日志文件和數(shù)據(jù)庫(kù),這種恢復(fù)刪除文件的方法非常有用,因?yàn)檫@些文件一般都是一直在使用的。
[root@k8s-m1 ~]# rm /var/log/messages
rm: remove regular file ‘/var/log/messages’? y
[root@k8s-m1 ~]# lsof |grep /var/log/messages
rsyslogd 21072 root 9w REG 253,0 333093 101406984 /var/log/messages (deleted)
in:imjour 21072 21074 root 9w REG 253,0 333093 101406984 /var/log/messages (deleted)
in:imudp 21072 21075 root 9w REG 253,0 333093 101406984 /var/log/messages (deleted)
in:imtcp 21072 21076 root 9w REG 253,0 333093 101406984 /var/log/messages (deleted)
in:imtcp 21072 21077 root 9w REG 253,0 333093 101406984 /var/log/messages (deleted)
in:imtcp 21072 21078 root 9w REG 253,0 333093 101406984 /var/log/messages (deleted)
in:imtcp 21072 21079 root 9w REG 253,0 333093 101406984 /var/log/messages (deleted)
in:imtcp 21072 21080 root 9w REG 253,0 333093 101406984 /var/log/messages (deleted)
rs:main 21072 21081 root 9w REG 253,0 333093 101406984 /var/log/messages (deleted)
從上面的信息可以看到 PID 21072 (rsyslogd)打開文件的文件描述符為 9(9w)。同時(shí)還可以看到/var/log/messages已經(jīng)標(biāo)記被刪除了。因此我們可以在 /proc/21072/fd/9 (fd下的每個(gè)以數(shù)字命名的文件表示進(jìn)程對(duì)應(yīng)的文件描述符)中查看相應(yīng)的信息,如下:
[root@k8s-m1 ~]# head -n 5 /proc/21072/fd/9
Jun 25 03:40:01 k8s-m1 rsyslogd: [origin software="rsyslogd" swVersion="8.24.0-34.el7" x-pid="21072" x-info="http://www.rsyslog.com"] rsyslogd was HUPed
Jun 25 03:40:01 k8s-m1 systemd: Started Session 15901 of user root.
Jun 25 03:40:01 k8s-m1 systemd: Started Session 15902 of user root.
Jun 25 03:40:24 k8s-m1 etcd: read-only range request "key:\"/registry/health\" " with result "range_response_count:0 size:7" took too long (171.182021ms) to execute
Jun 25 03:40:27 k8s-m1 etcd: read-only range request "key:\"/registry/services/specs/default/kubernetes\" " with result "range_response_count:1 size:612" took too long (157.340425ms) to execute
恢復(fù):
[root@k8s-m1 ~]# cat /proc/21072/fd/9 > /var/log/messages
二、ss
ss命令詳解
ss 是 Socket Statistics 的首字母縮寫。顧名思義,ss命令可以用來獲取socket統(tǒng)計(jì)信息,它可以顯示和netstat類似的內(nèi)容。ss的優(yōu)勢(shì)在于它能夠顯示更多更詳細(xì)的有關(guān)TCP和連接狀態(tài)的信息,而且比netstat更快速更高效。ss 命令由 iproute2 軟件包提供(yum install iproute),默認(rèn)已經(jīng)安裝,iproute 2 包中的命令可以完全替代 net-tools 包中的 ifconfig、netstat、route 等命令。
下面是一些常用選項(xiàng)和用法:
ss -t:顯示所有TCP連接。
ss -u:顯示所有UDP連接。
ss -a:顯示所有連接,包括監(jiān)聽狀態(tài)和已建立的連接。
ss -l:顯示所有監(jiān)聽狀態(tài)的連接。
ss -p:顯示與連接關(guān)聯(lián)的進(jìn)程信息。
ss -n:顯示IP地址和端口號(hào),而不是主機(jī)名和服務(wù)名。
ss -o:顯示時(shí)間戳和超時(shí)信息。
ss -e:顯示詳細(xì)的套接字信息。
除了以上的選項(xiàng)外,ss命令還可以與其他命令一起配合使用,例如grep、awk等,以進(jìn)一步過濾和處理輸出結(jié)果。
還可以使用ss命令來檢查網(wǎng)絡(luò)連接問題,例如檢查某個(gè)端口是否被占用、查看連接狀態(tài)等。
ss示例
列出已建立的連接
默認(rèn)情況下,如果我們運(yùn)行ss命令而沒有指定其他選項(xiàng),它將顯示所有已建立連接的打開的非偵聽套接字的列表,例如TCP,UDP或UNIX套接字。
[root@k8s-m1 ~]# ss |more
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
u_str ESTAB 0 0 /run/systemd/journal/stdout 33171 * 44494
u_str ESTAB 0 0 * 32720 * 39019
u_str ESTAB 0 0 * 44138 * 33121
u_str ESTAB 0 0 /run/gssproxy.sock 35473560 * 35473554
u_str ESTAB 0 0 * 44494 * 33171
u_str ESTAB 0 0 /run/dbus/system_bus_socket 35673 * 41457
u_str ESTAB 0 0 * 35472701 * 0
顯示監(jiān)聽套接字(listening)
我們可以使用-l選項(xiàng)專門列出當(dāng)前正在偵聽連接的套接字,而不是列出所有的套接字。
[root@k8s-m1 ~]# ss -lt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:30983 *:*
LISTEN 0 128 *:30119 *:*
LISTEN 0 128 *:24007 *:*
LISTEN 0 128 127.0.0.1:10248 *:*
LISTEN 0 128 127.0.0.1:10249 *:*
LISTEN 0 128 127.0.0.1:9099 *:*
LISTEN 0 128 192.168.2.140:2379 *:*
LISTEN 0 128 127.0.0.1:2379 *:*
LISTEN 0 128 192.168.2.140:2380 *:*
顯示進(jìn)程
我們可以用-p選項(xiàng)打印出擁有套接字的進(jìn)程或PID號(hào)。
[root@k8s-m1 ~]# ss -ltp
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:30983 *:* users:(("kube-proxy",pid=30105,fd=20))
LISTEN 0 128 *:30119 *:* users:(("kube-proxy",pid=30105,fd=15))
LISTEN 0 128 *:24007 *:* users:(("glusterd",pid=5712,fd=10))
LISTEN 0 128 127.0.0.1:10248 *:* users:(("kubelet",pid=5778,fd=26))
LISTEN 0 128 127.0.0.1:10249 *:* users:(("kube-proxy",pid=30105,fd=14))
LISTEN 0 128 127.0.0.1:9099 *:* users:(("calico-node",pid=30764,fd=3))
LISTEN 0 128 192.168.2.140:2379 *:* users:(("etcd",pid=5680,fd=7))
LISTEN 0 128 127.0.0.1:2379 *:* users:(("etcd",pid=5680,fd=6))
LISTEN 0 128 192.168.2.140:2380 *:* users:(("etcd",pid=5680,fd=5))
......
顯示所有tcp sockets
ss -at
顯示所有utp sockets
ss -au
只顯示 unix 連接
ss -x
列出所有http連接中的連接
顯示摘要信息
ss -s
僅顯示 IPv4套接字
ss -l4
僅顯示 IPv6套接字
ss -l6
不將 IP 地址解析為主機(jī)名
如果不想將ip地址解析為主機(jī)名稱,可以使用-n選項(xiàng),以防止命令將 IP 地址解析為主機(jī)名。但這也會(huì)阻止端口號(hào)的解析,如下,22端口為ssh服務(wù)的端口,不加-n將會(huì)顯示成ssh
[root@k8s-m1 ~]# ss -l4 -n
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 128 192.168.2.140:2379 *:*
tcp LISTEN 0 128 127.0.0.1:2379 *:*
tcp LISTEN 0 128 192.168.2.140:2380 *:*
tcp LISTEN 0 128 *:22
dst/src dport/sport相關(guān)語(yǔ)法
[root@k8s-m1 ~]# ss dst 192.168.2.141:2379
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 192.168.2.140:42178 192.168.2.141:2379
tcp ESTAB 0 0 192.168.2.140:42244 192.168.2.141:2379
tcp ESTAB 0 0 192.168.2.140:42082 192.168.2.141:2379
tcp ESTAB 0 0 192.168.2.140:42320 192.168.2.141:2379
tcp ESTAB 0 0 192.168.2.140:42802 192.168.2.141:2379
[root@k8s-m1 ~]# ss src 192.168.2.140:22
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 192.168.2.140:ssh 10.12.13.1:54920
tcp ESTAB 0 0 192.168.2.140:ssh 10.12.13.1:52420
tcp ESTAB 0 96 192.168.2.140:ssh 10.12.13.1:63285
ss dport OP PORT
ss sport OP PORT
OP 可以代表以下任意一個(gè):
寫法一 | 寫法二 | 用途含義 |
---|---|---|
<= | le | 小于或等于某個(gè)端口號(hào) |
>= | ge | 大于或等于某個(gè)端口號(hào) |
== | eq | 等于某個(gè)端口號(hào) |
!= | ne | 不等于某個(gè)端口號(hào) |
> | gt | 大于某個(gè)端口號(hào) |
< | lt | 小于某個(gè)端口號(hào) |
[root@k8s-m1 ~]# ss -tunl sport \< 50
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 128 *:22 *:*
tcp LISTEN 0 128 :::22 :::*
[root@k8s-m1 ~]# ss -tunl sport lt 50
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 128 *:22 *:*
tcp LISTEN 0 128 :::22 :::*
通過 TCP 的狀態(tài)進(jìn)行過濾
ss 命令還可以通過 TCP 連接的狀態(tài)進(jìn)程過濾,支持的 TCP 協(xié)議中的狀態(tài)有: established syn-sent syn-recv fin-wait-1 fin-wait-2 time-wait closed close-wait last-ack listening closing,具體含義可以去了解TCP三次握手和四次揮手過程中的狀態(tài)。
而除了上面的 TCP 狀態(tài),還可以使用下面這些狀態(tài):
狀態(tài) | 含義 |
---|---|
all | 列出所有的 TCP 狀態(tài) |
connected | 列出除了 listening 和 closing 之外的所有 TCP 狀態(tài)。 |
synchronized | 列出除了 syn-sent 之外的所有 TCP 狀態(tài)。 |
bucket | 列出 maintained 的狀態(tài),如:time-wait 和 syn-recv。 |
big | 列出和 bucket 相反的狀態(tài)。 |
如:查看Ipv4處于listening狀態(tài)的進(jìn)程
[root@k8s-m1 ~]# ss -l4 state listening
Netid Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp 0 128 *:30983 *:*
tcp 0 128 *:30119 *:*
tcp 0 128 *:24007 *:*
tcp 0 128 127.0.0.1:10248 *:*
tcp 0 128 127.0.0.1:10249 *:*
tcp 0 128 127.0.0.1:9099 *:*
tcp 0 128 192.168.2.140:2379 *:*
tcp 0 128 127.0.0.1:2379 *:*
tcp 0 128 192.168.2.140:2380 *:*
tcp 0 128 *:32589 *:*
#注意以下用法的區(qū)別
[root@k8s-m1 ~]# ss -4n state listening '( sport = :22 )'
Netid Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp 0 128 *:22 *:*
[root@k8s-m1 ~]# ss -ln state listening '( sport = :ssh )'
Netid Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp 0 128 *:22 *:*
tcp 0 128 :::22 :::*
[root@k8s-m1 ~]# ss -ln state listening '( dport = :ssh or sport = :ssh )'
Netid Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp 0 128 *:22 *:*
tcp 0 128 :::22 :::*
對(duì)比netstat和ss查看端口的效果
[root@k8s-m1 ~]# netstat -anp|grep 2379|grep LISTEN
tcp 0 0 192.168.2.140:2379 0.0.0.0:* LISTEN 5680/etcd
tcp 0 0 127.0.0.1:2379 0.0.0.0:* LISTEN 5680/etcd
[root@k8s-m1 ~]# ss -l4|grep 2379
tcp LISTEN 0 128 192.168.2.140:2379 *:*
tcp LISTEN 0 128 127.0.0.1:2379 *:*
[root@k8s-m1 ~]#
更多ss的語(yǔ)法請(qǐng)自行摸索,可以通過ss -h查看幫助信息!??!
三、netstat
netstat -tunlp 用于顯示 tcp,udp 的端口和進(jìn)程等相關(guān)情況。
netstat 查看端口占用語(yǔ)法格式:
netstat -tunlp | grep 端口號(hào)
-t (tcp) 僅顯示tcp相關(guān)選項(xiàng)
-u (udp)僅顯示udp相關(guān)選項(xiàng)
-n 拒絕顯示別名,能顯示數(shù)字的全部轉(zhuǎn)化為數(shù)字
-l 僅列出在Listen(監(jiān)聽)的服務(wù)狀態(tài)
-p 顯示建立相關(guān)鏈接的程序名
例如查看 2379端口的情況,使用以下命令:
[root@k8s-m1 ~]# netstat -anp|grep 2379|more
tcp 0 0 192.168.2.140:2379 0.0.0.0:* LISTEN 5680/etcd
tcp 0 0 127.0.0.1:2379 0.0.0.0:* LISTEN 5680/etcd
tcp 0 0 192.168.2.140:42178 192.168.2.141:2379 ESTABLISHED 30213/kube-apiserve
tcp 0 0 192.168.2.140:42244 192.168.2.141:2379 ESTABLISHED 30213/kube-apiserve
tcp 0 0 192.168.2.140:42082 192.168.2.141:2379 ESTABLISHED 30213/kube-apiserve
更多命令:
netstat -ntlp //查看當(dāng)前所有tcp端口
netstat -ntulp | grep 80 //查看所有80端口使用情況
netstat -ntulp | grep 3306 //查看所有3306端口使用情況
在查到端口占用的進(jìn)程后,如果你要?dú)⒌魧?duì)應(yīng)的進(jìn)程可以使用 kill 命令:
kill -9 PID
如上實(shí)例,我們看到 2379端口對(duì)應(yīng)的 PID 為 5680,使用以下命令殺死進(jìn)程:
kill -9 5680
批量殺掉關(guān)于etcd的進(jìn)程
pkill etcd文章來源:http://www.zghlxwxcb.cn/news/detail-501281.html
更多關(guān)于運(yùn)維方面的相關(guān)知識(shí),請(qǐng)前往博客主頁(yè)查看。文章來源地址http://www.zghlxwxcb.cn/news/detail-501281.html
到了這里,關(guān)于Linux 查看端口占用情況的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!