0

0

Linux怎么查看网络服务监听端口

P粉602998670

P粉602998670

发布时间:2025-09-16 14:21:01

|

1280人浏览过

|

来源于php中文网

原创

使用ss、netstat或lsof命令可查看Linux系统中监听端口的网络服务。ss -tuln和netstat -tuln用于列出TCP/UDP监听端口,ss性能更优;lsof -i -P -n | grep LISTEN可查进程详情。推荐优先使用ss,配合-p参数或lsof -i :端口号反查占用进程,结合ps命令进一步分析。若端口被占用,先确认占用进程身份,再决定重启、修改配置或终止进程,生产环境中应谨慎操作以避免影响其他服务。

linux怎么查看网络服务监听端口

在Linux系统里,想知道哪个网络服务正在监听哪个端口,其实不复杂,核心就是用几个命令去“问”系统。最常用也最直接的方法就是利用

netstat
ss
或者
lsof
这几个工具。它们能帮你快速定位到活跃的网络连接和监听状态的端口。

解决方案

要查看Linux系统上的网络服务监听端口,我通常会从以下几个命令入手,它们各有侧重,但都能解决问题:

首先是

ss
命令。这是我个人比较偏爱的一个,因为它在现代Linux系统上通常比
netstat
更快、更高效,尤其是在处理大量连接时。它的输出也相对简洁明了。

ss -tuln

这里

-t
表示TCP连接,
-u
表示UDP连接,
-l
表示只显示监听(Listening)状态的套接字,
-n
表示不解析服务名和主机名,直接显示端口号和IP地址,这样可以避免DNS查询,加快速度。 输出会列出协议、接收/发送队列、本地地址(包含端口)和对端地址。一眼就能看到哪些端口在被监听。

接着是

netstat
。虽然
ss
逐渐取代了它的地位,但
netstat
依然是许多老兵习惯用的命令,在一些旧系统上也可能只有它。

netstat -tuln

这个命令的参数和

ss
类似,
-t
(TCP),
-u
(UDP),
-l
(Listening),
-n
(Numeric)。它的输出格式可能稍微有点不同,但核心信息是一样的。在一些系统上,
netstat
可能需要安装
net-tools
包。

最后,

lsof
命令。这个工具更强大,因为它能列出所有打开的文件,而网络连接在Unix/Linux哲学里也被视为一种文件。用它来查看监听端口,可以更清晰地看到是哪个进程(PID)在监听。

lsof -i -P -n | grep LISTEN

-i
表示列出所有网络文件,
-P
表示不解析端口名(直接显示数字),
-n
表示不解析主机名。然后通过
grep LISTEN
筛选出处于监听状态的行。这个命令的输出会包含进程ID(PID)、用户、命令等详细信息,非常适合需要追踪具体进程的场景。

这些命令基本上能覆盖我日常工作中查看端口监听状态的绝大部分需求。

netstat和ss有什么区别,我该用哪个?

这个问题其实挺有意思的,也是我在日常运维中经常思考的一个点。简单来说,

ss
netstat
的“升级版”,或者说,是它的一个更现代、更高效的替代品。

技术背景差异:

netstat
这个工具的历史很悠久了,它在内部实现上,主要是通过读取
/proc/net/
目录下的一些文件来获取网络连接信息的,比如
/proc/net/tcp
/proc/net/udp
等。这种方式在连接数量不多的时候表现还行,但当系统有成千上万个网络连接时,
netstat
的性能会急剧下降,因为它需要遍历这些文件并进行大量的字符串解析。这会导致它运行缓慢,甚至在某些极端情况下会占用大量CPU资源。

ss
(socket statistics) 则是一个相对较新的工具,它直接从内核空间获取套接字信息,利用了
Netlink
协议。
Netlink
提供了一种用户空间和内核空间之间通信的机制,效率远高于
netstat
读取
/proc
文件的方式。因此,在处理大量网络连接时,
ss
的性能优势非常明显,能够更快地返回结果,且对系统资源的消耗更小。

输出内容和功能: 虽然两者的核心功能都是查看网络连接和端口状态,但

ss
在输出内容上通常能提供更丰富的套接字信息,比如 TCP 状态、接收/发送队列、计时器信息、套接字选项等,这些对于网络故障排查和性能分析都非常有帮助。而
netstat
的输出则相对基础一些。

我个人推荐: 在现代Linux系统(例如,大多数发行版最近几年的版本)上,我几乎总是推荐使用

ss
。它的速度和效率是首要考虑因素。如果你在排查问题,时间就是金钱,等待一个慢吞吞的
netstat
输出会让人很焦虑。 只有在极少数情况下,比如面对一个非常老旧的Linux系统,或者
ss
命令不可用(虽然这种情况现在很少见),我才会退而求其次使用
netstat
。所以,养成使用
ss
的习惯,绝对是更明智的选择。

如何通过端口号反查对应的进程和程序?

这在排查端口冲突或者服务异常时是极其常见的需求。当我知道某个端口被监听,但不知道是哪个程序在用它,或者想确认是不是我预期的服务在用,就需要反查。我通常有两种主要方法:

方法一:使用

ss
netstat
结合
grep
ps

首先,用

ss
netstat
找到监听该端口的行,并特别关注
PID/Program name
这一列(如果命令支持显示)。

例如,我想查80端口:

ss -tulnp | grep ":80"

这里我加了

-P
参数,让
ss
显示监听该套接字的进程名和PID。 输出可能会像这样:
tcp    LISTEN     0      128       *:80                   *:*      users:(("nginx",pid=1234,fd=6))

从这个输出中,我能直接看到

pid=1234
,程序是
nginx
。这非常直观。

如果

ss
的输出没有直接显示进程信息,或者我想获取更详细的进程信息,我可以这样操作:

Civitai
Civitai

AI艺术分享平台!海量SD资源和开源模型。

下载
  1. 先用
    ss -tuln
    找到端口对应的本地地址。
  2. 记下端口号。
  3. 然后用
    ss -p
    选项,针对该端口号进行查询:
    ss -tulnp | grep ":80"

    如果能直接得到PID,那就用

    ps
    命令查看进程详情:

    ps aux | grep 1234

    替换

    1234
    为实际的PID。
    ps aux
    会显示所有用户的进程,包括它们的CPU、内存占用、启动命令等。

netstat
也可以做到,参数是
-P

netstat -tulnp | grep ":80"

输出通常是

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1234/nginx
同样,
1234
就是PID,
nginx
是进程名。

方法二:使用

lsof
命令

lsof
在这方面表现得非常出色,因为它天生就是为了列出打开的文件,而网络套接字就是一种特殊的文件。

lsof -i :80

这个命令会直接列出所有打开了80端口的进程。输出会包含

COMMAND
(程序名),
PID
,
USER
,
FD
(文件描述符),
TYPE
,
DEVICE
,
SIZE/OFF
,
NODE
,
NAME
(网络地址和端口)。 例如:
nginx   1234 root    6u  IPv4 123456      0t0  TCP *:http (LISTEN)
这里
COMMAND
nginx
PID
1234
,非常清晰。

我个人更倾向于使用

lsof -i :端口号
来反查进程,因为它输出的信息全面且直接,不需要额外的
grep
过滤或者
ps
组合,一步到位。当然,如果系统没有安装
lsof
,那么
ss -p
netstat -p
也是非常好的替代方案。

端口被占用怎么办?常见的排查思路是什么?

端口被占用是运维工作中很常见的问题,尤其是在部署新服务或者重启旧服务时。遇到这种情况,我的排查思路通常是这样:

第一步:确认哪个进程占用了端口 这是最关键的第一步。我通常会用前面提到的命令来确定“罪魁祸首”。

lsof -i :目标端口号
# 或者
ss -tulnp | grep ":目标端口号"

例如,如果我发现80端口被占用了:

lsof -i :80

输出会告诉我进程的PID和名称。

第二步:分析占用进程的身份和目的 一旦知道了是哪个进程占用了端口,下一步就是思考:

  • 这是我预期的服务吗? 比如,我打算启动Nginx,但发现Nginx进程已经跑起来了,那可能是我忘记关闭了,或者它之前崩溃后自动重启了。
  • 这是一个不相关的服务吗? 比如,我打算启动一个Java应用在8080端口,却发现是另一个Python脚本占用了。这可能意味着配置冲突或者其他服务无意中占用了。
  • 这是一个“僵尸”进程或异常进程吗? 有时候服务崩溃了,但它的套接字资源没有完全释放,或者是一个旧的进程实例没有完全退出。

第三步:决定如何处理

根据第二步的分析,处理方式有所不同:

  1. 如果是我预期的服务:

    • 服务已经正常运行: 那么我就不需要再启动了。如果需要更新或重启,我会先优雅地停止它(例如
      systemctl stop nginx
      ),然后再启动新的实例。
    • 服务运行异常: 如果服务虽然运行着,但状态不对,我会尝试重启它。例如
      systemctl restart 服务名
  2. 如果是不相关的服务或配置冲突:

    • 修改我的服务配置: 最常见的做法是修改我自己的服务配置,让它监听一个不同的、未被占用的端口。这是最安全且侵入性最小的方法。
    • 停止或修改占用服务的配置: 如果我确定那个占用端口的服务不应该在那里,或者我可以控制它,那么我会考虑停止它(
      systemctl stop 占用服务的名称
      )或者修改它的配置,让它监听其他端口。但要非常小心,确保不会影响到其他重要的功能。
  3. 如果是僵尸进程或异常进程:

    • 强制终止进程: 如果进程看起来不正常,或者无法通过正常方式停止,我可能会考虑使用
      kill
      命令强制终止它。
      kill -9 进程PID

      kill -9
      是一个强杀信号,它不会给进程任何清理的机会,所以通常是最后手段。在使用前,务必确认这个进程确实可以被终止,且不会导致数据丢失或其他严重后果。

    • 检查系统日志: 在强制终止进程后,我会检查系统日志(例如
      /var/log/syslog
      journalctl -xe
      ),看看是否有关于该进程异常退出的信息,这有助于我理解为什么它会占用端口不放。

一个经验之谈: 在生产环境中,我通常会倾向于修改我自己的服务端口,而不是去动一个不确定的、可能由其他团队维护的服务。除非我百分之百确定那个占用端口的服务是我的,并且可以安全地停止或修改它。保持谨慎,总是没错的。

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

765

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

639

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

764

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

619

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1285

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

549

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

579

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

709

2023.08.11

PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

23

2026.01.19

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.4万人学习

Git 教程
Git 教程

共21课时 | 2.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号