当前位置:首页>Linux>深度测评:Linux 环境五大文件传输方案选型分析

深度测评:Linux 环境五大文件传输方案选型分析

  • 2026-06-27 14:45:04
深度测评:Linux 环境五大文件传输方案选型分析

问题背景

做运维的同事几乎都被"大文件传输"折腾过。常见场景:

  • 跨机房同步 GB 级别的数据库备份文件。
  • 跨地域传输 TB 级别的日志归档。
  • 容器镜像分发、机器学习数据集同步。
  • 数据库 dump 文件从生产机拉到本地分析。
  • 视频、音频、设计稿等媒体文件从源站分发到 CDN 节点。

这些场景的共同点是"文件大、距离远、对可靠性和速度有要求"。但很多同学一上来就用 scp 一把梭,结果发现:

  • 传 100GB 文件到一半网络断了,前面全白传。
  • 内网千兆带宽,scp 跑不到 100MB/s。
  • 文件太大,本地磁盘空间不够解压缩。
  • 同时传多个文件把磁盘 I/O 打满。
  • 传过去发现文件 MD5 不一致。

scp 是最简单的方案,但不是最优方案。不同的传输场景需要不同的工具组合。本文基于常见的工程实践,讲解 Linux 下大文件传输的 5 类方案(rsync、scp、nc、tar+split+lftp、curl/aria2)、它们的适用场景、性能差异、可靠性措施和最佳实践。

适用场景

本文适合以下读者和场景:

  • 需要在两台 Linux 服务器之间传输 GB ~ TB 级别文件。
  • 需要在生产机和办公机之间传输大文件。
  • 需要做定期的文件同步、备份分发。
  • 需要在低带宽、高延迟、高丢包率的链路上传输。
  • 需要对比不同传输工具的性能和特性。

本文不涉及对象存储(S3 / OSS)的文件上传、BitTorrent 协议、P2P 协议、分布式文件系统等议题。

核心概念

传输速度的瓶颈

大文件传输的瓶颈通常不是网络带宽,而是:

  • 加密开销:SSH 加密会消耗 CPU,影响传输速度。
  • 磁盘 I/O:源端读取和目标端写入磁盘的 I/O 能力。
  • 网络协议开销:TCP 拥塞控制、窗口大小、重传机制。
  • 系统参数:socket buffer、tcp 窗口、磁盘缓存。
  • 文件数量:大量小文件比单一大文件慢得多(每个文件都要打开 / 关闭、读取元数据)。

可靠性的关键

大文件传输的可靠性要求:

  • 断点续传:网络断了恢复后能继续传,不需要重头开始。
  • 完整性校验:传输完成后能确认文件没有损坏。
  • 错误重试:单次失败能自动重试。
  • 并发控制:能控制同时传输的文件数和带宽占用。

加密的取舍

加密能保证数据安全,但会消耗 CPU。在内网传输、专线路由、隔离网络等场景下,可以关闭加密换取速度。在公网传输、跨运营商等场景下,必须加密。

压缩的取舍

压缩能减少传输数据量,但会消耗 CPU。如果文件本身已经压缩过(zip、tar.gz、mp4),再压缩一次没效果。对于文本文件、数据库 dump、JSON 数据,压缩效果显著。

方案一:scp / sftp(基础 SSH 传输)

工具介绍

scp(Secure Copy Protocol)是最常见的文件传输工具,基于 SSH 协议,几乎所有 Linux 发行版自带。

# 基本用法scp /local/file user@remote:/remote/path/# 传目录scp -r /local/dir/ user@remote:/remote/path/# 指定端口scp -P 2222 /local/file user@remote:/remote/path/# 限速(KB/s)scp -l 8000 /local/file user@remote:/remote/path/# 保留文件属性scp -p /local/file user@remote:/remote/path/

scp 在大多数发行版上调用的是 sftp 内部实现。OpenSSH 8.0 之后,scp 默认用 SFTP 协议(SFTP-over-SSH),而不是老的 SCP 协议。

优点

  • 简单:命令行直接传,不需要额外工具。
  • 安全:基于 SSH 加密。
  • 预装:几乎所有 Linux / macOS 自带。
  • 支持断点续传:OpenSSH 9.0+ 支持 scp -C 之外的断点续传,但默认未启用,需要 rsync 或 sftp

缺点

  • 断点续传不友好:scp 没有原生断点续传(除非用 -C 加额外工具)。断了只能重传。
  • 单线程:scp 是单线程传输,大文件无法利用多核。
  • 加密开销:CPU 消耗明显。
  • 不支持压缩过滤:不像 rsync 能做差分传输。
  • 没有进度条:看不到传输速度、剩余时间。

性能优化

# 1. 启用压缩(如果文件未压缩)scp -C /local/file user@remote:/remote/path/# 2. 选择加密算法(减少 CPU 消耗)scp -c aes128-ctr /local/file user@remote:/remote/path/# 3. 指定 IP 协议(IPv4 路径可能更短)scp -4 /local/file user@remote:/remote/path/# 4. 调大 SSH 加密缓冲区# 编辑 /etc/ssh/ssh_config,添加:#     Compression yes#     CompressionLevel 9# 注意:高压缩级别耗 CPU

风险提醒

  • scp -r 复制目录时,如果源路径以 / 结尾,复制目录内容;不以 / 结尾,复制整个目录。
  • 不要用 scp user@remote:~/file /local/ 复制大文件到本地,避免本地磁盘被打满。

适用场景

  • 临时性、单次、不大的文件传输(< 1GB)。
  • 不需要断点续传的轻量场景。
  • 临时登录服务器拉取日志等。

scp 不适合生产环境的大文件传输、批量传输、跨地域传输。

方案二:rsync(增量同步之王)

工具介绍

rsync 是 Linux 下的文件同步工具,支持增量传输(只传变化的部分)、断点续传、压缩、保留权限等功能。

# 安装yum install rsync -y         # CentOS / RHELapt install rsync -y         # Ubuntu / Debian# 基本用法rsync -avz /local/file user@remote:/remote/path/# 常用参数# -a 归档模式(保留权限、符号链接、时间戳等)# -v 详细输出# -z 传输时压缩# -P 显示进度 + 支持断点续传(--partial --progress)# --bwlimit=KBps 限速# -e ssh 使用 SSH 协议

核心特性

1. 增量传输(delta-transfer)

rsync 最强大的特性是"增量传输"。它会把文件分成小块(chunk),对每块计算校验和,只传校验和不同的块。这在以下场景极其有用:

  • 大文件只有少量变化(比如日志文件追加、数据库追加写入)。
  • 同步大量文件,只有部分文件变化。
# 增量同步(默认行为)rsync -avz /local/dir/ user@remote:/remote/dir/# 第一次传完整文件# 第二次开始只传变化的部分

2. 断点续传

# 启用断点续传rsync -avzP /local/file user@remote:/remote/path/# -P 等价于 --partial --progress# --partial 保留部分传输的文件# --progress 显示进度

断了之后再次执行同一条命令,会从断点继续。

3. 带宽限制

# 限速 10MB/srsync -avz --bwlimit=10240 /local/file user@remote:/remote/path/# 限速 100Mbpsrsync -avz --bwlimit=12500 /local/file user@remote:/remote/path/

--bwlimit 单位是 KBps(千字节 / 秒)。

4. 包含 / 排除规则

# 排除特定文件rsync -avz --exclude='*.log' /local/dir/ user@remote:/remote/dir/# 排除多个rsync -avz --exclude={'*.log','*.tmp','cache/'} /local/dir/ user@remote:/remote/dir/# 用 --include 和 --exclude 组合rsync -avz --include='*.txt' --exclude='*' /local/dir/ user@remote:/remote/dir/

5. daemon 模式(rsync server)

rsync 可以以 daemon 模式运行,提供 873 端口的传输服务。生产环境常用的"rsync server"模式:

# 服务端配置 /etc/rsyncd.confuid = nobodygid = nobodyuse chroot = yesmax connections = 10pid file = /var/run/rsyncd.pidlog file = /var/log/rsyncd.logtransfer logging = yestimeout = 900[backup]    path = /data/backup/    comment = backup arearead only = no    auth users = backupuser    secrets file = /etc/rsyncd.secrets    hosts allow = 10.0.0.0/24    hosts deny = *
# 客户端访问rsync -avz rsync://backupuser@<server>/backup/ /local/backup/

性能优化

# 1. 选择合适的块大小(默认 700,比较保守)rsync -avz --block-size=8192 /local/file user@remote:/remote/path/# 2. 关闭压缩(如果文件已压缩)rsync -av /local/file user@remote:/remote/path/# 3. 用更强的校验算法rsync -avz --checksum-choice=xxh128 /local/file user@remote:/remote/path/# OpenSSH 8.0+ 之后的版本支持# 4. 调整 IO 缓冲区rsync -avz --whole-file /local/file user@remote:/remote/path/# --whole-file 禁用增量算法(适合小文件)

SSH 协议下的 rsync 调优

rsync over SSH 时,SSH 加密是瓶颈。优化方式:

# 1. 启用 SSH 压缩rsync -avz -e "ssh -C" /local/file user@remote:/remote/path/# 2. 指定 SSH 加密算法(减少 CPU 消耗)rsync -avz -e "ssh -c aes128-ctr" /local/file user@remote:/remote/path/# 3. 用 SSH ControlMaster 复用连接# 在 ~/.ssh/config 中添加:#     Host *#         ControlMaster auto#         ControlPath /tmp/ssh-%r@%h:%p#         ControlPersist 600# 4. SSH 启用加速算法rsync -avz -e "ssh -o 'Compression no'" /local/file user@remote:/remote/path/

缺点

  • 大文件全量传输速度不如专用工具:rsync 的 delta 算法在初次传输时反而比 scp 慢(要计算校验和)。
  • rsync daemon 模式配置较复杂:需要服务端配置 rsyncd.conf、用户认证、权限控制。
  • 大量小文件性能差:每个文件都要做 stat 操作,元数据开销大。
  • 跨平台不如 scp 通用:Windows 上 rsync 需要 Cygwin 或 WSL。

适用场景

  • 定期同步:每天 / 每周同步变更的文件。
  • 增量备份:把变更部分同步到备份服务器。
  • 镜像同步:把生产环境的文件同步到灾备环境。
  • 代码发布:把构建产物同步到目标服务器。

rsync 是生产环境最常用的文件同步工具,几乎是"增量传输"的事实标准。

方案三:nc + tar(不走 SSH 的轻量传输)

工具介绍

nc(netcat)是 Linux 下的网络瑞士军刀,能在两台机器之间直接建立 TCP 连接。nc + tar 组合可以在不经过 SSH 加密的情况下传输文件,性能比 scp / rsync over SSH 高。

# 服务端(在目标机器上执行)nc -l 9999 > /remote/file.tar.gz# 客户端(在源机器上执行)tar czf - /local/dir/ | nc <server_ip> 9999

或者反向:

# 客户端监听并解压nc -l 9999 | tar xzf - -C /local/path/# 服务端打包并发送tar czf - /remote/path/ | nc <client_ip> 9999

核心特性

1. 不加密,速度快

nc 不做加密,CPU 消耗极小。适合内网、专线等可信环境。

2. 和 tar / dd 等工具组合

nc 本质是"管道 + 网络",可以和各种流式工具组合:

# 传输整个磁盘镜像dd if=/dev/sda bs=4M | nc <server_ip> 9999# 在目标端恢复nc -l 9999 | dd of=/dev/sda bs=4M# 传输 LVM 快照lvcreate -s -n snap -L 10G /dev/vg0/datadd if=/dev/vg0/snap bs=4M | nc <server_ip> 9999

3. 传输时压缩

# 客户端发送时压缩tar czf - /local/dir/ | nc <server_ip> 9999# 目标端接收时解压nc -l 9999 | tar xzf - -C /local/path/

4. 显示进度

nc 本身不显示进度,但可以借助 pv(Pipe Viewer):

# 安装 pvyum install pv -yapt install pv -y# 客户端tar czf - /local/dir/ | pv -s $(du -sb /local/dir/ | awk '{print $1}') | nc <server_ip> 9999# 输出会显示进度条、速度、剩余时间

进度监控的多种方法

# 方法 1:用 pvtar czf - /local/dir/ | pv -s 10G | nc <server_ip> 9999# 方法 2:用 dd 显示进度tar czf - /local/dir/ | dd bs=1M | pv | nc <server_ip> 9999# 方法 3:分块 + 总大小total_size=$(du -sb /local/dir/ | awk '{print $1}')tar czf - /local/dir/ | nc <server_ip> 9999 &nc_pid=$!# 监控网络流量估算进度whilekill -0 $nc_pid 2>/dev/null; do  sleep 5echo"Current state:"  ss -tan | grep ":9999"done

加密版本

如果需要加密,可以用 ncat(Nmap 套件)或者 cryptcat

# 安装 nmap(含 ncat)yum install nmap -yapt install ncat -y# 用 ncat 加密传输ncat -l 9999 --ssl > /remote/file.tar.gztar czf - /local/dir/ | ncat <server_ip> 9999 --ssl

缺点

  • 没有加密:裸 TCP 传输,数据明文。只能在可信网络(内网、专线)使用。
  • 没有断点续传:网络断了要重头开始。
  • 没有完整性校验:传完无法确认是否损坏。
  • 没有身份认证:任何能连上端口的人都能接收。
  • nc 命令的版本差异:不同发行版的 nc 参数不一样(openbsd-netcat vs traditional-netcat),生产环境注意兼容。

适用场景

  • 内网跨机器快速传大文件:千兆 / 万兆内网,不在乎加密。
  • 传输磁盘镜像 / 备份:DD 配合 nc 做机器克隆。
  • 网络限速测试:用 nc 做简单的网络吞吐测试。
  • 裸数据流传输:不需要文件系统的流式数据。

nc + tar 是单机之间最快的传输方案之一,但只适合可信环境。

方案四:tar + split + scp/rsync(分卷传输)

工具介绍

大文件传输时,如果单文件太大(比如 100GB),可以用 split 切成小块分别传输,到目标端再合并。这样做有几个好处:

  • 单个块不大,可以并行传输或分批传输。
  • 部分块失败只需重传该块,不需要重传整个文件。
  • 可以用 md5sum 验证每个块的完整性。
# 打包并分卷(每个块 1GB)tar czf - /local/dir/ | split -b 1G - /backup/file_part_# 生成的文件:# /backup/file_part_aa# /backup/file_part_ab# /backup/file_part_ac# ...# 传完之后在目标端合并cat /backup/file_part_* | tar xzf - -C /local/path/# 校验完整性md5sum /backup/file_part_* > /backup/md5sums.txtmd5sum -c /backup/md5sums.txt

核心特性

1. 分卷大小

# 按字节split -b 100M file.tar.gz file_part_# 按行(文本文件)split -l 10000 file.log file_part_# 用数字后缀(默认是字母)split -b 100M -d file.tar.gz file_part_# 加前缀split -b 100M file.tar.gz /backup/bigfile_part_

2. 并行传输

# 用 parallel 并行传多个分卷ls /backup/file_part_* | xargs -n 1 -P 4 -I {} scp {} user@remote:/remote/backup/# 或者用 rsync 多线程# 注意:rsync 本身不支持多线程传输单文件,需要手动分包

注意:单个文件的多线程传输可以用 psplit(Parallel Split)工具,但用得不多。常见做法是 split + parallel scp

3. 校验

# 源端生成 MD5md5sum /backup/file_part_* > /backup/md5sums.txt# 传 md5sums.txt 到目标scp /backup/md5sums.txt user@remote:/remote/backup/# 目标端校验md5sum -c md5sums.txt

4. 自动恢复

# 用 rsync 传分卷(支持断点续传)for part in /backup/file_part_*; do  rsync -avzP "$part" user@remote:/remote/backup/done# 传完合并cat /remote/backup/file_part_* | tar xzf - -C /local/path/

适用场景

  • 超大文件传输:单文件 > 100GB,普通工具不稳定。
  • 网络稳定性差:分块后单块小,失败成本低。
  • 需要校验:每个块都做 MD5 校验,文件损坏率低。
  • 跨地域传输:分块后可以走不同路径(比如一半走专线,一半走公网)。

缺点

  • 需要分卷和合并:操作步骤多。
  • 目标磁盘空间要足够:合并前要预留所有分卷的空间。
  • 不能流式处理:必须先分卷,传完再合并。

方案五:curl / wget / aria2(多协议下载)

工具介绍

curl / wget 是命令行下载工具,支持 HTTP / HTTPS / FTP / SFTP / SCP 等多种协议。aria2 是更强的多线程下载工具。

# 用 curl 从 HTTP 服务下载curl -O http://example.com/file.tar.gz# 断点续传curl -C - -O http://example.com/file.tar.gz# 显示进度条curl --progress-bar -O http://example.com/file.tar.gz# 后台下载curl -O -# http://example.com/file.tar.gz &# 用 wgetwget http://example.com/file.tar.gz# wget 断点续传wget -c http://example.com/file.tar.gz

curl 和 wget 都可以从 HTTP / FTP 服务下载。生产环境如果需要传大文件,可以在目标端起一个 HTTP 服务(比如 python -m http.server),源端用 curl 下载。

aria2:多线程下载利器

aria2 是支持多线程、多协议的分段下载工具。

# 安装yum install aria2 -yapt install aria2 -y# 16 线程下载aria2c -x 16 http://example.com/file.tar.gz# 断点续传aria2c -c -x 16 http://example.com/file.tar.gz# 从多个源下载同一文件(多源提速)aria2c -x 4 http://server1/file.tar.gz http://server2/file.tar.gz http://server3/file.tar.gz# BT 下载aria2c file.torrent

aria2 的多线程下载是把一个文件分成多段,并行从服务器拉取。如果服务器限制了单连接带宽,多线程能突破这个限制。

核心特性

1. HTTP 服务的快速搭建

# 目标端起一个简单的 HTTP 服务cd /data/backup/python3 -m http.server 8080# 或者python -m SimpleHTTPServer 8080    # Python 2# 源端下载curl -O http://<server_ip>:8080/file.tar.gzwget http://<server_ip>:8080/file.tar.gz

风险提醒python -m http.server 是单线程的,并发性能差。生产环境推荐用 Nginx 起一个下载服务。

# Nginx 配置server {    listen 8080;    location /download/ {        alias /data/backup/;        autoindex on;          # 启用目录列表        sendfile on;           # 启用零拷贝        tcp_nopush on;         # 合并 TCP 包        charset utf-8;    }}

2. 限速

# curl 限速curl --limit-rate 10M -O http://example.com/file.tar.gz# wget 限速wget --limit-rate=10m http://example.com/file.tar.gz# aria2 限速aria2c --max-download-limit=10M http://example.com/file.tar.gz

3. 后台下载

# wget 后台下载wget -b http://example.com/file.tar.gz# curl 不直接支持后台,可以配合 nohupnohup curl -O http://example.com/file.tar.gz > /tmp/curl.log 2>&1 &# aria2 后台(aria2c 默认是后台的,输出到终端)aria2c -d /data/ http://example.com/file.tar.gz

缺点

  • 需要 HTTP 服务:目标端要起服务,或者源端有公网 HTTP 地址。
  • HTTP 传输是明文:如果走公网,建议 HTTPS。
  • curl / wget 单线程:单连接下载速度受限。
  • 依赖目标端服务:服务挂了不能下载。

适用场景

  • 从公网下载开源软件、镜像:用 curl / wget。
  • 从自建 HTTP 服务下载:内网分发文件。
  • 多线程下载突破单连接限速:用 aria2。
  • 下载大文件并需要断点续传:aria2 的断点续传最稳定。

方案对比

功能对比表

特性
scp
rsync
nc + tar
tar + split
curl/wget/aria2
加密
取决于传输工具
取决于协议
断点续传
分块级别
强(aria2 最强)
增量传输
多线程
可并行分块
是(aria2)
压缩
可选
可选
可选
可选
否(HTTP 协议不内置)
完整性校验
MD5sum
HTTP 协议层
跨平台
速度
中(初次)
高(多线程)
复杂度

性能对比(理论值)

在同一台千兆内网机器上,传输 10GB 压缩文件:

工具
速度
CPU 占用
备注
scp
80~120MB/s
受 SSH 加密限制
rsync over SSH
70~110MB/s
初次传输和 scp 接近
nc + tar
110~115MB/s
千兆网卡接近线速
aria2c(16 线程)
110~120MB/s
HTTP 服务性能影响
tar + split + scp
80~100MB/s
分卷无加速作用

注意:实际速度受磁盘 I/O、CPU 性能、网络拥塞、文件压缩比等因素影响。测试值仅供参考。

网络层调优

无论用哪个工具,传输性能都受网络参数影响。优化内核参数:

# /etc/sysctl.d/99-network-tuning.conf# TCP 缓冲区net.core.rmem_default = 262144net.core.wmem_default = 262144net.core.rmem_max = 16777216net.core.wmem_max = 16777216net.ipv4.tcp_rmem = 4096 87380 16777216net.ipv4.tcp_wmem = 4096 65536 16777216# TCP 拥塞控制(推荐 BBR)net.ipv4.tcp_congestion_control = bbrnet.core.default_qdisc = fq# 队列net.core.somaxconn = 65535net.core.netdev_max_backlog = 65535net.ipv4.tcp_max_syn_backlog = 65535# 临时端口net.ipv4.ip_local_port_range = 1024 65535

应用配置:

sysctl -p /etc/sysctl.d/99-network-tuning.conf

磁盘 I/O 调优

大文件传输的另一瓶颈是磁盘 I/O。优化方法:

# 1. 用 ionice 调整 I/O 优先级ionice -c2 -n0 tar czf - /local/dir/ | nc <server_ip> 9999# -c2 best-effort# -n0 最高优先级# 2. 用 dd 设置大块读取tar czf - /local/dir/ | dd bs=4M | nc <server_ip> 9999# 3. 选择合适的文件系统# 大文件传输用 XFS 或 ext4 都行,XFS 在大文件场景下表现略好# 4. 调整 mount 参数# /etc/fstab 中添加 noatime 减少元数据写入# UUID=xxx /data ext4 defaults,noatime,nodiratime 0 0# 5. 用 tmpfs / dev/shm 临时中转# 把临时文件放在内存文件系统,减少磁盘 I/Omount -t tmpfs -o size=10G tmpfs /mnt/tmptar czf - /local/dir/ > /mnt/tmp/file.tar.gznc <server_ip> 9999 < /mnt/tmp/file.tar.gz

注意:tmpfs 占用内存,文件大小不能超过物理内存。

SSH 调优

如果用 scp / rsync over SSH,SSH 配置影响性能:

# /etc/ssh/sshd_config# 关闭 DNS 反查(减少连接延迟)UseDNS no# 启用压缩Compression yes# 增加连接复用MaxSessions 100MaxStartups 100:30:200# 增加认证超时LoginGraceTime 30# 优化加密算法Ciphers aes128-ctr,aes192-ctr,aes256-ctrMACs hmac-sha2-256,hmac-sha2-512
# 重启 sshdsystemctl restart sshd

风险提醒:修改 sshd_config 前先确认配置正确,否则可能锁死 SSH 访问。建议保留一个额外的 SSH 会话作为应急。

完整性校验

大文件传输后必须做完整性校验:

# 源端生成校验和md5sum file.tar.gz > file.tar.gz.md5sha256sum file.tar.gz > file.tar.gz.sha256# 传输校验和文件(小文件,scp 即可)scp file.tar.gz.md5 user@remote:/remote/# 目标端校验md5sum -c file.tar.gz.md5sha256sum -c file.tar.gz.sha256# 校验通过输出:# file.tar.gz: OK

生产环境强烈推荐用 sha256,md5 已经不抗碰撞攻击了。

实战脚本

1. 带进度的 rsync 传输

#!/bin/bash# transfer_with_progress.sh# 用法:./transfer_with_progress.sh <src> <dst_user> <dst_host> <dst_path>set -eSRC=$1DST_USER=$2DST_HOST=$3DST_PATH=$4if [ -z "$SRC" ] || [ -z "$DST_USER" ] || [ -z "$DST_HOST" ] || [ -z "$DST_PATH" ]; thenecho"Usage: $0 <src> <dst_user> <dst_host> <dst_path>"exit 1fi# 获取源端文件大小SRC_SIZE=$(du -sb "$SRC" | awk '{print $1}')echo"Source: $SRC"echo"Source size: $SRC_SIZE bytes"echo"Destination: $DST_USER@$DST_HOST:$DST_PATH"echo"Starting transfer..."# 用 rsync 传输,开启进度rsync -avzP --bwlimit=0 -e "ssh -o StrictHostKeyChecking=no" \"$SRC""$DST_USER@$DST_HOST:$DST_PATH"echo"Transfer complete!"echo"Verifying integrity..."# 计算 MD5SRC_MD5=$(md5sum "$SRC" | awk '{print $1}')# 在目标端计算 MD5DST_MD5=$(ssh "$DST_USER@$DST_HOST""md5sum $DST_PATH/$(basename $SRC) | awk '{print \$1}'")if [ "$SRC_MD5" = "$DST_MD5" ]; thenecho"MD5 match: $SRC_MD5"echo"Transfer verified!"elseecho"MD5 mismatch!"echo"Source MD5:      $SRC_MD5"echo"Destination MD5: $DST_MD5"exit 1fi

2. nc + tar 流式传输

#!/bin/bash# nc_transfer.sh# 用法:./nc_transfer.sh send|receive <port> <path>set -eACTION=$1PORT=$2PATH_ARG=$3if [ -z "$ACTION" ] || [ -z "$PORT" ] || [ -z "$PATH_ARG" ]; thenecho"Usage:"echo"  Send:    $0 send <port> <local_path>"echo"  Receive: $0 receive <port> <remote_path>"exit 1fiif [ "$ACTION" = "send" ]; then# 发送端echo"Sending $PATH_ARG to remote:$PORT..."    tar czf - "$PATH_ARG" | pv -s $(du -sb "$PATH_ARG" | awk '{print $1}') | nc -l -p $PORTelif [ "$ACTION" = "receive" ]; then# 接收端echo"Receiving on port $PORT to $PATH_ARG..."    nc <REMOTE_IP> $PORT | pv | tar xzf - -C "$PATH_ARG"elseecho"Unknown action: $ACTION"exit 1fi

3. 自动重试的 rsync

#!/bin/bash# rsync_retry.sh# 用法:./rsync_retry.sh <src> <dst> <max_retries>set -eSRC=$1DST=$2MAX_RETRIES=${3:-5}RETRY_DELAY=${4:-10}if [ -z "$SRC" ] || [ -z "$DST" ]; thenecho"Usage: $0 <src> <dst> [max_retries] [retry_delay_seconds]"exit 1fiATTEMPT=1while [ $ATTEMPT -le $MAX_RETRIES ]; doecho"[Attempt $ATTEMPT/$MAX_RETRIES] rsync $SRC -> $DST"if rsync -avzP "$SRC""$DST"thenecho"Transfer succeeded!"exit 0elseecho"Transfer failed. Retrying in $RETRY_DELAY seconds..."        sleep $RETRY_DELAY        ATTEMPT=$((ATTEMPT + 1))fidoneecho"Failed after $MAX_RETRIES attempts."exit 1

4. 分卷 + 并行传输

#!/bin/bash# parallel_split_transfer.sh# 用法:./parallel_split_transfer.sh <src_dir> <dst_host> <dst_path> <chunk_size_mb>set -eSRC=$1DST_HOST=$2DST_PATH=$3CHUNK_SIZE=${4:-1024}# 默认 1GB# 临时目录TMP_DIR=$(mktemp -d)trap"rm -rf $TMP_DIR" EXIT# 打包并分卷echo"Packing and splitting $SRC into ${CHUNK_SIZE}MB chunks..."tar czf - "$SRC" | split -b ${CHUNK_SIZE}M - "$TMP_DIR/chunk_"# 生成分卷清单CHUNKS=($(ls $TMP_DIR/chunk_*))TOTAL=${#CHUNKS[@]}echo"Created $TOTAL chunks."# 并行传输echo"Transferring chunks in parallel..."printf'%s\n'"${CHUNKS[@]}" | xargs -n 1 -P 4 -I {} \    rsync -azP {} "$DST_HOST:$DST_PATH/"# 传输分卷清单REMOTE_CHUNKS=()for chunk in"${CHUNKS[@]}"do    REMOTE_CHUNKS+=("$DST_PATH/$(basename $chunk)")done# 在目标端合并echo"Merging chunks on remote..."ssh "$DST_HOST""cat ${REMOTE_CHUNKS[@]} | tar xzf - -C $DST_PATH/"# 清理远程分卷echo"Cleaning up remote chunks..."ssh "$DST_HOST""rm -f ${REMOTE_CHUNKS[@]}"echo"Transfer complete!"

监控传输进度

1. 实时观察网络流量

# 用 iftopyum install iftop -yapt install iftop -yiftop -i eth0# 用 nethogs(按进程)yum install nethogs -yapt install nethogs -ynethogs eth0# 用 sar 记录历史sar -n DEV 1

2. 实时观察磁盘 I/O

# 用 iotopyum install iotop -yapt install iotop -yiotop# 用 iostatiostat -xm 1

3. 多文件传输监控

# 监控所有 scp / rsync / nc 进程watch -n 1 "ps -ef | grep -E '(scp|rsync|nc)' | grep -v grep"

风险提醒与最佳实践

1. 风险提醒

  • 生产环境的 sshd_config 改动前先测试,避免锁死 SSH 访问。
  • 大文件传输前确认目标磁盘空间df -h 看目标端剩余空间。
  • 跨机房传输前确认带宽配额:避免超额被运营商收费。
  • 大文件传输会消耗网络带宽:选在业务低峰期执行。
  • 不要在生产环境用 nc 明文传输敏感数据(密钥、个人信息等)。
  • scp / rsync 涉及防火墙配置变更时,先确认安全策略。
  • 大文件传输完成后做完整性校验,避免文件损坏。
  • 临时文件及时清理,避免占用磁盘。
  • rsync 的 --delete 参数慎用,可能误删目标端文件。
  • 用 ionice / nice 调整优先级,避免传输抢占业务资源。

2. 最佳实践

  • 生产环境用 rsync 做定期同步,开启断点续传和校验。
  • 临时单次传输用 scp,简单可靠。
  • 大文件批量分发用 rsync daemon + HTTP 服务
  • 内网跨机器用 nc + tar,速度最快。
  • 超大文件用 tar + split + scp 分卷,便于管理。
  • 跨公网传输用 rsync over SSH,加密且支持断点续传。
  • 传输后做 MD5 / SHA256 校验,确保完整性。
  • 传输脚本加自动重试和告警
  • 重要传输任务记录到日志,方便审计和回溯。
  • 跨地域传输评估带宽成本,避免不必要的传输。
  • 压缩文件选择合适的压缩率,平衡 CPU 和带宽。

选型决策树

按以下顺序选型:

  1. 是否需要加密?

    • 是 → scp / rsync over SSH
    • 否 → 继续
  2. 是否需要增量传输?

    • 是 → rsync
    • 否 → 继续
  3. 是否需要断点续传?

    • 是 → rsync / aria2
    • 否 → 继续
  4. 文件大小?

    • < 1GB → scp
    • 1GB ~ 100GB → rsync / scp / nc
    • > 100GB → tar + split / 分卷
  5. 网络环境?

    • 公网 → 加密传输(scp / rsync / sftp)
    • 内网 → nc + tar(速度优先)
    • 跨地域 → rsync over SSH + 压缩
  6. 传输频率?

    • 单次 → scp
    • 多次 → rsync
  7. 是否需要多线程?

    • 是 → aria2 / tar + split + 并行
    • 否 → 继续
  8. 是否需要 HTTP 服务?

    • 是 → curl / wget / aria2
    • 否 → 其他工具

总结

Linux 下大文件传输的方案选择,本质是"加密、增量、断点续传、性能、安全"几个维度的权衡。

  • scp:最简单,适合临时小文件传输。
  • rsync:增量同步之王,生产环境首选。
  • nc + tar:内网裸传输,速度最快。
  • tar + split + scp:超大文件分卷,便于管理。
  • curl / wget / aria2:HTTP 下载,多线程场景。

没有银弹,只有最合适的方案。生产环境推荐用 rsync + 自动重试脚本 + 完整性校验,覆盖 80% 的传输场景。极端场景(超大文件、低带宽、高丢包)才需要 nc + tar + split + aria2 等工具组合。

传输完成后务必做完整性校验,把校验记录和传输日志归档保存。重要传输任务应该有"开始时间 - 结束时间 - 文件清单 - 校验和 - 操作人"的完整记录。

复盘建议:定期梳理生产环境的传输任务,把零散的脚本整合成统一的传输平台,标准化"参数校验、进度显示、自动重试、完整性校验、日志记录"等流程。新增传输任务直接复用平台能力,避免每个工程师自己写一份脚本。

附录:常用命令参数速查

scp 常用参数

scp -P 2222 file user@host:/path/        # 指定端口scp -r dir/ user@host:/path/             # 递归复制目录scp -C file user@host:/path/             # 启用压缩scp -c aes128-ctr file user@host:/path/  # 指定加密算法scp -l 8000 file user@host:/path/        # 限速 8000 Kbit/sscp -p file user@host:/path/             # 保留权限和时间戳scp -q file user@host:/path/             # 安静模式(不显示进度)scp -v file user@host:/path/             # 详细模式(调试用)scp -4 file user@host:/path/             # 强制 IPv4scp -6 file user@host:/path/             # 强制 IPv6

rsync 常用参数

rsync -avzP src/ dst/                          # 归档 + 详细 + 压缩 + 进度 + 断点续传rsync -avz --delete src/ dst/                  # 同步时删除目标端多余文件(慎用)rsync -avz --exclude='*.log' src/ dst/         # 排除特定文件rsync -avz --include='*.txt' --exclude='*' ...  # 包含特定文件rsync -avz --bwlimit=10240 src/ dst/           # 限速 10MB/srsync -avz -e "ssh -p 2222" src/ user@host:    # 自定义 SSH 端口rsync -avz --dry-run src/ dst/                 # 试运行(不实际执行)rsync -avz --whole-file src/ dst/              # 禁用增量算法rsync -avz --checksum src/ dst/                # 基于校验和判断差异rsync -avz --partial --inplace src/ dst/       # 原地更新(不创建临时文件)

nc 常用参数

nc -l 9999                                  # 监听 9999 端口nc -l -p 9999                               # 监听 9999 端口(兼容老版本)nc -l -k 9999                               # 持续监听(接受多个连接)nc -w 10 host 9999                          # 设置超时时间nc -v host 9999                             # 详细模式nc -z -v host 1-1024                        # 端口扫描nc -u -l 9999                               # UDP 模式nc -l 9999 > file.out                       # 接收数据到文件nc host 9999 < file.in                      # 发送文件到服务端

aria2 常用参数

aria2c -x 16 http://url/file                # 16 线程下载aria2c -c -x 16 http://url/file             # 断点续传aria2c -d /data/ http://url/file            # 指定下载目录aria2c --max-download-limit=10M http://url  # 限速 10MB/saria2c -s 16 http://url/file                # 分段数aria2c --input-file=urls.txt                # 批量下载(urls.txt 包含 URL 列表)aria2c http://url1 http://url2              # 下载多个文件aria2c --seed-time=60 file.torrent          # BT 做种 60 分钟

curl 常用参数

curl -O http://url/file                     # 下载文件(保留远程文件名)curl -o localfile http://url/file           # 下载到指定文件curl -C - -O http://url/file                # 断点续传curl -u user:pass -O http://url/file        # 带认证curl --limit-rate 10M -O http://url/file    # 限速 10MB/scurl -T localfile -u user:pass ftp://url/   # 上传 FTPcurl --ftp-pasv ftp://url/file              # FTP 被动模式curl -L http://url                          # 跟随重定向curl -H "Authorization: token" http://url   # 自定义 Headercurl -X POST -d "key=value" http://url      # POST 请求curl -s -o /dev/null -w "%{http_code}" url  # 静默模式 + 输出 HTTP 状态码

附录:常见报错和解决方案

报错 1:Permission denied (publickey)

# 原因:SSH 公钥没配对# 解决:ssh-copy-id user@host# 或者手动追加公钥到目标端的 ~/.ssh/authorized_keys

报错 2:Connection timed out

# 原因:网络不通或端口被防火墙拦截# 解决:# 1. ping 目标 IP 确认网络# 2. telnet 目标端口 22# 3. 检查防火墙规则(iptables -L / nft list ruleset)# 4. 检查云服务商安全组规则

报错 3:No space left on device

# 原因:目标磁盘空间不足# 解决:# 1. df -h 看目标端空间# 2. 清理磁盘# 3. 选择其他磁盘

报错 4:rsync connection unexpectedly closed

# 原因:目标端 rsync 没装、SSH 配置问题或网络中断# 解决:# 1. 目标端安装 rsync# 2. 检查 SSH 配置# 3. 用 -e "ssh -v" 看详细 SSH 错误

报错 5:MD5 mismatch

# 原因:传输过程中文件损坏# 解决:# 1. 重新传输# 2. 检查网络丢包、磁盘 I/O 错误# 3. 用更稳定的传输工具(rsync with -P / aria2 -c)

总结

本文从工程实践角度,覆盖了 Linux 下大文件传输的 5 种方案:scp、rsync、nc + tar、tar + split、curl / wget / aria2。每种方案都有适用场景、优缺点、配置示例。

实际选型时遵循"加密需求 → 增量需求 → 断点续传需求 → 文件大小 → 网络环境 → 传输频率 → 多线程需求"的决策流程。生产环境推荐用 rsync + 自动重试脚本 + 完整性校验作为基础方案,覆盖 80% 的传输场景。特殊场景(内网、跨地域、超大文件)再选择 nc + tar、tar + split、aria2 等。

关键点:

  • 完整性校验必须做(SHA256 优于 MD5)。
  • 自动重试是生产环境的必备能力。
  • 完整性校验和自动重试脚本要纳入版本管理。
  • 传输任务要记录到审计日志。
  • 重要传输任务在低峰期执行,避免影响业务。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-03 04:00:38 HTTP/2.0 GET : https://f.mffb.com.cn/a/497367.html
  2. 运行时间 : 0.252291s [ 吞吐率:3.96req/s ] 内存消耗:4,859.70kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=02cccaaf8b93aa0df77c7d86012a358f
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000891s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001298s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000580s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000602s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001140s ]
  6. SELECT * FROM `set` [ RunTime:0.000443s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001268s ]
  8. SELECT * FROM `article` WHERE `id` = 497367 LIMIT 1 [ RunTime:0.001068s ]
  9. UPDATE `article` SET `lasttime` = 1783022438 WHERE `id` = 497367 [ RunTime:0.055598s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.006207s ]
  11. SELECT * FROM `article` WHERE `id` < 497367 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.005674s ]
  12. SELECT * FROM `article` WHERE `id` > 497367 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.003289s ]
  13. SELECT * FROM `article` WHERE `id` < 497367 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.002118s ]
  14. SELECT * FROM `article` WHERE `id` < 497367 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.016605s ]
  15. SELECT * FROM `article` WHERE `id` < 497367 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.001731s ]
0.255443s