Linux查看服务器开放端口,netstat和ss命令教程

前言

排查网站打不开、端口是否被占用、服务有没有监听,都要先看服务器开放了哪些端口。Linux 上最常用的两个工具是 netstat 和 ss,ss 是新系统推荐的替代,速度更快。本篇讲清楚两个命令的常用组合和怎么判断监听状态。

一、ss命令(推荐,CentOS7自带)

# 查看所有正在监听的TCP端口
ss -tlnp
# 查看所有正在监听的UDP端口
ss -ulnp
# 统计各类连接数量
ss -s

参数含义:-t TCP、-u UDP、-l 只看监听、-n 数字形式显示端口号(不解析域名/服务名)、-p 显示占用进程。

二、netstat命令(老系统常用,需net-tools)

CentOS7 最小化可能没装,先装:

yum install -y net-tools

常用:

# 查看所有监听的TCP端口和进程
netstat -tlnp
# 查看UDP监听
netstat -ulnp
# 查看80端口被谁占用
netstat -tlnp | grep ':80'
# 查看所有已建立连接
netstat -anp | grep ESTABLISHED

三、判断端口是否在监听

以80端口为例:

ss -tlnp | grep ':80'
# 或
netstat -tlnp | grep ':80'
  • LISTEN 表示正在监听,服务正常;
  • 没有任何输出说明该端口没被程序监听;
  • 最后一列能看到进程名和PID,比如 nginx: worker。

四、常用排查组合

# 查某个具体端口(443)
ss -tlnp | grep 443
# 查某进程监听了哪些端口
ss -tlnp | grep nginx
# 实时看连接数最多的IP
ss -tn state established | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head

五、常见坑

  1. 看不到进程名要加 -p,且需要root:普通用户只能看到端口,看不到占用程序,用 sudo 或 root 执行;
  2. 只看监听不够:服务在本机监听但防火墙/安全组没放行,外网依然连不上,还要配合 firewalld 和云安全组检查;
  3. netstat 找不到命令:是没装 net-tools,yum install -y net-tools;
  4. -n 别漏:不加会把80显示成http,grep端口号时容易匹配不到。

总结

记住 ss -tlnp 看 TCP 监听、ss -ulnp 看 UDP、| grep 端口号 精准定位,老机器用 netstat 同参数即可。先确认本机监听,再查防火墙和安全组,排查链路才完整。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-20 07:24 

Linux查看端口占用

Linux查看端口占用

引言

启动服务时报Address already in use,说明目标端口被别的进程占着。上线前要确认端口是否监听、被哪个PID占用,常用ss、netstat、lsof三个工具,先定位进程再决定停掉还是换端口。

ss查看(推荐)

ss替代netstat,更快更全:

ss -tlnp | grep 80
  • -t TCP,-l 监听状态,-n 数字端口不解析,-p 显示进程PID和名称。
    看TCP监听端口最直接。

netstat兼容命令

老系统没有ss时:

netstat -tlnp | grep 80

参数含义和ss一致,输出本地地址:端口、PID/程序名。

lsof按端口查进程

lsof -i:80

直接列出占用80端口的进程命令、PID、用户,适合只盯单个端口。

找到并处理

确认是无用进程后:

kill -9 PID

若是被系统服务占用,优先systemctl stop对应服务,别盲目kill。

查看所有监听端口

ss -tlnp

不加grep,列出全部TCP监听,盘点机器开了哪些服务。

注意事项

  • 查端口要root或sudo,普通用户看不到别的进程PID;
  • 状态LISTEN才是监听,ESTABLISHED是已建立连接,别混淆;
  • 端口被占先判断是不是正常服务,误杀线上进程影响业务;
  • 云服务器端口不通还要查安全组和防火墙,不只是本机占用;
  • ss在新发行版预装,netstat需装net-tools。

总结

日常用ss -tlnp grep端口最省事,netstat兼容老系统,lsof -i:端口看单个占用。定位PID后先确认进程归属再kill,端口连不上时本机占用、防火墙、云安全组三层都要排查。


emer 发布于  2026-10-19 07:25 

Linux查看端口被占用,lsof和netstat命令

前言

启动服务的时候报"Address already in use"?想知道某个端口被哪个进程占了?Linux查看端口占用最常用的就是lsof和netstat命令,本文讲清楚。

一、为什么要查端口

  • 启动服务报端口被占
  • 看某个服务有没有启动
  • 排查安全问题,看有没有可疑端口

二、lsof命令

查看某个端口被哪个进程占用

lsof -i:端口号

例子: 查80端口

lsof -i:80

输出:

COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   1234  root    6u  IPv4  12345      0t0  TCP *:http (LISTEN)

看什么:

  • COMMAND:进程名(nginx)
  • PID:进程ID(1234)
  • USER:运行用户(root)

查看所有TCP端口

lsof -i tcp

查看所有UDP端口

lsof -i udp

杀掉占用端口的进程

kill -9 $(lsof -ti:80)

三、netstat命令

查看某个端口

netstat -tlnp | grep 端口号

例子: 查80端口

netstat -tlnp | grep :80

输出:

tcp  0  0  0.0.0.0:80  0.0.0.0:*  LISTEN  1234/nginx

看什么:

  • 最后一列:进程ID/进程名(1234/nginx)

参数解释

参数 含义
-t TCP端口
-l 只看监听中的
-n 显示数字,不解析域名
-p 显示进程名和PID

查看所有监听端口

netstat -tlnp

四、ss命令(推荐)

ss是netstat的升级版,更快。

查看某个端口

ss -tlnp | grep 端口号

例子:

ss -tlnp | grep :80

查看所有监听端口

ss -tlnp

五、三种命令对比

命令 优点 缺点
lsof 信息全,能看文件 慢
netstat 经典,大家都用 慢
ss 最快,推荐 新命令

推荐: 用ss,最快。

六、常见场景

场景1:启动Nginx报端口被占

nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

排查:

lsof -i:80

解决: 杀掉占用的进程

kill -9 进程ID

场景2:看MySQL有没有启动

ss -tlnp | grep 3306

有输出就是启动了。

场景3:看SSH端口

ss -tlnp | grep sshd

七、常见坑

坑1:没加sudo看不到进程

普通用户只能看自己的进程,看不到别人的。

解决: 加sudo

sudo lsof -i:80
sudo netstat -tlnp

坑2:netstat命令找不到

CentOS7最小化安装没有netstat。

安装:

yum install -y net-tools

坑3:lsof命令找不到

安装:

yum install -y lsof

八、常用命令汇总

# 查80端口被谁占了
lsof -i:80
netstat -tlnp | grep :80
ss -tlnp | grep :80

# 看所有监听端口
netstat -tlnp
ss -tlnp

# 杀掉占用80端口的进程
kill -9 $(lsof -ti:80)

总结

记住:

  1. 查端口用 lsof -i:端口号
  2. 或者用 ss -tlnp | grep 端口号
  3. 看最后一列就是进程名和PID
  4. 杀掉用 kill -9 进程ID
  5. 推荐用ss,最快

最常用:

ss -tlnp | grep :80

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-9 07:48 

Linux查看端口被哪个进程占用,lsof命令

前言

启动服务的时候提示 "Address already in use",端口被占了,但不知道被哪个进程占了?这时候就需要用 lsof 或者 netstat 命令来查一下。本文讲一下怎么用。

lsof 命令

安装

CentOS 最小化安装可能没有 lsof:

yum install -y lsof

查看某个端口被哪个进程占用

lsof -i:端口号

比如看 80 端口被谁占了:

lsof -i:80

输出类似:

COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   1234  root    6u  IPv4  12345      0t0  TCP *:http (LISTEN)

重点看:

  • PID:进程号
  • COMMAND:进程名

知道了 PID 之后,想杀掉就用 kill PID。

查看所有正在监听的端口

lsof -i -P -n | grep LISTEN

输出所有处于监听状态的端口和对应的进程。

netstat 命令

安装

来自 net-tools 包:

yum install -y net-tools

查看端口被哪个进程占用

netstat -tlnp | grep 端口号

比如看 80 端口:

netstat -tlnp | grep :80

输出类似:

tcp   0   0 0.0.0.0:80   0.0.0.0:*   LISTEN   1234/nginx

最后一列就是 PID/进程名。

参数解释

参数 含义
-t 显示 TCP 连接
-l 只显示监听状态的
-n 显示数字,不解析域名
-p 显示进程名和 PID

查看所有监听端口

netstat -tlnp

fuser 命令

查看端口被哪个进程占用

fuser 端口号/tcp

比如:

fuser 80/tcp

输出:

80/tcp:              1234

直接显示 PID,简单粗暴。

杀掉占用端口的进程

fuser -k 80/tcp

直接把占用 80 端口的进程杀掉。

常见场景

场景1:启动 Nginx 提示端口被占

nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

查一下:

lsof -i:80

发现是旧的 nginx 进程没杀掉,直接杀:

kill 1234

或者:

fuser -k 80/tcp

场景2:3306 端口不知道被谁占了

lsof -i:3306

发现是 MySQL 进程,正常的。

场景3:找出所有被占用的端口

netstat -tlnp

列出所有正在监听的端口。

常见坑

坑1:lsof 命令找不到

执行 lsof 提示 command not found。

原因: 没装 lsof 包。

解决:

yum install -y lsof

坑2:普通用户看不到其他用户的进程

用普通用户执行 lsof,看不到 root 的进程。

原因: 权限不够。

解决: 加 sudo 或者切 root:

sudo lsof -i:80

坑3:端口明明没被占但提示被占

服务明明没启动,但启动时提示端口被占。

原因: 可能有 TIME_WAIT 状态的连接还没释放。

解决: 等一会儿再试,或者改端口。

坑4:杀了进程端口还是没释放

杀掉进程了,但端口还是显示被占。

原因: 进程还在退出中,等几秒就好了。

总结

命令 作用
lsof -i:端口号 查看端口被哪个进程占用
netstat -tlnp \| grep :端口号 用 netstat 查端口
fuser 端口号/tcp 查看端口对应的 PID
fuser -k 端口号/tcp 杀掉占用端口的进程

最常用的就是 lsof -i:端口号,一眼就能看到进程名和 PID。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-6 08:02 

Linux查看网络连接数,ss和netstat命令统计

前言

服务器被攻击了?网站访问量突然暴涨?想看看当前有多少人在连接你的服务器?这时候就需要查看网络连接数了。ss 和 netstat 是两个最常用的网络连接查看命令,ss 是新版,速度更快,推荐优先用。本文就讲一下怎么用这两个命令统计网络连接数、排查网络问题。

ss 命令(推荐)

ss 是 iproute2 包自带的,比 netstat 快很多,尤其是连接数很多的时候。

基本用法

ss

显示所有TCP和UDP连接。

统计各状态连接数

ss -s

输出示例:

Total: 120
TCP:   80 (estab 30, closed 40, orphaned 0, timewait 20)

Transport Total     IP        IPv6
RAW       0         0         0
UDP       5         3         2
TCP       80        60        20
INET      85        63        22
FRAG      0         0         0

这就是全局统计,一眼就能看出当前有多少连接。

查看TCP连接

ss -t

只显示TCP连接。

查看所有监听端口

ss -tlnp

参数说明:

  • -t:TCP
  • -l:只显示监听状态的
  • -n:不解析域名,直接显示IP和端口
  • -p:显示进程名

统计某个端口的连接数

比如统计80端口的连接数:

ss -tn | grep :80 | wc -l

统计各状态的TCP连接数

ss -tan | awk '{print $1}' | sort | uniq -c | sort -rn

输出示例:

40 ESTAB
30 TIME-WAIT
10 LISTEN
5 CLOSE-WAIT

netstat 命令

netstat 是老牌命令,很多老脚本还在用。

基本用法

netstat -tlnp

查看监听的TCP端口。

统计各状态连接数

netstat -an | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

统计某个端口的连接数

netstat -an | grep :80 | wc -l

查看哪个进程在监听某个端口

netstat -tlnp | grep :80

连接状态详解

TCP连接有很多状态,常见的:

状态 含义
ESTABLISHED 已建立连接,正在通信
LISTEN 监听中,等待连接
TIME_WAIT 主动关闭方等待,防止旧包干扰新连接
CLOSE_WAIT 被动关闭方等待,说明程序没正确关闭连接
FIN_WAIT1 主动关闭方,等待对方回应
FIN_WAIT2 主动关闭方,已经收到对方回应

重点关注:

  • ESTABLISHED 多:说明当前活跃连接多,正常
  • TIME_WAIT 多:说明短连接很多,正常但要注意
  • CLOSE_WAIT 多:说明程序有bug,没正确关闭连接

实际排查案例

案例1:看看当前有多少人访问网站

ss -tn | grep :80 | grep ESTAB | wc -l

统计80端口已建立连接的数量。

案例2:看看哪个IP连接最多

ss -tn state established '( sport = :80 )' | awk '{print $4}' | awk -F: '{print $1}' | sort | uniq -c | sort -rn | head -10

输出连接最多的前10个IP。

案例3:看看是不是被攻击了

如果突然有大量 TIME_WAIT 或 CLOSE_WAIT,可能是被攻击了。

ss -tan | awk '{print $1}' | sort | uniq -c | sort -rn

常见坑

坑1:连接数多就是被攻击了

连接数多不一定是被攻击。如果是正常的网站访问量上涨,连接数多是正常的。要看连接来源IP分布和连接状态。

坑2:TIME_WAIT 多就优化

TIME_WAIT 是TCP协议的正常机制,不需要太紧张。除非 TIME_WAIT 数量特别多(几万几十万),影响了性能,再考虑优化。

坑3:CLOSE_WAIT 多不处理

CLOSE_WAIT 多说明你的程序有bug,没有正确关闭连接。时间长了会把文件句柄用完,导致新连接建不起来。这是程序问题,要改代码。

总结

查看网络连接数的核心命令:

  1. ss -s:快速看全局统计
  2. ss -tlnp:看监听端口和对应进程
  3. ss -tan | awk '{print $1}' | sort | uniq -c:统计各状态连接数
  4. netstat:老命令,兼容性好,但慢

推荐用 ss,比 netstat 快很多,尤其是连接数很多的时候。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-5 07:39 

Linux查看服务器开放端口,netstat和ss命令使用教程

前言

部署完网站后,经常需要确认某个端口是否真的开放了,或者排查服务有没有正常监听。Linux 下最常用的两个工具就是 netstat 和 ss。netstat 是老经典,几乎所有系统都自带;ss 是 iproute2 套件里的新工具,性能更好、信息更全。本文把这两个命令的常用用法都整理出来,新手照着抄就行。

netstat 命令用法

1. 查看所有监听端口

netstat -tlnp

参数说明:

  • -t:只显示 TCP 连接
  • -l:只显示监听状态的端口
  • -n:以数字形式显示端口号,不做域名解析
  • -p:显示占用端口的进程名和 PID

输出示例:

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
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      5678/nginx
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      5678/nginx

2. 查看 UDP 端口

netstat -ulnp

把 -t 换成 -u 就是查看 UDP 端口。

3. 查看所有端口(TCP+UDP)

netstat -tulnp

4. 查看指定端口是否被占用

netstat -tlnp | grep 80

如果 80 端口被占用,会输出对应的进程信息。

5. 查看所有网络连接(不只是监听)

netstat -an

-a 表示显示所有连接,不只是监听状态的。

ss 命令用法

ss 是 netstat 的替代品,在服务器上性能更好,尤其是连接数很多的时候。

1. 查看所有监听端口

ss -tlnp

参数和 netstat 基本一样:

  • -t:TCP
  • -l:监听状态
  • -n:数字形式
  • -p:显示进程

2. 查看 UDP 端口

ss -ulnp

3. 查看所有端口(TCP+UDP)

ss -tulnp

4. 查看指定端口

ss -tlnp | grep 443

5. 查看所有已建立的连接

ss -tn state established

可以用来统计当前服务器有多少个活跃连接。

6. 查看某个IP的连接

ss -tn dst 192.168.1.100

查看和 192.168.1.100 之间的所有连接。

两个命令的区别

对比项 netstat ss
性能 连接数多的时候很慢 非常快
来源 net-tools 包 iproute2 包
兼容性 几乎所有 Linux 都有 新系统默认自带
功能 基础网络查询 更丰富的过滤功能

建议: 日常排查用 ss 更高效,老系统上找不到 ss 再用 netstat。

常见坑

坑1:看不到进程信息

执行 netstat -tlnp 或 ss -tlnp 时,如果看不到 PID/Program name 那一列,说明你不是 root 用户。加上 sudo 再执行:

sudo netstat -tlnp
sudo ss -tlnp

坑2:端口显示是 :: 而不是 0.0.0.0

0.0.0.0:80 表示监听所有 IPv4 地址的 80 端口;:::80 表示监听所有 IPv6 地址的 80 端口(同时也兼容 IPv4)。这两种都能从外网访问,不用担心。

坑3:查不到端口但服务明明启动了

检查一下服务是不是只监听了 127.0.0.1。如果 Local Address 显示的是 127.0.0.1:80,那外网是访问不了的,只能本机访问。需要修改服务配置监听 0.0.0.0。

总结

查看 Linux 开放端口记住这几个核心命令就够了:

  • 常用查看:ss -tlnp 或 netstat -tlnp
  • 查指定端口:ss -tlnp | grep 端口号
  • 查UDP端口:ss -ulnp

日常排查优先用 ss,速度快信息全;老系统没 ss 再用 netstat。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-5 07:24 
'); })();