摘要:
如果面试官问你怎么查看某个端口是否启用,或者被什么进程占用?
随手就可以回答他三个以上答案。
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吧。
如果觉得对你有所帮助,不妨点个在看吧。