本文共 4431 字,大约阅读时间需要 14 分钟。
axel插件是基于yum下的一个多线程下载插件,通过打开多个HTTP/FTP连接来将一个文件进行分段下载,从而达到加速下载的目的。对于下载大文件,该工具特别有用。可用于、RHEL、等使用yum的Linux发行版。暂时找不到rpm包,只能编译安装。使用Axel可以在低速网络环境里提高数倍的下载速度。
axel 是Linux 命令行下多线程的下载工具,支持断点续传,速度通常情况下是Wget的几倍
官方主页:
源码下载:
1 | # curl -O https://alioth.debian.org/frs/download.php/3015/axel-2.4.tar.gz |
编译安装:
1 2 3 4 5 6 | # tar -xvf axel-2.4.tar.gz && cd axel-2.4 # ./configure --prefix=/usr/local/axel # make && make install 导出axel执行路径 # echo 'PATH=/usr/local/axel/bin:$PATH' > /etc/profile.d/axel.sh && source /etc/profile |
添加axel man手册查找路径
1 2 | # vim /etc/man.config MANPATH /usr/local/axel/share/man |
常用选项:
1 2 3 4 | -n : 指定线程数 -o : 指定另存为目录 -s : 指定每秒的最大比特数 -q : 静默模式 |
1 2 3 4 5 | # wget https://github.com/crook/yum-axelget/archive/v1.0.5.tar.gz # tar -xvf v1.0.5 # cd yum-axelget-1.0.5/ # cp axelget.conf /etc/yum/pluginconf.d/ # cp axelget.py /usr/lib/yum-plugins/ |
补充:
下载配置文件axelget.conf与axelget.py到yum里:
cd /etc/yum/pluginconf.d/
wget http://cnfreesoft.googlecode.com/svn/trunk/axelget/axelget.conf也可以自己编辑,全文如下:
[main]
enabled=1onlyhttp=1enablesize=54000cleanOnException=1cd /usr/lib/yum-plugins/
wget http://cnfreesoft.googlecode.com/svn/trunk/axelget/axelget.py也可以自己编辑,全文如下:
from yum.plugins import PluginYumExit, TYPE_CORE, TYPE_INTERACTIVE
from urlparse import urljoinimport os,timerequires_api_version = '2.3'
plugin_type = (TYPE_CORE, TYPE_INTERACTIVE)enablesize=300000
trymirrornum=-1maxconn=10httpdownloadonly=FalsecleanOnException=0def init_hook(conduit):
global enablesize,trymirrornum,maxconn,cleanOnException,httpdownloadonly enablesize = conduit.confInt('main','enablesize',default=30000) trymirrornum = conduit.confInt('main','trymirrornum',default=-1) maxconn = conduit.confInt('main','maxconn',default=10) httpdownloadonly=conduit.confBool('main','onlyhttp',default=False) cleanOnException=conduit.confInt('main','cleanOnException',default=0) returndef predownload_hook(conduit):
global enablesize,cleanOnException,httpdownloadonly preffermirror="" PkgIdx=0 TotalPkg=len(conduit.getDownloadPackages()) for po in (conduit.getDownloadPackages()): PkgIdx+=1 if hasattr(po, 'pkgtype') and po.pkgtype == 'local': continue totsize = long(po.size) ret = False if totsize <= enablesize: conduit.info(2, "Package %s download size %d less than %d,Skip plugin!" % (po.repo.id,totsize,enablesize)) continue else: conduit.info(2, "[%d/%d]Ok,we will try to use axel to download this big file:%d" % (PkgIdx,TotalPkg,totsize)) local = po.localPkg() if os.path.exists(local): if not os.path.exists(local+".st"): fstate=os.stat(local) if totsize == fstate.st_size: conduit.info(2,"Target already exists,skip to next file!") continue localall = "%s %s" % (local,local+".st") rmcmd = "rm -f %s" % (localall) curmirroridx = 0 conduit.info(2,"Before we start,clean all the key files") os.system(rmcmd) connnum = totsize / enablesize if connnum*enablesize<totsize: connnum+=1 if connnum > maxconn: connnum = maxconn mirrors=[] mirrors[:0]=po.repo.urls if preffermirror != "": mirrors[:0] = [preffermirror] for url in mirrors: if url.startswith("ftp://") and httpdownloadonly: print "Skip Ftp Site:",url continue if url.startswith("file://"): print "Skip Local Site:",url continue curmirroridx += 1 if (curmirroridx > trymirrornum) and (trymirrornum != -1): conduit.info(2, "Package %s has tried %d mirrors,Skip plugin!" % (po.repo.id,trymirrornum)) break remoteurl = "%s/%s" % (url,po.remote_path) syscmd = "axel -a -n %s %s -o %s" % (connnum,remoteurl,local) conduit.info(2, "Execute axel cmd:\n%s" % syscmd) os.system(syscmd) time.sleep(2) if os.path.exists(local+".st"): conduit.info(2,"axel exit by exception,let's try another mirror") if cleanOnException: conduit.info(2,"because cleanOnException is set to 1,we do remove key file first") os.system(rmcmd) continue elif not os.path.exists(local):#this mirror may not update yet continue else: ret = True preffermirror=url break if not ret: conduit.info (2,"try to run rm cmd:%s" % rmcmd) os.system(rmcmd)最后确认 /etc/yum.conf中plugins=1
4 测试并安装yum-fastestmirror插件
yum install -y yum-fastestmirror注:axel插件也可以当独立下载工具来使用。当成独立下载工具使用时,适用于绝大部分Linux发行版。使用参数如下:一般使用:axel url(下载文件地址);限速使用:加上 -s 参数,如 -s 10240,即每秒下载的字节数,这里是 10 Kb;限制连接数:加上 -n 参数,如 -n 5,即打开 5 个连接。yum install axel
yum install yum-prestoyum install yum-fastestmirroryum install yum-metadata-parseryum install yum-downloadonlyyum install yum-priorities原创作品,允许转载,转载时请务必以超链接形式标明文章 、作者信息和本声明。否则将追究法律责任。。原作者:ilove_vc