【Linux命令011】4种方法告诉你,怎么查看端口占用情况!

Scroll Down

摘要:

如果面试官问你怎么查看某个端口是否启用,或者被什么进程占用?

随手就可以回答他三个以上答案。

NO.1

1、top -c。

前面已经学过,可以列出所有进程相关信息。并且top -c还可以看到进程的启动路径。

但是如果进程太多,就不方便查看了。

2、netstat -ap|grep 端口号

[root@yaomm ~]#  netstat -ap | grep 8090
tcp        0      0 0.0.0.0:8090            0.0.0.0:*               LISTEN      30684/java  

-a 展示所有套接字进程

-n 不解析名称,转化为数字,可以加快结果输出速度

-p 显示建立相关链接的程序名

3、ss -anp | grep 端口号

ss 一般用于转储套接字统计信息。它能够输出类似于 netstat 输出的信息,但它可以比其它工具显示更多的 TCP 信息和状态信息。

NO.2

除了以上方法,还有什么方法可以查看端口是否启用呢?

有一个非常简单方便的小命令:lsof -i:端口号

得到的信息全面而又简洁。

lsof并不是REHL/centos系统的原生命令,需要进行安装。

yum install lsof -y

安装之后就可以输入上面的命令查看端口,实例

[root@yaomm ~]# lsof -i:8090
COMMAND   PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
java    30684 root   22u  IPv4 58221295      0t0  TCP *:8090 (LISTEN)

其他常用的lsof -i命令

lsof -i 4
# 查看所有ipv4的通讯进程

lsof -i 6
# 查看所有ipv6的通讯进程

lsof -i tcp
# 查看tcp进程

lsof -i udp
# 查看udp进程

实例

[root@yaomm ~]# lsof -i 4
COMMAND     PID   USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
chronyd     655 chrony    1u  IPv4    14372      0t0  UDP localhost:323 
dhclient    852   root    6u  IPv4    13862      0t0  UDP *:bootpc 
sshd       1143   root    3u  IPv4    16551      0t0  TCP *:ssh (LISTEN)
java       6370   root   17u  IPv4   186862      0t0  TCP *:8761 (LISTEN)
redis-ser  6909  redis    6u  IPv4   195365      0t0  TCP *:6379 (LISTEN)
java       7349     zk   18u  IPv4   201186      0t0  TCP *:39871 (LISTEN)
java       7349     zk   23u  IPv4   199952      0t0  TCP *:eforward (LISTEN)
java       8663   root   31u  IPv4 49073443      0t0  TCP *:websm (LISTEN)
AliYunDun  9275   root   25u  IPv4 56924001      0t0  TCP iZ2zebthf35ejlps5v87ksZ:43168->100.100.30.26:http (ESTABLISHED)
nginx     13261   root    8u  IPv4 49136040      0t0  TCP iZ2zebthf35ejlps5v87ksZ:48224->172.65.32.248:https (CLOSE_WAIT)
nginx     13261   root   13u  IPv4 49136515      0t0  TCP *:http (LISTEN)
nginx     13261   root   17u  IPv4 49136669      0t0  TCP *:https (LISTEN)
nginx     14023  nginx    8u  IPv4 49136040      0t0  TCP iZ2zebthf35ejlps5v87ksZ:48224->172.65.32.248:https (CLOSE_WAIT)
nginx     14023  nginx   13u  IPv4 49136515      0t0  TCP *:http (LISTEN)
nginx     14023  nginx   17u  IPv4 49136669      0t0  TCP *:https (LISTEN)
sshd      16680   root    3u  IPv4 58964381      0t0  TCP iZ2zebthf35ejlps5v87ksZ:ssh->114.102.154.124:26386 (ESTABLISHED)
dockerd-c 29902   root    6u  IPv4 18271907      0t0  TCP iZ2zebthf35ejlps5v87ksZ:50036->iZ2zebthf35ejlps5v87ksZ:2377 (ESTABLISHED)
java      30684   root   22u  IPv4 58221295      0t0  TCP *:8090 (LISTEN)

[root@yaomm ~]# lsof -i 6
COMMAND     PID   USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
chronyd     655 chrony    2u  IPv6    14373      0t0  UDP localhost:323 
mysqld     6822  mysql   17u  IPv6 57859557      0t0  TCP *:mysql (LISTEN)
dockerd-c 29902   root   14u  IPv6 18255915      0t0  TCP *:2377 (LISTEN)
dockerd-c 29902   root   39u  IPv6 18271908      0t0  TCP iZ2zebthf35ejlps5v87ksZ:2377->iZ2zebthf35ejlps5v87ksZ:50036 (ESTABLISHED)
dockerd-c 29902   root   53u  IPv6 18255532      0t0  TCP *:7946 (LISTEN)
dockerd-c 29902   root   57u  IPv6 18255533      0t0  UDP *:7946 
docker-pr 30296   root    4u  IPv6 18248138      0t0  TCP *:8011 (LISTEN)
docker-pr 30308   root    4u  IPv6 18248204      0t0  TCP *:8010 (LISTEN)
docker-pr 30320   root    4u  IPv6 18248243      0t0  TCP *:8008 (LISTEN)
docker-pr 30334   root    4u  IPv6 18247413      0t0  TCP *:8009 (LISTEN)
docker-pr 30380   root    4u  IPv6 18247555      0t0  TCP *:teradataordbms (LISTEN)
docker-pr 30467   root    4u  IPv6 18248577      0t0  TCP *:mxi (LISTEN)
docker-pr 30484   root    4u  IPv6 18249273      0t0  TCP *:8006 (LISTEN)
docker-pr 30502   root    4u  IPv6 18249401      0t0  TCP *:vcom-tunnel (LISTEN)

[root@yaomm ~]# lsof -i tcp
COMMAND     PID  USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
sshd       1143  root    3u  IPv4    16551      0t0  TCP *:ssh (LISTEN)
java       6370  root   17u  IPv4   186862      0t0  TCP *:8761 (LISTEN)
mysqld     6822 mysql   17u  IPv6 57859557      0t0  TCP *:mysql (LISTEN)
redis-ser  6909 redis    6u  IPv4   195365      0t0  TCP *:6379 (LISTEN)
java       7349    zk   18u  IPv4   201186      0t0  TCP *:39871 (LISTEN)
java       7349    zk   23u  IPv4   199952      0t0  TCP *:eforward (LISTEN)
java       8663  root   31u  IPv4 49073443      0t0  TCP *:websm (LISTEN)
AliYunDun  9275  root   25u  IPv4 56924001      0t0  TCP iZ2zebthf35ejlps5v87ksZ:43168->100.100.30.26:http (ESTABLISHED)
nginx     13261  root    8u  IPv4 49136040      0t0  TCP iZ2zebthf35ejlps5v87ksZ:48224->172.65.32.248:https (CLOSE_WAIT)
nginx     13261  root   13u  IPv4 49136515      0t0  TCP *:http (LISTEN)
nginx     13261  root   17u  IPv4 49136669      0t0  TCP *:https (LISTEN)
nginx     14023 nginx    8u  IPv4 49136040      0t0  TCP iZ2zebthf35ejlps5v87ksZ:48224->172.65.32.248:https (CLOSE_WAIT)
nginx     14023 nginx   13u  IPv4 49136515      0t0  TCP *:http (LISTEN)
nginx     14023 nginx   17u  IPv4 49136669      0t0  TCP *:https (LISTEN)
sshd      16680  root    3u  IPv4 58964381      0t0  TCP iZ2zebthf35ejlps5v87ksZ:ssh->114.102.154.124:26386 (ESTABLISHED)
dockerd-c 29902  root    6u  IPv4 18271907      0t0  TCP iZ2zebthf35ejlps5v87ksZ:50036->iZ2zebthf35ejlps5v87ksZ:2377 (ESTABLISHED)
dockerd-c 29902  root   14u  IPv6 18255915      0t0  TCP *:2377 (LISTEN)
dockerd-c 29902  root   39u  IPv6 18271908      0t0  TCP iZ2zebthf35ejlps5v87ksZ:2377->iZ2zebthf35ejlps5v87ksZ:50036 (ESTABLISHED)
dockerd-c 29902  root   53u  IPv6 18255532      0t0  TCP *:7946 (LISTEN)
docker-pr 30296  root    4u  IPv6 18248138      0t0  TCP *:8011 (LISTEN)
docker-pr 30308  root    4u  IPv6 18248204      0t0  TCP *:8010 (LISTEN)
docker-pr 30320  root    4u  IPv6 18248243      0t0  TCP *:8008 (LISTEN)
docker-pr 30334  root    4u  IPv6 18247413      0t0  TCP *:8009 (LISTEN)
docker-pr 30380  root    4u  IPv6 18247555      0t0  TCP *:teradataordbms (LISTEN)
docker-pr 30467  root    4u  IPv6 18248577      0t0  TCP *:mxi (LISTEN)
docker-pr 30484  root    4u  IPv6 18249273      0t0  TCP *:8006 (LISTEN)
docker-pr 30502  root    4u  IPv6 18249401      0t0  TCP *:vcom-tunnel (LISTEN)
java      30684  root   22u  IPv4 58221295      0t0  TCP *:8090 (LISTEN)

[root@yaomm ~]# lsof -i udp
COMMAND     PID   USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
chronyd     655 chrony    1u  IPv4    14372      0t0  UDP localhost:323 
chronyd     655 chrony    2u  IPv6    14373      0t0  UDP localhost:323 
dhclient    852   root    6u  IPv4    13862      0t0  UDP *:bootpc 
dockerd-c 29902   root   57u  IPv6 18255533      0t0  UDP *:7946 

NO.3

lsof为什么这么强?

其实它的全称是list open files,本质上是一个查看当前系统文件的工具。

不过在Linux中,一切皆是文件,任何事物都是以文件的形式存在。所以包括TCP、UDP这种通讯控制协议lsof也都可以查看。

lsof -i就是用来监听套接字的。

lsof能打开的文件类型有:

  • 普通文件
  • 目录
  • 网络文件系统的文件
  • 字符或设备文件
  • (函数)共享库
  • 管道,命名管道
  • 符号链接
  • 网络文件(例如:NFS file、网络socket,unix域名socket)
  • 还有其它类型的文件,等等

lsof可不只是能查看端口,具体还能做什么不可思议的事,下篇【命令详解002】来说说lsof吧。

如果觉得对你有所帮助,不妨点个在看吧。