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