操作系统面试题 — Linux中如何查看某个端口有没有被占用?

Author : Cyan_RA9
Source : 【卡码笔记】网站
Question : Linux中如何查看某个端口有没有被占用?

【简要回答】

  • 在Linux中,查看端口是否被占用的方法按场景可分为:
    1. 快速检查端口是否被监听 :ss -tuln | grep :[端口号] 或 netstat -tuln | grep :[端口号]。
    2. 定位监听端口的进程 :sudo lsof -i :[端口号]。
    3. 全面查看端口所有连接状态及进程 :sudo ss -taunp | grep :[端口号]。
    4. 验证端口对外开放性 :nmap -sT -p [端口号] localhost 或 telnet localhost [端口号]。

【详细回答】

  1. 快速检查端口是否被监听 :

    • 命令 :ss -tuln | grep :[端口号] 或 netstat -tuln | grep :[端口号]。
    • 参数解析 :
      ① -t :检查TCP协议端口。
      ② -u :检查UDP协议端口。
      ③ -l :仅 显示监听状态(LISTEN )的端口。
      ④ -n:禁用域名解析,直接显示IP和端口号。
    • 适用场景:快速验证某个端口是否正在等待新的连接请求(即处于 LISTEN 状态)。这是启动服务前最常见的检查。
  2. 定位监听端口的进程 :

    • 命令 :sudo lsof -i :[端口号]。

    • 输出示例:

      sql 复制代码
      COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME  
      nginx    1234 root    6u  IPv4 123456      0t0  TCP *:80 (LISTEN)  
    • 关键信息 :

      ① COMMAND :进程名称(如nginx)。

      ② PID :进程ID(如1234)。

      ③ USER:运行进程的用户(如root)。

    • 权限说明 :普通用户可能无法查看所有进程,需使用 sudo 提权。

    • 适用场景:在确认端口处于监听状态后,精确找出是哪个进程正在使用该端口。lsof 是一个非常强大的工具,不仅能看网络连接,还能看文件句柄。

  3. 全面查看端口所有连接状态及进程 :

    • 命令 :sudo ss -taunp | grep :[端口号] 或 sudo netstat -taunp | grep :[端口号]。
    • 参数解析 :
      ① -t :检查TCP协议端口。
      ② -u :检查UDP协议端口。
      ③ -a : 显示所有连接(包括监听、已建立、等待等各种状态)。
      ③ -n :禁用域名解析,直接显示IP和端口号。
      ④ -p: 显示使用端口的进程ID和名称。
    • 适用场景:需要了解某个端口当前所有连接状态(LISTEN、ESTABLISHED、TIME_WAIT、CLOSE_WAIT等)以及具体是哪个进程在使用它,进行更全面的分析。
  4. 验证端口对外开放性 :

    • 命令 :nmap -sT -p [端口号] localhost 或 telnet localhost [端口号]。
    • nmap参数分解 :
      ① -sT :TCP 全连接扫描(模拟正常连接行为,更可靠);
      ② -p:指定扫描的端口号。
    • nmap输出状态 :
      ① open :端口开放且可访问;
      ② closed :端口未被占用;
      ③ filtered:端口被防火墙拦截。无法确定其状态。

【知识拓展】

  1. 查看端口是否被占用的主要手段 ,如下图所示:

  2. 工具对比:ss vs netstat,如下表所示:

    特性 ss netstat
    数据来源 直接读取内核socket表 解析/proc/net文件
    速度 更快(适合高负载服务器) 较慢
    维护状态 活跃维护(推荐使用) 已逐步淘汰
  3. 端口状态解析(ss/netstat输出):

    • LISTEN:端口正在监听,等待连接。
    • ESTABLISHED:已建立活跃连接。
    • TIME_WAIT:连接已关闭,等待内核清理(可能短暂占用端口)。
    • CLOSE_WAIT:远程已关闭连接,本地未释放。

相关推荐
Ruiery3 分钟前
Linux 6.6内核内存管理深度解析(十八):KASLR 内核地址空间随机化
linux·运维·服务器·安全
学长毕设21 分钟前
基于springboot的食品仓库管理系统
java·spring boot·后端
滴滴答答哒44 分钟前
ASP.NET Core + FaceRecognitionDotNet 人脸识别实战:DI 单例、特征向量持久化与 1:N 比对
后端·asp.net
qetfw1 小时前
UOS MariaDB 数据库:安装、最小权限与备份验证
linux·数据库·mariadb·uos
逆风的蚂蚁2 小时前
linux服务器性能调整怎么落地?我把 CPU 调度、I/O 优先级和内核参数这几个旋钮都拧了一遍
linux·运维·服务器
captain3763 小时前
MyBatis操作数据库(入门2)
java·数据库·spring boot·后端·spring·mybatis
IT_陈寒5 小时前
Java序列化踩坑记:对象循环引用让我加班两小时
前端·人工智能·后端
每天进步一点点km5 小时前
自用-牛客网-华为机试编程模拟题1-python
华为od·华为·面试
泡海椒5 小时前
05-雷达图多维画像-信用评级多维画像
后端
王中阳Go5 小时前
5.27 分钟干完后端和全部测试:一场三小时笔试的五个失分点,四个不在代码上
大数据·数据库·人工智能·后端·大语言模型