netstat -tuln
、ss -tuln
、lsof -i
等,可查看监听端口及进程信息Linux系统中,查看服务端口是日常运维和故障排查的重要任务,以下是几种常用的方法及其详细说明:
使用netstat命令
-
基本用法
- 命令:
netstat -tulpn
-t
: 显示TCP连接。-u
: 显示UDP连接。-l
: 仅显示监听状态的端口。-p
: 显示使用端口的进程ID及名称。-n
: 以数字形式显示地址和端口号,避免DNS解析延迟。
- 示例: 查看所有监听的TCP和UDP端口及对应进程:
netstat -tulpn
- 输出示例:
| Proto | Local Address | Foreign Address | State | PID/Program name |
|——-|—————|—————-|——-|——————-|
| tcp | 0.0.0.0:80 | 0.0.0.0: | LISTEN| 1234/nginx |
| udp | 127.0.0.1:68 | : | | 5678/dhclient |
- 命令:
-
过滤特定端口: 结合
grep
筛选指定端口(如80):netstat -tulpn | grep :80
使用ss命令
-
基本用法
- 命令:
ss -tulpen
-t
/-u
: TCP/UDP协议。-l
: 监听状态。-p
: 显示进程信息。-e
: 显示扩展的套接字信息。-n
: 数字化地址和端口。
- 优势: 性能优于
netstat
,适合快速查询。 - 示例: 查看监听的TCP端口及进程:
ss -tulpen | grep -i tcp
- 命令:
-
过滤特定端口: 直接匹配端口号(如443):
ss -tulpen | grep :443
使用lsof命令
-
基本用法
- 命令:
lsof -i -P -n
-i
: 显示网络文件(包括端口)。-P
: 禁止端口号转名称(如80→http)。-n
: 禁止IP转主机名,加速输出。
- 示例: 查看所有监听端口:
lsof -i -P -n | grep LISTEN
- 命令:
-
查询特定端口: 直接指定端口号(如9092):
lsof -i :9092
使用fuser命令
- 基本用法
- 命令:
fuser -n tcp [端口号]
-n tcp
: 指定TCP协议。
- 示例: 查看80端口的占用情况:
fuser -n tcp 80
- 输出示例:
80/tcp: 1234
- 命令:
其他方法
-
proc文件系统: 直接读取内核态网络状态。
- 命令:
cat /proc/net/tcp | grep 端口号的十六进制
需将端口号转为十六进制(如9999→270F)。
- 示例: 查看9999端口:
printf "%xn" 9999 # 输出270F cat /proc/net/tcp | grep 270F
- 命令:
-
nmap扫描: 探测主机开放端口(需安装
nmap
)。- 命令:
nmap -sS -O localhost
-sS
: SYN半开扫描。-O
: 尝试识别操作系统。
- 命令:
方法对比与选择建议
方法 | 适用场景 | 优点 | 缺点 |
---|---|---|---|
netstat | 快速查看所有端口及进程 | 广泛兼容,参数灵活 | 部分系统需安装net-tools |
ss | 高性能替代netstat | 更详细,速度更快 | 需熟悉新参数格式 |
lsof | 查看端口与进程的关联 | 精准定位进程,支持过滤 | 输出信息较冗杂 |
fuser | 查询单个端口的占用情况 | 简洁直接 | 仅显示PID,需结合其他命令 |
nmap | 远程扫描或安全审计 | 可探测防火墙隐藏端口 | 需额外安装,扫描速度较慢 |
FAQs
-
如何终止占用特定端口的进程?
- 步骤 1: 查找PID:
lsof -i :PORT | awk '{print $2}'
- 步骤 2: 杀死进程:
sudo kill -9 PID
- 步骤 1: 查找PID:
-
为什么某些命令(如netstat)提示“未找到”?
- 原因: 部分Linux发行版(如CentOS 7)默认未安装
net-tools
。 - 解决: 安装对应工具:
sudo yum install net-tools # CentOS/RHEL sudo apt-get install net-tools # Debian/Ubuntu
- 原因: 部分Linux发行版(如CentOS 7)默认未安装
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/70492.html