一、使用netstat命令
netstat命令是一个命令行工具,能够打印出网络连接、路由表、接口状态等网络相关信息。其中,netstat -tunlp
可以列出所有占用端口的进程详情。其中:
-t
表示列出TCP协议的信息-u
表示列出UDP协议的信息-n
表示不进行DNS解析-l
表示只列出监听状态的网络连接-p
表示列出占用该端口的进程信息
$ netstat -tunlp
执行命令后,会出现类似以下的结果:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:80 0.0.0.0:* LISTEN 443/apache2
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 498/sshd
tcp6 0 0 ::1:80 :::* LISTEN 443/apache2
udp 0 0 0.0.0.0:68 0.0.0.0:* 433/dhclient
udp6 0 0 :::547 :::* 433/dhclient
从结果中可以看出,PID/Program name一列即为占用该端口的进程信息。其中,tcp、udp分别表示该条连接使用的协议是TCP还是UDP协议。
二、使用ss命令
ss命令是一个基于netlink协议实现的类似于netstat命令的工具,比netstat命令更快速、更节省系统资源。与netstat不同的是,ss命令可以同时显示UDP、TCP和RAW等多种类型连接。
$ ss -tunlp
执行完后,会出现类似于netstat命令的结果信息。其中,-t/-u/-n/-l/-p
等参数与netstat命令相同,具体含义也相同。
三、使用lsof命令
lsof命令是一种列出系统文件信息的命令,同时也可以列出进程信息,包括占用端口的进程信息。
$ lsof -i :80
执行上述命令后,可以列出占用80端口的进程详情,如下所示:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 10142 root 7u IPv4 316223 0t0 TCP *:http (LISTEN)
nginx 10144 www-data 7u IPv4 316223 0t0 TCP *:http (LISTEN)
nginx 10145 www-data 7u IPv4 316223 0t0 TCP *:http (LISTEN)
四、使用fuser命令
fuser命令是一个查找占用指定端口的进程的命令。与其他命令不同的是,这个命令不需要传递参数,只需要指定占用的端口即可。
$ fuser 80/tcp
执行上述命令后,可以显示出占用80端口的进程信息,即:
10142/tcp:
10144/tcp:
10145/tcp:
五、总结
以上就是在Debian中查看端口占用的多种方法。其中,netstat命令是最常用的命令之一,而ss命令则是一个更快、更实用的工具。lsof和fuser命令则可以直接列出占用端口的进程信息,更加直观。