scp -l 通过应用层软性限速控制单次传输带宽,单位为Kbit/s,需将目标KB/s×8换算;支持本地传远程、远程拉取、递归传目录及指定端口等场景,限速仅作用于当前进程且双向总上限。

用 scp -l 限制带宽,核心是控制传输占用的网络资源,避免挤占业务流量。它不改变网络底层配置,而是从应用层对单次 scp 传输施加软性限速,适合临时、按需、免 root 的场景。
理解 -l 参数的单位和换算
-l 后跟的数值单位是 Kbit/s(千比特每秒),不是 KB/s。这点极易出错:
- 想限速到 500 KB/s(即每秒 500 千字节),要换算:500 × 8 = 4000 Kbit/s → 命令写
scp -l 4000 - 想限速到 1 MB/s(1024 KB/s),则为 1024 × 8 = 8192 Kbit/s →
scp -l 8192 - 常见低速调试值:-l 1000 ≈ 125 KB/s,-l 4000 ≈ 500 KB/s,-l 80000 ≈ 10 MB/s
实际限速命令写法
确保语法正确,避免因空格或参数位置导致限速失效:
- 本地传远程:
scp -l 4000 /data/app.tar.gz deploy@192.168.10.5:/backup/ - 远程拉取文件(带限速):
scp -l 2000 admin@10.20.30.40:/var/log/nginx/access.log ./ - 递归传目录并限速:
scp -r -l 3000 /opt/config/ user@prod-server:/etc/myapp/(注意-r和-l可共存) - 指定端口+限速:
scp -P 2222 -l 1000 file.zip backup@172.16.0.100:/mnt/(-P大写,区别于-p)
限速效果验证与注意事项
执行时观察终端输出的实时速率(如 136.0KB/s),可初步判断是否生效:
- 限速值只是“尽力而为”,实际速率可能略低(受 SSH 加密开销、磁盘 IO、远端负载影响)
- 该限制仅作用于当前 scp 进程,不影响其他连接或系统全局带宽
- 不支持上传/下载单独限速(如只限上传不限下载),
-l是双向总带宽上限 - 若传输中断后重试,需重新加
-l参数,scp 本身不记录限速设置
对比其他限速方式的适用场景
当 scp -l 不够用时,可考虑更底层或更灵活的方案:
- 需要长期、全局、按协议(如只限 HTTP)限速 → 用
tc + iptables或wondershaper - 要对 rsync、curl、wget 等多个工具统一限速 → 用
trickle(例如trickle -u 500 scp ...) - 需断点续传 + 精确限速 + 差异同步 → 直接换用
rsync --bwlimit=500(单位是 KB/s,更直观)











