Linux多线程下载
Linux多线程下载
有时候我们在下载一个较大的东西上传服务器的时候,有一种操作是先使用本地电脑下载,然后上传到服务器,或者直接使用服务器上的wget进行安装,但是使用本地下载然后上传的话,如果受到本地网络或者服务器的限制,要么可能下载速度慢或者上传速度慢,而且可能会出现等待时间过长的情况,那如果我们使用linux服务器上比较常见见的下载工具curl和wget,但是两者都不支持多线程, 断点续传的作用不见得能发挥到最大。给大家介绍两款linux中多线程下载工具axel
和aria2c
,开启多线程疯狂下载。
我们先来介绍下axel
axel
我们这边以Centos7系统为例,其他系统类似,只要使用对应的安装命令安装正确的包,就可以使用了。
CentOS 7安装Axel:
目前yum官方源上没有Axel,我们无法通过yum直接进行安装,但是我们可以通过安装epel第三方源然后后yum安装axel下载工具。
1 | yum install axel |
大家也可以选择使用以下网址将rpm包下载后将包包上传,然后进行手动安装。
1 | https://pkgs.org/download/axel |
然后使用
1 | rpm -ivh 包名字(本地包位置以及名字) |
CentOS 6安装Axel:
32位CentOS 6执行下面命令:
1 | wget -c http://mirrors.sohu.com/dag/redhat/el6/en/i386/rpmforge/RPMS/axel-2.4-1.el6.rf.i686.rpm |
64位CentOS 6执行下面命令:
1 | wget -c http://mirrors.sohu.com/dag/redhat/el6/en/x86_64/rpmforge/RPMS/axel-2.4-1.el6.rf.x86_64.rpm |
Debian/Ubuntu安装Axel:
1 | apt-get install axel |
Fedora安装Axel
1 | dnf install axel |
使用
简略使用.”-n”线程数、”-o”下载保存目录、”-a”简略下载条。我们以下载一个GITHUB上的Odoo为例,这个包大概149MB,我正常下载速度在30k左右。
用axel开10个下载:
本想使用相同的下载,但是由于我系统安装的axel过低,下载Https的时候一直出现以下情况:
我看了下资料好像是我安装的axel
版本较低,我尝试安装更高版本的,但是由于都是第三方包,且包对不上版本,所以我就拿另一个作为比对,我们可以看到,单个线程下载的速度可以到达3万Kb左右。而且如果下载过程中下载中断可以再执行下载命令即可恢复上次的下载进度。
参数
1 | --max-speed=x , -s x 最高速度x |
aria2c
aria2就更强大了,他提供了Windows、Mac和Linux三个版本的,在Windows上实现多线程下载。使用命令./aria2c –v,查看Enabled Feature。如下图所示,支持BT,GZip, HTTPS, Medssage Digest下载。aria2是一个轻量级的多协议多源命令行下载实用程序。可以通过内置的JSON-RPC和XML-RPC接口操作aria2。重点圈出来HTTPS,是因为我想下载的一些文件是基于HTTPS。
下载
https://github.com/aria2/aria2/releases
根据平台选择相应的版本就可以了
下载相关配置
进入 mkdir ~/.aria2
最大同时下载任务数, 运行时可修改, 默认:5
max-concurrent-downloads=5
同一服务器连接数, 添加时可指定, 默认:1
max-connection-per-server=15
最小文件分片大小, 添加时可指定, 取值范围1M -1024M, 默认:20M
假定size=10M, 文件为20MiB 则使用两个来源下载; 文件为15MiB 则使用一个来源下载
min-split-size=10M
单个任务最大线程数, 添加时可指定, 默认:5
split=5
整体下载速度限制, 运行时可修改, 默认:0
#max-overall-download-limit=0
单个任务下载速度限制, 默认:0
#max-download-limit=0
整体上传速度限制, 运行时可修改, 默认:0
max-overall-upload-limit=20kb
单个任务上传速度限制, 默认:0
max-upload-limit=5kb
禁用IPv6, 默认:false
disable-ipv6=true
禁用https证书检查
check-certificate=false
#运行覆盖已存在文件
allow-overwrite=true
#自动重命名
auto-file-renaming
进度保存相关
从会话文件中读取下载任务
input-file=/etc/aria2/aria2.session
在Aria2退出时保存错误/未完成的下载任务到会话文件
save-session=/etc/aria2/aria2.session
定时保存会话, 0为退出时才保存, 需1.16.1以上版本, 默认:0
save-session-interval=30
RPC相关设置
启用RPC, 默认:false
enable-rpc=true
允许所有来源, 默认:false
rpc-allow-origin-all=true
允许非外部访问, 默认:false
rpc-listen-all=true
事件轮询方式, 取值:[epoll, kqueue, port, poll, select], 不同系统默认值不同
#event-poll=select
RPC监听端口, 端口被占用时可以修改, 默认:6800
rpc-listen-port=6800
保存上传的种子文件
rpc-save-upload-metadata=false
BT/PT下载相关
当下载的是一个种子(以.torrent结尾)时, 自动开始BT任务, 默认:true
#follow-torrent=true
BT监听端口, 当端口被屏蔽时使用, 默认:6881-6999
listen-port=51413
单个种子最大连接数, 默认:55
#bt-max-peers=55
打开DHT功能, PT需要禁用, 默认:true
enable-dht=true
打开IPv6 DHT功能, PT需要禁用
enable-dht6=false
DHT网络监听端口, 默认:6881-6999
#dht-listen-port=6881-6999
本地节点查找, PT需要禁用, 默认:false
bt-enable-lpd=true
种子交换, PT需要禁用, 默认:true
enable-peer-exchange=true
每个种子限速, 对少种的PT很有用, 默认:50K
#bt-request-peer-speed-limit=50K
客户端伪装, PT需要
peer-id-prefix=-UT341-
user-agent=uTorrent/341(109279400)(30888)
当种子的分享率达到这个数时, 自动停止做种, 0为一直做种, 默认:1.0
seed-ratio=1.0
强制保存会话, 话即使任务已经完成, 默认:false
较新的版本开启后会在任务完成后依然保留.aria2文件
#force-save=false
BT校验相关, 默认:true
#bt-hash-check-seed=true
继续之前的BT任务时, 无需再次校验, 默认:false
bt-seed-unverified=true
保存磁力链接元数据为种子文件(.torrent文件), 默认:false
#bt-save-metadata=false
#仅下载种子文件
bt-metadata-only=true
#通过网上的种子文件下载,种子保存在内存
follow-torrent=mem
使用方法
一般下载
使用aria2 下载文件,只需在命令后附加地址即可如:
aria2c http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.22.6.tar.bz2
分段下载
利用 aria2的分段下载功能可以加快文件的下载速度,对于下载大文件时特别有用。为了使用aria2的分段下载功能,你需要在命令中指定s选项
aria2c -s 2 http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.22.6.tar.bz2
这将使用2个连接来下载该文件。s后面的参数值介于1~5之间,你可以根据实际情况选择。
断点续传
在命令中使用c选项可以断点续传文件。
aria2c -c http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.22.6.tar.bz2
下载 torrent 文件
你也可以使用 aria2 下载BitTorrent文件如:
aria2c -0 gutsy.torrent http://cdimage.ubuntu.com/daily-live/current/gutsy-desktop-i386.iso.torrent
文件读取连接下载
从 files.txt 中获取下载链接进行下载, files.txt 中可以包含多个链接如:
aria2c -i files.txt