1、lsof -i
lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (tcp) 和用户数据报协议 (udp) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。
详细了解lsof,可以参考:https://www.coonote.com/linux-note/linux-lsof.html
2、netstat命令是一个监控tcp/ip网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息
netstat -tunlp 显示tcp,udp的端口和进程等相关情况
netstat -anp 也可以显示系统端口使用情况
netstat [选项]
-a或--all:显示所有连线中的socket;
-a<网络类型>或--<网络类型>:列出该网络类型连线中的相关地址;
-c或--continuous:持续列出网络状态;
-c或--cache:显示路由器配置的快取信息;
-e或--extend:显示网络其他相关信息;
-f或--fib:显示fib;
-g或--groups:显示多重广播功能群组组员名单;
-h或--help:在线帮助;
-i或--interfaces:显示网络界面信息表单;
-l或--listening:显示监控中的服务器的socket;
-m或--masquerade:显示伪装的网络连线;
-n或--numeric:直接使用ip地址,而不通过域名服务器;
-n或--netlink或--symbolic:显示网络硬件外围设备的符号连接名称;
-o或--timers:显示计时器;
-p或--programs:显示正在使用socket的程序识别码和程序名称;
-r或--route:显示routing table;
-s或--statistice:显示网络工作信息统计表;
-t或--tcp:显示tcp传输协议的连线状况;
-u或--udp:显示udp传输协议的连线状况;
-v或--verbose:显示指令执行过程;
-v或--version:显示版本信息;
-w或--raw:显示raw传输协议的连线状况;
-x或--unix:此参数的效果和指定"-a unix"参数相同;
--ip或--inet:此参数的效果和指定"-a inet"参数相同。
方法1: lsof -i 用以显示符合条件的进程情况,lsof(list open files)是一个列出当前系统打开文件的工具。
以root用户来执行lsof -i命令,如下:
[root@hadoop01 yum.repos.d]# lsof -i
command pid user fd type device size/off node name
rpcbind 1873 rpc 6u ipv4 15228 0t0 udp *:sunrpc
rpcbind 1873 rpc 7u ipv4 15230 0t0 udp *:wpages
rpcbind 1873 rpc 8u ipv4 15231 0t0 tcp *:sunrpc (listen)
rpcbind 1873 rpc 9u ipv6 15233 0t0 udp *:sunrpc
rpcbind 1873 rpc 10u ipv6 15235 0t0 udp *:wpages
rpcbind 1873 rpc 11u ipv6 15236 0t0 tcp *:sunrpc (listen)
rpc.statd 2017 rpcuser 5r ipv4 15556 0t0 udp *:921
rpc.statd 2017 rpcuser 8u ipv4 15563 0t0 udp *:32846
rpc.statd 2017 rpcuser 9u ipv4 15567 0t0 tcp *:42335 (listen)
rpc.statd 2017 rpcuser 10u ipv6 15571 0t0 udp *:41231
rpc.statd 2017 rpcuser 11u ipv6 15575 0t0 tcp *:56522 (listen)
cupsd 2072 root 6u ipv6 15795 0t0 tcp localhost:ipp (listen)
cupsd 2072 root 7u ipv4 15796 0t0 tcp localhost:ipp (listen)
cupsd 2072 root 9u ipv4 15811 0t0 udp *:ipp
sshd 2191 root 3u ipv4 16362 0t0 tcp *:ssh (listen)
sshd 2191 root 4u ipv6 16366 0t0 tcp *:ssh (listen)
mysqld 2379 mysql 10u ipv4 17615 0t0 tcp *:mysql (listen)
nginx 3953 root 11u ipv4 35803 0t0 tcp *:distinct (listen)
sshd 11504 root 3r ipv4 125196 0t0 tcp www.brz.com:ssh->bogon:55057 (established)
sshd 11504 root 7u ipv6 125274 0t0 tcp localhost:x11-ssh-offset (listen)
sshd 11504 root 8u ipv4 125275 0t0 tcp localhost:x11-ssh-offset (listen)
sshd 11716 root 3r ipv4 127456 0t0 tcp www.brz.com:ssh->bogon:55303 (established)
sshd 11716 root 7u ipv6 127537 0t0 tcp localhost:6011 (listen)
sshd 11716 root 8u ipv4 127538 0t0 tcp localhost:6011 (listen)
nginx 11914 nobody 11u ipv4 35803 0t0 tcp *:distinct (listen)
加端口号,查看端口被谁占用
lsof -i:端口号
例如:
注意:这里的9999端口是我自己打开的一个,前面博客提到过,如果自己没有此端口,请更换端口号
[root@hadoop01 yum.repos.d]# lsof -i:9999
command pid user fd type device size/off node name
nginx 3953 root 11u ipv4 35803 0t0 tcp *:distinct (listen)
nginx 11914 nobody 11u ipv4 35803 0t0 tcp *:distinct (listen)
方法2: netstat -tunlp命令用于显示tcp,udp的端口和进程等相关情况
[root@hadoop01 yum.repos.d]# netstat -tunpl
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:9999 0.0.0.0:* listen 3953/nginx
tcp 0 0 0.0.0.0:111 0.0.0.0:* listen 1873/rpcbind
tcp 0 0 0.0.0.0:22 0.0.0.0:* listen 2191/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* listen 2072/cupsd
tcp 0 0 127.0.0.1:6010 0.0.0.0:* listen 11504/sshd
tcp 0 0 127.0.0.1:6011 0.0.0.0:* listen 11716/sshd
tcp 0 0 0.0.0.0:42335 0.0.0.0:* listen 2017/rpc.statd
tcp 0 0 0.0.0.0:3306 0.0.0.0:* listen 2379/mysqld
tcp 0 0 :::111 :::* listen 1873/rpcbind
tcp 0 0 :::22 :::* listen 2191/sshd
tcp 0 0 ::1:631 :::* listen 2072/cupsd
tcp 0 0 ::1:6010 :::* listen 11504/sshd
tcp 0 0 ::1:6011 :::* listen 11716/sshd
tcp 0 0 :::56522 :::* listen 2017/rpc.statd
udp 0 0 0.0.0.0:111 0.0.0.0:* 1873/rpcbind
udp 0 0 0.0.0.0:631 0.0.0.0:* 2072/cupsd
udp 0 0 0.0.0.0:776 0.0.0.0:* 1873/rpcbind
udp 0 0 0.0.0.0:921 0.0.0.0:* 2017/rpc.statd
udp 0 0 0.0.0.0:32846 0.0.0.0:* 2017/rpc.statd
udp 0 0 :::111 :::* 1873/rpcbind
udp 0 0 :::776 :::* 1873/rpcbind
udp 0 0 :::41231 :::* 2017/rpc.statd
netstat -tunlp 会显示所有端口和所有对应的程序,用grep管道可以过滤出想要的关键字段,
列一下9999端口占用的程序:
注意:这里的9999端口是我自己打开的一个,前面博客提到过,如果自己没有此端口,请更换端口号
netstat -tunplp | grep 端口号
例如:
[root@hadoop01 yum.repos.d]# netstat -tunplp | grep 9999
tcp 0 0 0.0.0.0:9999 0.0.0.0:* listen 3953/nginx
使用netstat -anp进行查看
[root@hadoop01 yum.repos.d]# netstat -anp|grep 9999
tcp 0 0 0.0.0.0:9999 0.0.0.0:* listen 3953/nginx
所以这两种方法都可以查看。