在Linux系统中,端口是网络通信的入口,查看端口使用情况是排查网络问题、安全监控和服务的日常运维的重要操作,本文将详细介绍几种常用的查看端口使用情况的命令,包括它们的用法、参数和适用场景,并通过表格对比不同工具的特点,最后附上常见问题解答。
使用netstat命令查看端口
netstat是Linux中经典的网络工具,用于显示网络连接、路由表、接口统计等信息,几乎在所有Linux系统中都默认安装(部分新系统可能需手动安装),查看端口时,常用参数组合为-tunlp
,
-t
:显示TCP端口-u
:显示UDP端口-n
:以数字形式显示地址和端口(不解析域名,加快查询速度)-l
:只显示监听端口(即正在等待连接的端口)-p
:显示占用端口的进程ID和名称
执行netstat -tunlp
会输出类似以下内容:
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:22 0.0.0.0:* LISTEN 1234/sshd
tcp6 0 0 :::80 :::* LISTEN 5678/nginx
udp 0 0 0.0.0.0:68 0.0.0.0:* 9012/dhclient
Local Address
列显示本地IP和端口,State
列的LISTEN
表示端口处于监听状态,PID/Program name
列显示占用端口的进程(如sshd、nginx),netstat的优势是兼容性强,输出信息详细,但当端口数量多时,查询速度较慢。
使用ss命令查看端口
ss是iproute2工具包的一部分,作为netstat的替代品,在现代Linux系统中(如Ubuntu 18.04+、CentOS 7+)逐渐普及,其查询速度更快,尤其是在处理大量端口时,且支持更多协议和统计信息,常用参数与netstat类似,如-tuln
显示TCP/UDP监听端口(数字形式),-a
显示所有端口(包括非监听端口),-p
显示进程信息。
执行ss -tuln
输出:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp LISTEN 0 128 [::]:80 [::]:*
udp UNCONN 0 0 0.0.0.0:68 0.0.0.0:*
ss的优势在于高效,输出更简洁,适合实时监控,但部分老系统可能需要手动安装iproute2(sudo apt install iproute2
或sudo yum install iproute2
)。
使用lsof命令查看端口
lsof(list open files)通过列出系统打开的文件来查看端口使用情况,因为网络端口在Linux中被视为文件,常用命令为lsof -i:端口号
,例如查看8080端口:lsof -i:8080
,输出:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 5678 www-data 6u IPv6 12345 0t0 TCP *:http-alt (LISTEN)
NAME
列显示协议和端口,COMMAND
和PID
列显示进程信息,lsof的优势是能直接关联端口与进程,支持按用户、协议等筛选,但需要root权限才能显示所有进程的详细信息(sudo lsof -i:端口号
)。
工具对比与选择
以下是不同查看端口工具的对比:
命令 | 特点 | 适用场景 |
---|---|---|
netstat | 兼容性好,输出详细 | 老系统,需要完整连接信息时 |
ss | 高效,支持多协议,输出简洁 | 新系统,大量端口查询,实时监控 |
lsof | 基于文件系统,关联进程信息 | 查看指定端口对应的进程和文件描述符 |
常见问题解答(FAQs)
为什么执行netstat -tunlp
时提示“command not found”?
答:部分新Linux系统(如Ubuntu 20.04+、CentOS 8+)默认不再安装net-tools包(netstat所属包),可通过以下命令安装:
- Ubuntu/Debian系统:
sudo apt install net-tools
- CentOS/RHEL系统:
sudo yum install net-tools
如何快速查看某个端口是否被占用,并显示占用进程的详细信息?
答:可分两步操作:
- 使用
ss -tuln | grep 端口号
快速检查端口状态(如ss -tuln | grep :80
确认80端口是否监听); - 若需查看进程详情,结合
lsof -i:端口号
(如lsof -i:80
),显示nginx/apache等进程的PID、用户等信息。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/19747.html