centos7.x 查看端口占用情况可以使用 lsof 和 netstat 命令
1.lsof
lsof(list open files)是一个列出当前系统打开文件的工具。
lsof 查看端口占用语法格式:
[root@localhost ~]# lsof -i:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 15508 root 4u IPv6 729602 0t0 TCP *:http (LISTEN)
httpd 15509 apache 4u IPv6 729602 0t0 TCP *:http (LISTEN)
httpd 15510 apache 4u IPv6 729602 0t0 TCP *:http (LISTEN)
httpd 15511 apache 4u IPv6 729602 0t0 TCP *:http (LISTEN)
httpd 15512 apache 4u IPv6 729602 0t0 TCP *:http (LISTEN)
httpd 15513 apache 4u IPv6 729602 0t0 TCP *:http (LISTEN)
httpd 15523 apache 4u IPv6 729602 0t0 TCP *:http (LISTEN)
httpd 20528 apache 4u IPv6 729602 0t0 TCP *:http (LISTEN)
查看了80端口的占用情况,均在监听中
[root@localhost ~]# lsof -i:22
[root@localhost ~]# lsof -i:11022
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 16105 root 3u IPv6 734716 0t0 TCP *:11022 (LISTEN)
sshd 16105 root 4u IPv4 734718 0t0 TCP *:11022 (LISTEN)
sshd 19620 root 3u IPv4 961213 0t0 TCP localhost.localdomain:11022->192.168.8.88:65053 (ESTABLISHED)
sshd 19624 root 3u IPv4 963414 0t0 TCP localhost.localdomain:11022->192.168.8.88:65066 (ESTABLISHED)
这里先是查看了22端口,发现无输出,其实是改了sshd的默认端口号了。
再查看11022端口,有sshd的监听信息了,其中第三四条是我当前正在连接的
ps:lsof -i 需要 root 用户的权限来执行
更多 lsof 的命令如下:
lsof a.txt:显示开启文件a.txt的进程
lsof -c a:显示a进程现在打开的文件
lsof -c -p 123:列出进程号为123的进程所打开的文件
lsof -g gid:显示归属gid的进程
lsof +d /usr/local/:显示目录下被进程开启的文件
lsof +D /usr/local/:同上,但是会搜索目录下的目录,时间较长
lsof -d 4:显示使用fd为4的进程
lsof -i -U:显示所有打开的端口和UNIX domain文件
2.netstat
netstat -ntlp
用于显示 tcp 的端口和进程等相关情况
[root@localhost ~]# netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:11022 0.0.0.0:* LISTEN 16105/sshd
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 5694/master
tcp6 0 0 :::11022 :::* LISTEN 16105/sshd
tcp6 0 0 :::111 :::* LISTEN 1/systemd
tcp6 0 0 :::80 :::* LISTEN 15508/httpd
tcp6 0 0 ::1:25 :::* LISTEN 5694/master
netstat -nulp
用于显示 udp 的端口和进程等相关情况
[root@localhost ~]# netstat -nulp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
udp 0 0 0.0.0.0:111 0.0.0.0:* 1/systemd
udp 0 0 127.0.0.1:323 0.0.0.0:* 4813/chronyd
udp 0 0 0.0.0.0:721 0.0.0.0:* 4814/rpcbind
udp6 0 0 :::111 :::* 1/systemd
udp6 0 0 ::1:323 :::* 4813/chronyd
udp6 0 0 :::721 :::* 4814/rpcbind
可以看到 仅更改t为u,即可显示不同协议的连接情况,那么各个字母代表哪些意义呢?
-r:--route,显示路由表信息
-g:--groups,显示多重广播功能群组组员名单
-s:--statistics,按照每个协议来分类进行统计。默认的显示IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP和UDPv6 的统计信息。
-M:--masquerade,显示网络内存的集群池统计信息
-v:--verbose,命令显示每个运行中的基于公共数据链路接口的设备驱动程序的统计信息
-W:--wide,不截断IP地址
-n:进制使用域名解析功能。链接以数字形式展示(IP地址),而不是通过主机名或域名形式展示
-N:--symbolic,解析硬件名称
-e:--extend,显示额外信息
-p:--programs,与链接相关程序名和进程的PID
-t:所有的 tcp 协议的端口
-x:所有的 unix 协议的端口
-u:所有的 udp 协议的端口
-o:--timers,显示计时器
-c:--continuous,每隔一个固定时间,执行netstat命令
-l:--listening,显示所有监听的端口
-a:--all,显示所有链接和监听端口
-F:--fib,显示转发信息库(默认)
-C:--cache,显示路由缓存而不是FIB
-Z:--context,显示套接字的SELinux安全上下文
组合使用示例:
netstat -anp:显示系统端口使用情况
netstat -nupl:UDP类型的端口
netstat -ntpl:TCP类型的端口
netstat -na|grep ESTABLISHED|wc -l:统计已连接上的,状态为"established"
netstat -l:只显示所有监听端口
netstat -lt:只显示所有监听tcp端口
netstat -ntlp | grep 80
grep起到筛选作用,会匹配后面的字符 端口号 服务名 端口状态均可
[root@localhost ~]# netstat -ntlp |grep 80
tcp6 0 0 :::80 :::* LISTEN 15508/httpd
[root@localhost ~]# netstat -ntlp |grep sshd
tcp 0 0 0.0.0.0:11022 0.0.0.0:* LISTEN 16105/sshd
tcp6 0 0 :::11022 :::* LISTEN 16105/sshd
[root@localhost ~]# netstat -alp |grep ESTA
tcp 0 48 localhost.localdo:11022 192.168.8.88:65053 ESTABLISHED 19620/sshd: root@pt
tcp 0 0 localhost.localdo:11022 192.168.8.88:65066 ESTABLISHED 19624/sshd: root@no
有异常端口占用就必须杀死进程
kill
例如我们要杀死 15508 进程 15508是PID
kill -9 15508
版权归原作者 马搏士 所有, 如有侵权,请联系我们删除。