java多线程    Java入门    vsftp    ftp    linux配置    centos    FRP教程    HBase    Html5缓存    webp    zabbix    分布式    neo4j图数据库    

linux查看端口占用

linux查看端口占用月小升常用的办法一个是lsof,一个是netstat

一、 linux端口查看占用命令 lsof(list open files)是一个列出当前系统打开文件的工具。
例子

lsof -i:7000
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
frps    1249 root    3u  IPv6  15992      0t0  TCP *:afs3-fileserver (LISTEN)
frps    1249 root    8u  IPv6  31866      0t0  TCP iz2ze9n3z2fl9zj9hrv58vz:afs3-fileserver->181.118.50.55:49238 (ESTABLISHED)

端口被frps占用着

# lsof -i:80
COMMAND    PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
AliYunDun 1049  root   20u  IPv4  13083      0t0  TCP iz2ze9n3z2fl9zj9hrv58vz:37170->100.100.30.25:http (ESTABLISHED)
nginx     1310  root    6u  IPv4  16343      0t0  TCP *:http (LISTEN)
nginx     1311 nginx    6u  IPv4  16343      0t0  TCP *:http (LISTEN)
nginx     1311 nginx   17u  IPv4 526207      0t0  TCP iz2ze9n3z2fl9zj9hrv58vz:http->crawl-66-249-79-209.googlebot.com:38231 (ESTABLISHED)
nginx     1312 nginx    6u  IPv4  16343      0t0  TCP *:http (LISTEN)

解释下LISTEN 和 ESTABLISHED的意义

1).LISTEN 端口启动后服务器的nginx对80端口首先处于侦听(LISTENING)状态。
2).ESTABLISHED 建立连接。表示两台机器正在80端口通信。
3).TIME_WAIT 我方主动调用close()断开连接,收到对方确认后状态变为TIME_WAIT。TCP协议规定TIME_WAIT状态会一直持续2MSL(即两倍的分段最大生存期),以此来确保旧的连接状态不会对新连接产生影响。处于TIME_WAIT状态的连接占用的资源不会被内核释放,所以作为服务器,在可能的情况下,尽量不要主动断开连接,以减少TIME_WAIT状态造成的资源浪费。
4)CLOSE_WAIT 对方主动关闭连接或者网络异常导致连接中断,这时我方的状态会变成CLOSE_WAIT 此时我方要调用close()来使得连接正确关闭

COMMAND:进程名称
PID:进程标识符
USER:进程所有者
FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd,txt等
TYPE:文件类型,如DIR,REG等
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的进程名称

lsof -i:80:查看80端口占用
lsof abc.txt:显示开启文件abc.txt的进程
lsof -c abc:显示abc进程现在打开的文件
lsof -d 4:显示使用fd为4的进程
lsof -i -U:显示所有打开的端口和UNIX domain文件
lsof -c -p 1234:列出进程号为1234的进程所打开的文件
lsof -g gid:显示归属gid的进程情况
lsof +d /usr/local/:显示目录下被进程开启的文件
lsof +D /usr/local/:同上,但是会搜索目录下的目录,时间较长

二、 netstat 查看端口占用

netstat -tunlp 用于显示 tcp,udp 的端口和进程等相关情况。

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

netstat -tunlp | grep 端口号

-t (tcp) 仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化为数字
-l 仅列出在Listen(监听)的服务状态
-p 显示建立相关链接的程序名

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

netstat -tunlp | grep 8000
tcp6 0 0 :::7000 :::* LISTEN 1249/./frps

更多netstat查看端口占用的命令:

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

netstat 实战如何查询一个服务占用的端口

1.查询squid占用的进程

ps aux|grep squid
root     10870  0.0  0.0  92644  3744 ?        Ss   13:21   0:00 /usr/sbin/squid -f /etc/squid/squid.conf
squid    10872  0.0  0.4 106168 16084 ?        S    13:21   0:00 (squid-1) -f /etc/squid/squid.conf
squid    10873  0.0  0.0  27436  1228 ?        S    13:21   0:00 (logfile-daemon) /var/log/squid/access.log
root     10921  0.0  0.0 112680   740 pts/0    S+   13:29   0:00 grep --color=auto squid

2.查看端口监听

 netstat -nap | grep squid
 tcp6       0      0 :::3128                 :::*                    LISTEN      10872/(squid-1)     
udp        0      0 0.0.0.0:37679           0.0.0.0:*                           10872/(squid-1)     
udp6       0      0 :::46994                :::*                                10872/(squid-1)     
unix  2      [ ]         DGRAM                    617223   10870/squid          
unix  3      [ ]         STREAM     CONNECTED     618094   10872/(squid-1)  

tcp在用3128 进程号为10872,对应了ps aux|grep squid 的第二条记录10872

判断squid占用了3128端口

netstat -nap | grep 3128

tcp6 0 0 :::3128 :::* LISTEN 10872/(squid-1)

三、fuser是查看某个文件被哪个进程占用的

fuser查看7000端口的进程占用情况

 fuser 7500/tcp -v
USER        PID ACCESS COMMAND
7500/tcp:            root       1249 F.... frps


This entry was posted in Linux and tagged , . Bookmark the permalink.
月小升QQ 2651044202, 技术交流QQ群 178491360
首发地址:月小升博客https://java-er.com/blog/linux-port-using/
无特殊说明,文章均为月小升原创,欢迎转载,转载请注明本文地址,谢谢
您的评论是我写作的动力.

Leave a Reply