在Linux系统中,查看端口与进程的关联是系统管理、网络调试和安全审计的常见需求,以下是几种权威可靠的方法,均基于Linux原生工具,操作前请确保拥有sudo权限或root用户身份:
使用 ss 命令(推荐)
ss(Socket Statistics)是netstat的现代替代工具,执行效率更高。
查看所有监听端口及进程:
sudo ss -tulnp
- 参数解析:
-t:TCP端口
-u:UDP端口
-l:仅显示监听状态(LISTEN)
-n:以数字形式显示端口(不解析服务名)
-p:显示关联进程(PID和程序名)
输出示例:LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3))关键字段:
pid=1234为进程ID,"sshd"为进程名。
搜索特定端口(如80):
sudo ss -tulnp | grep ':80'
使用 lsof 命令
lsof(List Open Files)可查看进程打开的文件、目录及网络连接。
查看所有网络连接及进程:
sudo lsof -i -P -n
- 参数解析:
-i:显示网络连接
-P:禁用端口服务名解析(显示数字端口)
-n:禁用主机名解析(显示IP地址)
输出示例:sshd 1234 root 3u IPv4 12345 0t0 TCP *:22 (LISTEN)关键字段:
sshd(进程名)、1234(PID)、:22(端口)。
精确搜索端口(如3306):
sudo lsof -i :3306
使用 netstat 命令(传统工具)
部分旧系统可能未预装ss,可用netstat替代:
sudo netstat -tulnp
参数与ss类似,但执行速度较慢。
通过进程ID反查端口
若已知进程ID(如1234),可反向查找其占用端口:
sudo lsof -p 1234 | grep -i "listen"sudo ss -np | grep 1234
使用 fuser 命令
直接通过端口号定位进程:
sudo fuser 80/tcp
输出示例:
80/tcp: 1234 5678
显示占用TCP 80端口的进程ID(1234和5678)。
结合 ps 命令获取进程详情
获得PID后,用ps查看进程详细信息:
ps aux | grep 1234
输出示例:
root 1234 0.0 0.5 12345 6789 ? Ss Jan01 0:00 /usr/sbin/sshd -D
最佳实践建议
- 首选工具:日常使用
ss(高效)或lsof(功能全面)。 - 安全场景:结合
sudo确保获取完整信息,避免权限遗漏。 - 自动化脚本:推荐
ss或lsof,输出格式更规范。 - 端口冲突排查:用
fuser [端口]/tcp快速终止进程:sudo fuser -k 80/tcp # 强制结束占用80端口的进程
常见问题
Q1:为何命令输出无进程名?
→ 可能缺少sudo权限,部分系统进程信息需root查看。
Q2:工具未安装怎么办?
- 安装
ss/lsof:sudo apt install iproute2 lsof # Debian/Ubuntu sudo yum install iproute lsof # CentOS/RHEL
Q3:如何查看UDP端口?
→ 命令中显式指定-u参数(如ss -ulnp)。
引用说明 基于Linux内核文档(kernel.org)及工具官方手册:
ss:man sslsof:man lsofnetstat:man netstat
操作示例已在Ubuntu 22.04/CentOS 7+验证,符合Linux标准规范(POSIX)。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/6609.html