Linux 端口操作全攻略:查看、关闭与防火墙设置

在 Linux 系统管理中,端口操作是一项基础且重要的技能。无论是部署新服务、排查网络问题,还是保障系统安全,我们都需要对端口进行查看、关闭以及配置防火墙相关设置。接下来,就为大家详细介绍这些操作。

一、查看占用端口的应用 PID

在 Linux 系统中,有多种命令可以帮助我们找出占用特定端口的应用及其进程 ID(PID)。

1. 使用 netstat 命令

netstat 是一个功能强大的网络工具,能够显示网络连接、路由表和网络接口等信息。通过它可以查看占用端口的进程。

sudo netstat -tulnp | grep :端口号

参数解释:

  • -t:表示查看 TCP 协议相关的端口。
  • -u:用于查看 UDP 协议的端口。
  • -l:仅显示处于监听状态的端口。
  • -n:以数字形式显示端口号和 IP 地址,不进行域名和服务名的解析,这样能加快命令执行速度。
  • -p:显示占用端口的进程信息,不过使用此参数需要管理员权限(sudo)。

例如,要查看占用 8080 端口的进程,命令如下:

sudo netstat -tulnp | grep :8080

执行后,可能得到类似这样的输出:

tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      1234/java

其中,1234 就是占用 8080 端口的 Java 进程的 PID。

2. 使用 lsof 命令

lsof(list open files)用于列出系统中所有打开的文件,包括网络套接字,所以也能用来查看占用端口的进程。

sudo lsof -i :端口号

例如,查看 8080 端口的占用情况:

sudo lsof -i :8080

输出结果示例:

COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    1234  user    4u  IPv6 123456  0t0  TCP *:8080 (LISTEN)

从这里可以清晰地看到,java 进程(PID 为 1234)占用了 8080 端口。

3. 使用 ss 命令

ss 命令是 netstat 的替代工具,它更为快速高效,同样能用于查看端口占用情况。

sudo ss -ltnp | grep :端口号

参数说明:

  • -l:仅显示监听状态的套接字。
  • -t:查看 TCP 套接字。
  • -n:以数字形式显示端口和地址。
  • -p:显示进程信息。

比如查看 8080 端口:

sudo ss -ltnp | grep :8080

输出可能为:

LISTEN 0      128    *:8080    *:*    users:(("java",pid=1234,fd=3))

从中可获取到占用端口的进程信息,这里 PID 为 1234 的 java 进程占用了 8080 端口。

二、关闭占用端口的应用

当我们确定了占用端口的应用及其 PID 后,就可以根据具体情况选择合适的方法关闭这些应用,释放端口资源。

1. 对于系统服务类型的应用

如果占用端口的应用是通过系统服务管理的(如使用 systemd 的系统,常见于 CentOS 7 及以上、Ubuntu 16.04 及以上版本),可以使用 systemctl 命令来停止服务。

例如,假设 8080 端口被 Tomcat 服务占用,停止 Tomcat 服务的命令为:

sudo systemctl stop tomcat

如果希望禁止该服务在系统下次启动时自动开启,可以执行:

sudo systemctl disable tomcat

2. 对于普通进程

如果占用端口的是普通进程,而非系统服务,可以使用 kill 命令结合进程 PID 来终止进程。

假设通过前面的方法查找到占用端口的进程 PID 为 1234,那么使用以下命令终止该进程:

sudo kill 1234

如果进程没有正常响应,无法通过上述命令终止,可以使用强制终止的方式:

sudo kill -9 1234

不过,使用 kill -9 要谨慎,因为它会强制杀死进程,可能导致进程没有机会进行正常的清理工作,如保存未完成的数据等。

另外,还可以使用 fuser 命令直接终止占用端口的进程,例如要终止占用 8080 端口的进程:

sudo fuser -k 8080/tcp

-k 参数表示发送 SIGKILL 信号,强制终止进程。

三、检查端口是否在防火墙开启

在 Linux 系统中,常见的防火墙有 iptablesfirewalld,下面分别介绍如何检查端口在这两种防火墙中是否开启。

1. 使用 iptables 防火墙

iptables 是传统的 Linux 防火墙工具。检查某个端口是否在 iptables 中开放,可以通过查看防火墙规则来判断。

例如,要检查 8080 端口是否开放,可以查看 INPUT 链的规则:

sudo iptables -L INPUT -n | grep 8080

如果输出结果中有允许 8080 端口通过的规则(例如 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080),则表示该端口在 iptables 中是开放的;若没有相关规则,或者规则是 DROP,则表示端口未开放或被阻止。

2. 使用 firewalld 防火墙

firewalld 是现代 Linux 系统中常用的防火墙管理工具,检查端口是否开放的方法更为直接。

sudo firewall-cmd --query-port=端口号/tcp

例如,检查 8080 端口是否开放:

sudo firewall-cmd --query-port=8080/tcp

如果返回 yes,说明 8080 端口在 firewalld 中已开放;若返回 no,则表示端口未开放。

若要添加开放端口的规则,可以使用以下命令(以开放 8080 端口为例):

sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent

参数解释:

  • --zone=public:指定作用的区域为公共区域。
  • --add-port=8080/tcp:表示添加开放 8080 端口的 TCP 协议规则。
  • --permanent:使设置永久生效,否则在防火墙重启后设置会失效。

添加规则后,需要重新加载防火墙配置才能使新规则生效:

sudo firewall-cmd --reload

若要移除已开放的端口规则,命令如下:

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

同样,移除规则后也要执行 firewall-cmd --reload 使更改生效。

通过以上介绍,相信大家对 Linux 系统中端口的相关操作有了全面的了解,无论是查看端口占用、关闭占用端口的应用,还是检查和配置防火墙端口开放,都能熟练应对,为 Linux 系统的稳定运行和安全保障提供有力支持。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐