欢迎来到海上华帆的博客园子

记录一些学习过程中的心得体会,供自己和有缘人参考!

排查某个软件是否安装,某个端口是否占用

开发中经常遇到的检查某个包是否安装或者某个端口是否占用

  1. 检查postgresql 的客户端是否安装使用 which psql && psql --version
  2. 检查是否通过apt 安装了 postgresql 使用which postgres
  3. 检查端口是否被占用
    sudo lsof -i :6379 2>/dev/null || netstat -tlnp 2>/dev/null | grep 6379 || ss -tlnp | grep 6379
    以下对检查端口命令详细解析
    这是一个端口占用检测命令,使用三种工具逐级尝试检查 6379 端口(Redis 默认端口)的监听状态:

命令拆解

sudo lsof -i :6379 2>/dev/null || netstat -tlnp 2>/dev/null | grep 6379 || ss -tlnp | grep 6379
部分 作用
sudo lsof -i :6379 lsof 查看占用 6379 端口的进程
2>/dev/null 隐藏错误输出(如未安装 lsof 或权限不足)
|| 前命令失败时执行后命令(短路或)
netstat -tlnp | grep 6379 netstat 查看 TCP 监听端口
ss -tlnp | grep 6379 ss 查看 TCP 监听端口(现代系统标配)

工具优先级

lsof → netstat → ss
(最详细)   (传统)   (现代/默认)
工具 特点 常见系统
lsof 显示进程名、PID、用户、连接状态 需单独安装
netstat 传统工具,显示监听/连接状态 旧系统/net-tools 包
ss iproute2 套件,替代 netstat,速度更快 Ubuntu 22.04+ 默认

实际输出示例

Redis 运行中(Docker --network host

# ss 输出(最可能执行到此)
LISTEN 0 511 0.0.0.0:6379 0.0.0.0:* users:(("redis-server",pid=1234,fd=6))

端口未占用

# 无输出(三个命令都未匹配到)

权限不足(无 sudo)

# lsof 可能报错,但 2>/dev/null 隐藏,自动降级到 ss

简化版(推荐)

# 现代系统直接用 ss(无需 sudo 查看监听端口)
ss -tlnp | grep 6379

# 或查看所有 Redis 相关端口
ss -tlnp | grep redis

# 或查看进程名(需 sudo)
sudo ss -tlnp | grep :6379

备注

  1. lsof = List Open Files(列出打开的文件)
  2. ss 的参数说明:
    | 参数 | 全称 | 含义 |
    | ---- | ----------- | --------------------- |
    | -t | tcp | 显示 TCP 套接字 |
    | -l | listening | 仅显示监听状态的套接字 |
    | -n | numeric | 显示数字地址和端口(不解析主机名/服务名) |
    | -p | processes | 显示使用套接字的进程信息 |

posted @ 2026-02-04 21:39  海上华帆  阅读(3)  评论(0)    收藏  举报