使用 netstat
命令(经典工具)
适用场景:快速查看所有活跃连接和监听端口。
命令示例:
sudo netstat -tulnp
- 参数解析:
-t
:TCP协议
-u
:UDP协议
-l
:仅显示监听端口
-n
:以数字形式显示端口(不解析服务名)
-p
:显示进程名和PID - 输出示例:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1234/sshd tcp6 0 0 :::80 :::* LISTEN 5678/nginx
关键列:
Local Address
→0.0.0:22
表示监听所有IP的22端口PID/Program name
→ 进程ID和程序名(如sshd
)
使用 ss
命令(netstat
的现代替代)
优势:执行速度更快,语法更简洁。
命令示例:
sudo ss -tulnp
- 参数与输出:与
netstat
类似,但格式更紧凑。 - 过滤特定端口(如查看80端口):
sudo ss -tulnp 'sport = :80'
使用 lsof
命令(查看文件与端口关联)
适用场景:精确查看指定程序或端口的使用情况。
常用操作:
-
查看所有监听端口:
sudo lsof -i -P -n | grep LISTEN
-i
:显示网络连接-P
:禁用端口服务名解析(显示数字端口)-n
:禁用IP地址解析(显示数字IP)
-
查看指定程序(如nginx)的端口:
sudo lsof -i -P -n | grep nginx
-
查看指定端口(如3306)的进程:
sudo lsof -i :3306
使用 fuser
命令(通过端口查进程)
适用场景:直接根据端口号定位进程。
命令示例:
sudo fuser 80/tcp
- 输出:
80/tcp: 5678
→ 表示TCP 80端口被PID为5678的进程占用。
通过 /proc
文件系统(底层信息)
原理:Linux的进程信息存储在 /proc
目录中。
操作步骤:
- 先用
ss
或lsof
获取端口对应的PID(如PID5678
)。 - 查看该进程打开的端口:
ls -l /proc/5678/fd | grep socket:
⚠️ 常见问题与解决方案
-
权限不足:
- 若命令无输出,需添加
sudo
提权(普通用户无法查看系统进程)。
- 若命令无输出,需添加
-
命令未找到:
- 安装缺失工具:
# netstat/ss sudo apt install net-tools iproute2 # Debian/Ubuntu sudo yum install net-tools iproute # CentOS/RHEL # lsof/fuser sudo apt install lsof psmisc # Debian/Ubuntu sudo yum install lsof psmisc # CentOS/RHEL
- 安装缺失工具:
-
端口显示为
:::80
或0.0.0:80
:- 表示IPv6监听,
0.0.0
表示IPv4监听(所有网卡)。
- 表示IPv6监听,
总结建议
- 首选工具:日常使用
ss
(高效)或lsof
(功能全面)。 - 安全提示:
- 关闭未授权的端口(通过防火墙或终止进程)。
- 定期检查可疑连接(如
ESTABLISHED
状态的未知IP)。
- 自动化监控:结合脚本(如
cron
定时运行ss -tuln
)记录端口使用情况。
引用说明:
- 命令文档参考 Linux
man
手册(如man ss
,man lsof
)。- 网络协议规范依据 IETF RFC 标准(如 TCP/UDP 端口定义)。
- 系统级实现参考 Linux 内核文档(
/proc
文件系统)。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/6641.html