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)
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