iftop无输出或报“no interface found”主因是权限不足,需sudo或setcap cap_net_raw+ep;不显示进程名,须配合ss/lsof查端口;过滤用-i/-f参数且语法严格;速率与ifconfig不同因数据源和统计方式差异。

iftop 命令没输出或显示“no interface found”
常见原因是当前用户没权限读取原始网络包,iftop 默认需要 cap_net_raw 能力或 root 权限。非 root 用户运行时,它可能直接失败或只显示本地环回流量。
- 用
sudo iftop启动是最直接的解法 - 如果不想总输密码,可给二进制文件加能力:
sudo setcap cap_net_raw+ep /usr/bin/iftop(注意路径用which iftop确认) - 某些容器或最小化系统里
iftop依赖的libpcap可能未安装,报错类似error while loading shared libraries: libpcap.so.1,需补装libpcap1或对应包
怎么看清具体是哪个进程在占带宽
iftop 本身不显示进程名,这是它和 netstat/ss 的关键区别——它基于抓包,不查进程表。想关联到进程,得配合其他工具。
- 运行
iftop -P显示端口,再用sudo ss -tulnp | grep :<code>端口号查进程 - 更省事的做法:开两个终端,一个跑
iftop -P记下高流量的 IP:端口,另一个立刻执行sudo lsof -i :<code>端口号 - 注意:DNS 解析会拖慢显示,加
-n参数禁用反向解析(iftop -n),否则你看到的可能是 “loading…” 卡住
如何限制 iftop 只监控某个网卡或端口
iftop 支持过滤,但语法容易写错。参数顺序和大小写敏感,错一个就退回到默认行为。
- 指定网卡:
iftop -i <code>eth0(不是--interface eth0,也不接受缩写如enp0s3不写全可能失败) - 只看某端口:
iftop -P -f "port <code>80",其中-f后必须跟 pcap 过滤语法,port小写,数字不能加引号 - 过滤某 IP:
iftop -f "host <code>192.168.1.100";双向过滤用and,比如host <code>192.168.1.100and port22 - 误用
-f会导致无输出或报错pcap_compile: syntax error,建议先用tcpdump -i <code>eth0-c 1 -f "port80" 测试过滤表达式是否合法
为什么 iftop 显示的速率和 ifconfig 统计值对不上
根本原因是数据来源不同:iftop 是实时抓包算瞬时速率(秒级滑动窗口),ifconfig 或 /proc/net/dev 是内核累计字节数,除以时间才是平均速率。短时间波动大时,二者数值差异明显。
-
iftop默认每 2 秒刷新一次,顶部显示的是最近 2/10/40 秒的平均值(按t键切换),不是峰值 - 它统计的是三层 IP 包,不含以太网帧头、CRC 等链路层开销,而网卡驱动上报的字节数含这些,所以
iftop数值通常比/proc/net/dev算出的略小 - UDP 丢包、TCP 重传、TTL 截断等都会让
iftop捕获的包数少于实际发出量,别拿它当精确计量工具
真要长期盯流量趋势,iftop 不适合自动化采集——它设计就是给人眼扫的。脚本化请换 vnstat 或直接读 /sys/class/net/<code>eth0/statistics/tx_bytes。

















