LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1308|回复: 1

怎样在apt-get中使用axel(心得)

[复制链接]
发表于 2006-10-28 19:20:23 | 显示全部楼层 |阅读模式
在gentoo中可以通过make.conf进行如下的定义使用axel来下载需要的文件,这通常会比使用wget快4到5倍的时间:


  1. FETCHCOMMAND="/usr/bin/axel -a -o /\${DISTDIR}/${FILE} \${URI}"
  2. RESUMECOMMAND="/usr/bin/axel -a -o /\${DISTDIR}/${FILE} \${URI}"
复制代码

但是在ubuntu中,似乎没有提供这样的接口可以修改apt-get让它使用axel来下载文件,在有些国外的服务器上下载文件的时候就会很惨。其实和 Gentoo一样,apt-get也会检查目的路径中是否已经存在了同一个文件,如果存在了就不会再下载,而且apt-get也提供了不下载只打印下载地址的功能,结合这两个特点我们可以写出让apt-get使用axel的脚本。基本的原理就是,先调用apt-get --print-uris打印出要下载的文件,使用axel将这些文件下载到相应的目录,然后再执行正常的apt-get命令。

脚本的内容如下所示:


  1. #!/bin/bash
  2. # by cnwesleywang@gmail.com
  3. # http://www.wesleywang.net

  4. GOOD=$'\e[32;01m'
  5. WARN=$'\e[33;01m'
  6. BAD=$'\e[31;01m'
  7. HILITE=$'\e[36;01m'
  8. BRACKET=$'\e[34;01m'
  9. NORMAL=$'\e[0m'

  10. Usage="${BAD}Try something like${NORMAL} "$0 install stardict""
  11. if [ "$#" -lt 2 ] ; then
  12.         echo "$Usage";
  13.         exit 1;
  14. fi

  15. cmdout=`apt-get $* -y --print-uris`
  16. if [ $? -ne 0 ] ; then
  17.         echo "${BAD}The command you input return fail,check it:$*${NORMAL}"
  18.         exit 1;
  19. fi

  20. urls=`echo $cmdout | grep  -e "http[:/a-zA-Z0-9._-]*.deb" -o`

  21. for aurl in $urls
  22. do
  23.         echo "${HILITE}Trying to download${NORMAL} $aurl"
  24.         cd /var/cache/apt/archives &&  axel  $aurl
  25.         if [ $? -ne 0 ] ; then
  26.                 echo "${BAD}Download $aurl fail,Skip!${NORMAL}"
  27.         fi
  28. done

  29. echo "${HILITE}Now execute the normal apt-get command!${NORMAL}"
  30. apt-get $*
复制代码

使用方法举例:


  1. sudo ./axelaptget install stardict
复制代码

在这里下载脚本:http://www.wesleywang.net/sav/axelaptget
发表于 2006-10-29 00:02:04 | 显示全部楼层
这种方法值得探讨
毕竟axel是多线程的下载
这样会加重服务器负担
另外
在小于500K的时候
wget和axel的速度差距不明显
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表