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

排查网站问题时,第一步经常是"看看端口到底开没开、哪个进程在监听"。Linux 下最常用的两个命令是 netstat 和 ss,下面整理最实用的用法。

一、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:80              0.0.0.0:*               LISTEN      1234/nginx
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      5678/sshd

2. 查看某个端口是否被占用

netstat -tlnp | grep 80

如果有输出说明 80 端口正在被占用,后面会显示是什么进程。

3. 查看所有 UDP 端口

netstat -ulnp

二、ss 命令(新系统推荐,更快)

ss 是 netstat 的替代品,在服务器连接数很多时速度快很多。

1. 查看所有监听端口

ss -tlnp

用法和 netstat 几乎一样,参数相同。

2. 查看某个端口

ss -tlnp | grep 443

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

ss -tn state established

三、其他常用排查命令

1. 直接看某个端口的进程

lsof -i:80

这个最直观,直接告诉你 80 端口被哪个 PID 占用了。

2. 查看某个进程监听了哪些端口

lsof -i | grep nginx

四、常见场景

场景1:网站打不开,怀疑端口没开

netstat -tlnp | grep 80

没有输出说明 Nginx 没启动,或者端口配置错了。

场景2:端口被占用,想换端口

lsof -i:3306
kill -9 12345  # 杀掉占用进程

场景3:服务器卡,想看有多少连接

ss -tn state established | wc -l

五、netstat 找不到怎么办?

CentOS 7 最小化安装可能没有 netstat,安装一下:

yum install net-tools -y

或者直接用 ss 命令,系统默认自带。


遇到服务器、Nginx、MySQL 报错,可以加微信远程协助排查问题。


emer 发布于  2026-10-4 19:24 

CentOS7 firewalld开放80、443端口永久生效命令

CentOS 7 默认使用 firewalld 作为防火墙管理工具。很多新手搭建网站后发现外网访问不了,90% 都是因为 80、443 端口没开放。下面是完整的操作步骤,照抄就能用。

1. 先确认防火墙状态

systemctl status firewalld

如果显示 active (running) 说明防火墙正在运行,需要继续下面的操作。如果是 inactive 那就是防火墙没开,问题不在这里。

2. 开放 80 端口(HTTP)

firewall-cmd --zone=public --add-port=80/tcp --permanent

参数说明:

  • --zone=public:作用域为公共区域
  • --add-port=80/tcp:开放 80 端口,TCP 协议
  • --permanent:永久生效,不加这个重启服务器就失效了

3. 开放 443 端口(HTTPS)

firewall-cmd --zone=public --add-port=443/tcp --permanent

4. 一次性开放多个端口

如果需要同时开放多个端口,可以一条命令搞定:

firewall-cmd --zone=public --add-port=80/tcp --add-port=443/tcp --permanent

5. 重载防火墙使配置生效

⚠️ 重点:开放端口后必须重载,否则不生效!

firewall-cmd --reload

6. 查看已开放的端口

确认一下端口有没有真正开放成功:

firewall-cmd --list-ports

正常会输出类似:

80/tcp 443/tcp

7. 常用其他端口开放命令

SSH 端口(默认22,建议改成别的):

firewall-cmd --zone=public --add-port=22/tcp --permanent

MySQL 端口(如果需要远程连接数据库):

firewall-cmd --zone=public --add-port=3306/tcp --permanent

Redis 端口:

firewall-cmd --zone=public --add-port=6379/tcp --permanent

8. 移除/关闭已开放的端口

如果某个端口不需要了,想关掉:

firewall-cmd --zone=public --remove-port=8080/tcp --permanent
firewall-cmd --reload

常见坑

  1. 加了 --permanent 还是不生效?
    忘记 firewall-cmd --reload 了。永久配置写入后必须重载才会加载到运行时。

  2. 端口开放了还是访问不了?
    检查云服务商的安全组(阿里云/腾讯云/华为云都有这个东西),防火墙和安全组是两层,都要开。

  3. firewalld 命令找不到?
    CentOS 7 最小化安装可能没装,执行 yum install firewalld -y 安装。

  4. 临时开放端口(重启就失效)
    去掉 --permanent 参数就是临时开放,重启或 reload 后自动关闭。


遇到服务器、Nginx、MySQL 报错,可以加微信远程协助排查问题。


emer 发布于  2026-10-4 19:22