Author : Cyan_RA9
Source : 【卡码笔记】网站
Question : Linux中如何查看某个端口有没有被占用?
【简要回答】
- 在Linux中,查看端口是否被占用的方法按场景可分为:
- 快速检查端口是否被监听 :
ss -tuln | grep :[端口号]或netstat -tuln | grep :[端口号]。 - 定位监听端口的进程 :
sudo lsof -i :[端口号]。 - 全面查看端口所有连接状态及进程 :
sudo ss -taunp | grep :[端口号]。 - 验证端口对外开放性 :
nmap -sT -p [端口号] localhost或telnet localhost [端口号]。
- 快速检查端口是否被监听 :
【详细回答】
-
快速检查端口是否被监听 :
- 命令 :
ss -tuln | grep :[端口号]或netstat -tuln | grep :[端口号]。 - 参数解析 :
① -t :检查TCP协议端口。
② -u :检查UDP协议端口。
③ -l :仅 显示监听状态(LISTEN )的端口。
④ -n:禁用域名解析,直接显示IP和端口号。 - 适用场景:快速验证某个端口是否正在等待新的连接请求(即处于 LISTEN 状态)。这是启动服务前最常见的检查。
- 命令 :
-
定位监听端口的进程 :
-
命令 :
sudo lsof -i :[端口号]。 -
输出示例:
sqlCOMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 1234 root 6u IPv4 123456 0t0 TCP *:80 (LISTEN) -
关键信息 :
① COMMAND :进程名称(如nginx)。
② PID :进程ID(如1234)。
③ USER:运行进程的用户(如root)。
-
权限说明 :普通用户可能无法查看所有进程,需使用 sudo 提权。
-
适用场景:在确认端口处于监听状态后,精确找出是哪个进程正在使用该端口。lsof 是一个非常强大的工具,不仅能看网络连接,还能看文件句柄。
-
-
全面查看端口所有连接状态及进程 :
- 命令 :
sudo ss -taunp | grep :[端口号]或sudo netstat -taunp | grep :[端口号]。 - 参数解析 :
① -t :检查TCP协议端口。
② -u :检查UDP协议端口。
③ -a : 显示所有连接(包括监听、已建立、等待等各种状态)。
③ -n :禁用域名解析,直接显示IP和端口号。
④ -p: 显示使用端口的进程ID和名称。 - 适用场景:需要了解某个端口当前所有连接状态(LISTEN、ESTABLISHED、TIME_WAIT、CLOSE_WAIT等)以及具体是哪个进程在使用它,进行更全面的分析。
- 命令 :
-
验证端口对外开放性 :
- 命令 :
nmap -sT -p [端口号] localhost或telnet localhost [端口号]。 nmap参数分解 :
① -sT :TCP 全连接扫描(模拟正常连接行为,更可靠);
② -p:指定扫描的端口号。nmap输出状态 :
① open :端口开放且可访问;
② closed :端口未被占用;
③ filtered:端口被防火墙拦截。无法确定其状态。
- 命令 :
【知识拓展】
-
查看端口是否被占用的主要手段 ,如下图所示:

-
工具对比:ss vs netstat,如下表所示:
特性 ss netstat 数据来源 直接读取内核socket表 解析 /proc/net文件速度 更快(适合高负载服务器) 较慢 维护状态 活跃维护(推荐使用) 已逐步淘汰 -
端口状态解析(
ss/netstat输出):- LISTEN:端口正在监听,等待连接。
- ESTABLISHED:已建立活跃连接。
- TIME_WAIT:连接已关闭,等待内核清理(可能短暂占用端口)。
- CLOSE_WAIT:远程已关闭连接,本地未释放。