在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 ss
lsof
:man lsof
netstat
:man netstat
操作示例已在Ubuntu 22.04/CentOS 7+验证,符合Linux标准规范(POSIX)。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/6609.html