当前位置: 首页 > Linux

谁在占用我的linux端口?

时间:2023-04-06 04:42:58 Linux

最近开了一个3A平台下的linux服务器,学习linux服务器。Addressalreadyinuse这种提示,你一定遇到过,如何快速找到问题并解决?有几种姿势需要理解。在排除网络连接或特定于应用程序的问题时,首先要检查的最重要的事情之一应该是系统上实际使用了哪些端口,以及哪个应用程序正在侦听特定端口。本文介绍了如何使用netstat、ss和lsof命令找出哪些服务正在侦听哪些端口。这些说明适用于所有基于Linux和Unix的操作系统,例如macOS。什么是监听端口?网络端口由其编号、关联的IP地址和通信协议类型(如TCP或UDP)标识。侦听端口是应用程序或进程侦听的网络端口,充当通信端点。每个侦听端口都可以使用防火墙打开或关闭(过滤)。一般来说,开放端口是接受来自远程位置的传入数据包的网络端口。你不能让两个服务监听同一个IP地址上的同一个端口。例如,如果您正在运行侦听端口80和443的ApacheWeb服务器,并且您尝试安装Nginx,后者将无法启动,因为HTTP和HTTPS端口已被使用。使用netstat检查侦听端口netstat是一种命令行工具,可提供有关网络连接的信息。要列出所有侦听的TCP或UDP端口,包括使用端口和套接字状态的服务,请使用以下命令:sudonetstat-tunlp该命令中使用的选项具有以下含义:-t-显示TCP端口。-u-显示UDP端口。-n-显示数字地址而不是解析主机。-l-只显示监听端口。-p-显示侦听进程的PID和名称。仅当您以root或sudo用户身份运行命令时才会显示此信息。输出将如下所示:ProtoRecv-QSend-QLocalAddressForeignAddressStatePID/Programnametcp000:220:*LISTEN445/sshdtcp000:250:*LISTEN929/mastertcp600::3306::*LISTEN534/mysqldtcp600::80::::*LISTEN515/apache2tcp600::22::*LISTEN445/sshdtcp600::25:::*LISTEN929/mastertcp600:::33060:::*LISTEN534/mysqldudp000:680:*966/dhclient在我们的例子中,重要的列是:Proto-Socket使用的协议这个单词。本地地址-进程正在侦听的IP地址和端口号。PID/Programname-PID和进程名称。如果要过滤结果,请使用grep命令。例如,要查找侦听TCP端口22的进程,您可以键入:sudonetstat-tnlp|grep:22输出显示这台计算机上的端口22被SSH服务器使用:tcp000:220:*LISTEN445/sshdtcp600:::22:::*LISTEN445/sshd如果输出是空,表示没有监听端口。您还可以根据PID、协议、状态等条件过滤列表。netstat已过时,被ss和ip取代,但它仍然是检查网络连接的最常用命令。使用ss检查侦听端口ss是新的netstat。它缺少netstat的某些功能,但公开了更多的TCP状态并且速度稍快。命令选项基本相同,因此从netstat转换为ss并不困难。要使用ss获取所有侦听端口的列表,请输入:sudoss-tunlp输出几乎与netstat报告的相同:StateRecv-QSend-QLocalAddress:PortPeerAddress:PortLISTEN01280:220:*用户:(("sshd",pid=445,fd=3))LISTEN01000:250:*用户:(("master",pid=929,fd=13))LISTEN0128*:3306*:*用户:(("mysqld",pid=534,fd=30))LISTEN0128*:80*:*用户:(("apache2",pid=765,fd=4),("apache2",pid=764,fd=4),("apache2",pid=515,fd=4))LISTEN0128[::]:22[::]:*用户:(("sshd",pid=445,fd=4))LISTEN0100[::]:25[::]:*用户:(("master",pid=929,fd=14))LISTEN070*:33060*:*users:(("mysqld",pid=534,fd=33))用lsof检查监听端口lsof是一个强大的命令行应用程序,它提供有关Linux中进程打开的文件的信息,一切都是文件.您可以将套接字视为写入网络的文件。要使用lsof获取所有侦听TCP端口的列表,请输入:sudolsof-nP-iTCP-sTCP:LISTEN使用的选项如下:-n-不要将端口号转换为端口名称。-p-不解析主机名,显示数字地址。-iTCP-sTCP:LISTEN-只显示TCP状态为LISTEN的网络文件。命令PID用户FD类型设备大小/关闭节点名称sshd445root3uIPv4164340t0TCP*:22(LISTEN)sshd445root4uIPv6164450t0TCP*:22(LISTEN)apache2515root40(TCP16090*8:0tLISTEN)mysqld534mysql30uIPv6176360t0TCP*:3306(LISTEN)mysqld534mysql33uIPv6199730t0TCP*:33060(LISTEN)apache2764www-data4uIPv6165900t0TCP*:80(LISTEN7che6apadata4uIPv6165900t0TCP*:80(LISTEN)master929root13uIPv4196370t0TCP*:25(LISTEN)master929root14uIPv6196380t0TCP*:25(LISTEN)大多数输出??列名都是不言自明的:COMMAND,PID,USER-运行与该端口关联的程序的名称、PID和用户。NAME-端口号。要查找正在侦听特定端口(例如端口3306)的进程,您可以使用:sudolsof-nP-iTCP:3306-sTCP:LISTEN输出显示MySQL服务器使用端口3306:COMMANDPIDUSERFDTYPEDEVICESIZE/OFFNODENAMEmysqld534mysql30uIPv6176360t0TCP*:3306(LISTEN)