自学内容网 自学内容网

linux下解决端口占用问题

端口占用的概念

  • 端口是计算机网络中用于区分不同应用程序或服务的数字标识。在网络通信中,当一个程序(如服务器程序)绑定到一个特定端口并开始监听该端口时,这个端口就被占用了。例如,Web服务器通常会监听80端口(用于HTTP协议)和443端口(用于HTTPS协议),当Web服务器启动后,这些端口就处于占用状态。
  • 端口号的范围是从0到65535。其中,0 - 1023是公认端口,这些端口被分配给一些众所周知的服务,如21端口用于FTP服务、22端口用于SSH服务、23端口用于Telnet服务等。1024 - 49151是注册端口,通常用于用户自定义的应用程序或服务。49152 - 65535是动态或私有端口,这些端口可以被应用程序临时使用。

查看端口占用情况

  • 使用netstat命令(在大多数Linux系统中可用)
    • netstat -tln:用于查看当前系统正在监听(l)的TCP(t)端口信息。例如,命令输出可能如下:
Active Internet connections (only servers)
Proto Recv - Q Send - Q Local Address           Foreign Address         State
tcp        0        0 0.0.0.0:22               0.0.0.0:*               LISTEN
tcp        0        0 127.0.0.1:631            0.0.0.0:*               LISTEN
tcp6       0        0 :::80                    :::*                    LISTEN

这表示系统正在监听22端口(可能是SSH服务)、631端口(可能是CUPS打印服务)和80端口(可能是Web服务)。其中0.0.0.0表示所有可用的网络接口,127.0.0.1表示本地回环接口,:::表示IPv6的所有网络接口。
- netstat -tlnp:除了显示监听端口信息外,还会显示占用端口的进程ID(p)和进程名称。例如:

Active Internet connections (only servers)
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 127.0.0.1:631            0.0.0.0:*               LISTEN      5678/cupsd
tcp6       0        0 :::80                    :::*                    LISTEN      9101/nginx

这里可以看到占用22端口的是sshd进程(进程ID为1234),占用631端口的是cupsd进程(进程ID为5678),占用80端口的是nginx进程(进程ID为9101)。

  • 使用lsof命令(在大多数Linux和Unix系统中可用)
    • lsof -i:80:用于查看占用80端口的进程信息。输出可能如下:
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx    9101   root    6u  IPv4  12345      0t0  TCP *:80 (LISTEN)

这表示nginx进程(PID为9101)占用了80端口,FD列表示文件描述符(这里是6),TYPE列表示连接类型(这里是IPv4),DEVICE列是设备相关信息,SIZE/OFF列是文件大小或偏移量相关信息,NODE列是节点相关信息,NAME列是网络连接名称(这里是TCP *:80 (LISTEN)表示TCP协议,监听80端口)。

解决端口占用问题

  • 更改冲突程序的端口设置
    如果发现两个程序占用了相同的端口,并且可以修改其中一个程序的端口设置,那么可以通过修改配置文件来解决。例如,对于一个简单的Python Web服务器程序,如果它默认监听8000端口,但这个端口已经被占用,可以修改程序代码或者配置文件,将其监听端口改为其他未被占用的端口,如8080端口。
  • 终止占用端口的进程(谨慎使用)
    如果确定某个进程不应该占用特定端口(比如是一个已经停止使用的旧服务留下的进程),可以通过终止该进程来释放端口。在Linux系统中,如果知道占用端口的进程ID(通过netstat -tlnplsof -i命令获取),可以使用kill命令来终止进程。例如,如果进程ID是1234,使用kill 1234来发送终止信号给该进程。如果进程没有响应正常的kill信号,可以使用kill -9 1234-9表示强制终止),但这种方式可能会导致进程没有机会进行清理操作,有可能丢失数据,所以要谨慎使用。

原文地址:https://blog.csdn.net/my_study_everyday/article/details/143812235

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!