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
的输出没有直接显示进程信息,或者我想获取更详细的进程信息,我可以这样操作:

雾象
雾象

WaytoAGI推出的AI动画生成引擎

下载
  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
      ),看看是否有关于该进程异常退出的信息,这有助于我理解为什么它会占用端口不放。

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

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
nginx 重启
nginx 重启

nginx重启对于网站的运维来说是非常重要的,根据不同的需求,可以选择简单重启、平滑重启或定时重启等方式。本专题为大家提供nginx重启的相关的文章、下载、课程内容,供大家免费下载体验。

246

2023.07.27

nginx 配置详解
nginx 配置详解

Nginx的配置是指设置和调整Nginx服务器的行为和功能的过程。通过配置文件,可以定义虚拟主机、HTTP请求处理、反向代理、缓存和负载均衡等功能。Nginx的配置语法简洁而强大,允许管理员根据自己的需要进行灵活的调整。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

522

2023.08.04

nginx配置详解
nginx配置详解

NGINX与其他服务类似,因为它具有以特定格式编写的基于文本的配置文件。本专题为大家提供nginx配置相关的文章,大家可以免费学习。

610

2023.08.04

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

244

2024.02.23

nginx报404怎么解决
nginx报404怎么解决

当访问 nginx 网页服务器时遇到 404 错误,表明服务器无法找到请求资源,可以通过以下步骤解决:1. 检查文件是否存在且路径正确;2. 检查文件权限并更改为 644 或 755;3. 检查 nginx 配置,确保根目录设置正确、没有冲突配置等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

713

2024.07.09

Nginx报404错误解决方法
Nginx报404错误解决方法

解决方法:只需要加上这段配置:try_files $uri $uri/ /index.html;即可。想了解更多Nginx的相关内容,可以阅读本专题下面的文章。

3618

2024.08.07

nginx部署php项目教程汇总
nginx部署php项目教程汇总

本专题整合了nginx部署php项目教程汇总,阅读专题下面的文章了解更多详细内容。

55

2026.01.13

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

72

2026.01.13

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

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

精品课程

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

共48课时 | 10.6万人学习

Git 教程
Git 教程

共21课时 | 4.2万人学习

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

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