菜鸟科技网

Linux端口命令有哪些?

目录

  1. 查看端口状态与监听信息
    • ss - 现代、快速的替代品
    • netstat - 传统但依然强大的工具
    • lsof - 列出打开的文件,也能看端口
    • nc / netcat - 网络瑞士军刀,用于探测端口
  2. 管理端口与服务
    • firewalld - 动态防火墙管理器(CentOS/RHEL 7+)
    • iptables - 经典的防火墙工具
    • ufw - Uncomplicated Firewall (Ubuntu/Debian)
  3. 综合示例与实战
    • 我如何知道哪个程序占用了 80 端口?
    • 如何开放一个端口?
    • 如何限制某个 IP 访问我的 22 端口?
    • 如何检查远程服务器的一个端口是否可达?
  4. 常见问题与解答

查看端口状态与监听信息

ss - 推荐 (Socket Statistics)

ss 命令是 netstat 的现代替代品,速度更快,信息更全,在大多数现代 Linux 发行版中是默认安装的。

Linux端口命令有哪些?-图1
(图片来源网络,侵删)

常用选项:

  • -t: TCP 端口
  • -u: UDP 端口
  • -l: 只显示监听 (Listening) 的端口
  • -n: 以数字形式显示地址和端口,不进行 DNS 解析(速度快)
  • -p: 显示使用该端口的进程 ID (PID) 和名称
  • -a: 显示所有端口 (包括监听和非监听)
  • -4: 只显示 IPv4 端口
  • -6: 只显示 IPv6 端口

示例:

  • 查看所有监听的 TCP 端口:

    ss -tlnp

    输出示例:

    Linux端口命令有哪些?-图2
    (图片来源网络,侵删)
    State      Recv-Q Send-Q Local Address:Port               Peer Address:Port
    LISTEN     0      128          0.0.0.0:22                    0.0.0.0:*
    LISTEN     0      511             [::]:80                       [::]:*
    LISTEN     0      4096       127.0.0.1:631                     127.0.0.1:*
    • State: 状态,LISTEN 表示正在监听。
    • Local Address:Port: 本地地址和端口号。
    • PID/Program name: 进程 ID 和程序名(由 -p 选项显示)。
  • 查看所有监听的 UDP 端口:

    ss -ulnp
  • 查找特定端口(如 8080)是否被占用:

    ss -tlnp | grep 8080
  • 查看所有与某个 IP 地址相关的连接:

    ss -tunap | grep 192.168.1.100

netstat - 传统工具

netstat 是一个非常经典和广泛使用的网络工具,虽然在新系统中逐渐被 ss 替代,但仍然非常常见。

Linux端口命令有哪些?-图3
(图片来源网络,侵删)

常用选项:

  • -t: TCP
  • -u: UDP
  • -l: 只显示监听
  • -n: 数字形式
  • -p: 显示 PID/程序名
  • -a: 所有
  • -c: 持续刷新(类似 top

示例:

  • 查看所有监听的 TCP 端口:

    netstat -tlnp
  • 查看所有网络连接(包括监听和非监听):

    netstat -an
  • 持续监控网络连接状态变化:

    netstat -c

lsof - List Open Files

lsof 的主要功能是列出系统当前打开的文件,因为 Linux 中一切皆文件,所以网络端口也被视为文件。lsof 是查找端口占用进程的利器。

常用选项:

  • -i: 列出符合条件的进程。
    • [4|6]: IPv4 或 IPv6。
    • [TCP|UDP]: 指定协议。
    • 端口号: 指定端口号。
    • @IP地址: 指定 IP 地址。
  • -P: 不将端口号解析为服务名(速度更快)。
  • -n: 不将主机名解析为 IP 地址(速度更快)。
  • -s: 显示套接字层信息,如 TCP 状态。

示例:

  • 查看谁在使用 80 端口:

    sudo lsof -i :80

    输出示例:

    COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    nginx     1234   root    6u  IPv4   12345      0t0  TCP *:http (LISTEN)
    nginx     1235 www-data 6u  IPv4   12345      0t0  TCP *:http (LISTEN)
  • 查看所有监听的 TCP 端口:

    sudo lsof -i -P -n | grep LISTEN

nc / netcat - 网络瑞士军刀

nc 是一个功能强大的网络工具,用于读取和写入网络连接,它常用于网络测试、端口扫描和数据传输。

常用选项:

  • -z: 只进行端口扫描,不发送数据。
  • -v: 显示详细信息(verbose)。
  • -n: 不进行 DNS 解析。
  • -w <秒数>: 设置超时时间。

示例:

  • 扫描本地主机的 1-1024 端口:

    nc -zv localhost 1-1024

    输出示例:

    Connection to localhost 22 port [tcp/ssh] succeeded!
    Connection to localhost 80 port [tcp/http] succeeded!
  • 检查远程服务器 (192.168.1.10) 的 22 端口是否开放:

    nc -zv 192.168.1.10 22

管理端口与服务

这部分命令用于开放或关闭网络端口,主要通过防火墙实现。

firewalld - 动态防火墙管理器 (CentOS/RHEL 7+)

firewalld 提供了动态管理的防火墙,支持区域、服务和端口,无需重启即可更新规则。

常用命令:

  • 启动并设置开机自启:

    sudo systemctl start firewalld
    sudo systemctl enable firewalld
  • 开放一个端口(如 8080/TCP):

    # 临时添加,重启后失效
    sudo firewall-cmd --add-port=8080/tcp
    # 永久添加
    sudo firewall-cmd --permanent --add-port=8080/tcp
    # 重新加载防火墙使永久规则生效
    sudo firewall-cmd --reload
  • 查看已开放的端口:

    sudo firewall-cmd --list-ports
  • 移除一个端口:

    sudo firewall-cmd --permanent --remove-port=8080/tcp
    sudo firewall-cmd --reload
  • 开放一个预定义的服务(如 http):

    sudo firewall-cmd --permanent --add-service=http
    sudo firewall-cmd --reload

iptables - 经典的防火墙工具

iptables 是 Linux 内核的防火墙工具,功能极其强大,但规则是静态的,修改后需要保存和重启服务才能生效。

常用命令:

  • 开放一个端口(如 8080/TCP):

    # -A INPUT: 追加规则到 INPUT 链的末尾
    # -p tcp: 协议为 TCP
    # --dport 8080: 目标端口为 8080
    # -j ACCEPT: 动作为接受
    sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
    # 保存规则(CentOS/RHEL)
    sudo service iptables save
    # 保存规则 (Debian/Ubuntu)
    sudo iptables-save > /etc/iptables/rules.v4
  • 查看当前规则:

    sudo iptables -L -n -v
  • 移除一个规则:

    # 需要和添加时完全一样,除了 -A 换成 -D
    sudo iptables -D INPUT -p tcp --dport 8080 -j ACCEPT
    sudo service iptables save

ufw - Uncomplicated Firewall (Ubuntu/Debian)

ufwiptables 的一个前端工具,旨在简化防火墙的配置,语法非常简单。

常用命令:

  • 启用 UFW:

    sudo ufw enable
  • 开放一个端口(如 8080):

    sudo ufw allow 8080
  • 开放特定协议的端口(如 8080/tcp):

    sudo ufw allow 8080/tcp
  • 开放一个预定义的服务(如 http):

    sudo ufw allow http
  • 查看防火墙状态和规则:

    sudo ufw status verbose
  • 删除规则:

    # 根据规则序号删除
    sudo ufw delete 3
    # 根据规则内容删除
    sudo ufw delete allow 8080

综合示例与实战

我如何知道哪个程序占用了 80 端口?

# 使用 ss
sudo ss -tlnp | grep ':80'
# 或者使用 lsof
sudo lsof -i :80

目的:快速定位占用端口的进程,以便排查问题或终止进程。

如何开放一个端口?

假设你的应用运行在 3000 端口,你需要从外部访问它。

对于 Ubuntu/Debian 系统:

# 1. 开放端口
sudo ufw allow 3000
# 2. 检查规则是否生效
sudo ufw status

对于 CentOS/RHEL 系统:

# 1. 开放端口(永久)
sudo firewall-cmd --permanent --add-port=3000/tcp
# 2. 重新加载防火墙
sudo firewall-cmd --reload
# 3. 检查端口是否开放
sudo firewall-cmd --list-ports

目的:配置防火墙,允许外部流量访问指定端口。

如何限制某个 IP 访问我的 22 端口?

假设你想禁止 IP 168.1.200 访问你的 SSH 服务(22端口)。

对于 iptables (最灵活):

# -s 192.168.1.200: 源地址
# -j DROP: 丢弃数据包
sudo iptables -A INPUT -p tcp -s 192.168.1.200 --dport 22 -j DROP
sudo service iptables save

对于 ufw (语法简单):

# deny from: 拒绝来自
sudo ufw deny from 192.168.1.200 to any port 22

目的:实现基于 IP 地址的访问控制,增强安全性。

如何检查远程服务器的一个端口是否可达?

你想测试你的云服务器(IP 0.113.10)的 80 端口是否可以正常访问。

# 使用 nc (netcat)
nc -zv 203.0.113.10 80
# 使用 telnet (传统工具,但很多系统默认有)
telnet 203.0.113.10 80
# (如果能连接上,会显示一个空白界面)
# (如果不能连接,会显示 connection refused 或 timeout)

目的:网络连通性测试,验证端口是否开放且防火墙没有阻止。


常见问题与解答

Q: ssnetstat 有什么区别?我应该用哪个? A: ssnetstat 的现代替代品,它直接从内核获取信息,速度更快,尤其是在连接数很多的系统上。ss 还提供了更多的功能,如 TCP 状态统计。推荐在所有新系统中使用 ss

Q: 为什么我用 ssnetstat 看不到端口? A: 最常见的原因是 权限问题,查看其他用户或需要特殊权限的进程的端口信息通常需要 sudo

# 错误(可能看不到所有信息)
ss -tlnp
# 正确(可以看到所有进程的端口信息)
sudo ss -tlnp

Q: LISTEN 状态是什么意思? A: LISTEN 状态表示一个进程正在某个端口上“监听”或“等待”新的连接请求,这是服务器端程序(如 Nginx, Apache, SSH)的正常状态,客户端程序在连接时不会处于 LISTEN 状态。

Q: 为什么我开放了端口,但外部还是连不上? A: 这是一个经典问题,请按以下顺序排查:

  1. 防火墙:确认你的系统防火墙(firewalld, iptables, ufw)已经正确开放了该端口。
  2. 云服务商安全组:如果你使用的是云服务器(如 AWS, 阿里云, 腾讯云),检查其控制台中的安全组网络ACL规则,确认入站规则已放行该端口。
  3. 应用程序:确认你的应用程序确实在监听 0.0.0(监听所有 IP)或正确的公网 IP,而不是 0.0.1(仅本地访问)。
  4. 端口冲突:确认没有其他程序占用了同一个端口。
  5. 网络:使用 telnetnc 从外部机器测试,看是超时还是 connection refused,这能帮你定位问题是网络不通还是服务未启动。

希望这份大全对你有帮助!

分享:
扫描分享到社交APP
上一篇
下一篇