用脚本寻找ubuntu最快的源

脚本1:
用脚本寻找ubuntu最快的源
 
 
在网络上寻找速度最快的源。
  
        
   
        
            
  • 建立一个新的脚本sudo gedit /usr/bin/setfastsources
  • 输入下面的内容:

    #!/bin/bash
    if [ $# != 1 ] | \
       [ "$1" != "hoary" -a "$1" != "breezy" ]; then
       echo "Use: sudo $0 (hoary|breezy)";
       echo "Example: sudo $0 hoary";
       exit 1;
    fi
    if [ !$USER = "root" ]; then
       echo "$0 must run by sudo";
       exit 1;
    fi
    echo "Seting $1...";
    MIRRORS="http://mirror.isp.net.au/ftp/pub/ubuntu/ \
    ftp://linux.xjtu.edu.cn/mirror/ubuntu/ubuntu/ \
    http://mirror.lupaworld.com/ubuntu/archive/ \
    http://ubuntu.cn99.com/ubuntu/ \
    ftp://mirror.isp.net.au/pub/ubuntu/ \
    ftp://ftp.filearena.net/pub/ubuntu/ \
    http://mirror.optus.net/ubuntu/ \
    http://ubuntu.inode.at/ubuntu/ \
    ftp://ubuntu.inode.at/ubuntu/ \
    http://ubuntu.uni-klu.ac.at/ubuntu/ \
    ftp://ftp.uni-klu.ac.at/linux/ubuntu/ \
    ftp://gd.tuwien.ac.at/opsys/linux/ubuntu/archive/ \
    http://gd.tuwien.ac.at/opsys/linux/ubuntu/archive/ \
    http://ftp.belnet.be/pub/mirror/ubuntu.com/ \
    ftp://ftp.belnet.be/pub/mirror/ubuntu.com/ \
    http://ubuntu.mirrors.skynet.be/pub/ubuntu.com/ \
    ftp://ubuntu.mirrors.skynet.be/pub/ubuntu.com/ \
    http://mirror.freax.be/ubuntu/archive.ubuntu.com/ \
    http://ftp.interlegis.gov.br/pub/ubuntu/archive/ \
    http://ubuntu.c3sl.ufpr.br/ubuntu/ \
    ftp://ftp.cs.mun.ca/pub/mirror/ubuntu/ \
    http://archive.ubuntu.org.cn/ubuntu/ \
    http://archive.ubuntu.cz/ubuntu/ \
    ftp://archive.ubuntu.cz/ubuntu/ \
    http://mirrors.dk.telia.net/ubuntu/ \
    ftp://mirrors.dk.telia.net/ubuntu/ \
    http://mirrors.dotsrc.org/ubuntu/ \
    ftp://mirrors.dotsrc.org/ubuntu/ \
    http://klid.dk/homeftp/ubuntu/ \
    ftp://klid.dk/ubuntu/ \
    http://ubuntu.mirror.mmd.net/ubuntu/ \
    ftp://ubuntu.mirror.mmd.net/ubuntu/ \
    http://mir1.ovh.net/ubuntu/ubuntu/ \
    ftp://mir1.ovh.net/ubuntu/ubuntu/ \
    ftp://debian.charite.de/ubuntu/ \
    http://debian.charite.de/ubuntu/ \
    http://ftp.inf.tu-dresden.de/os/linux/dists/ubuntu/ \
    http://www.artfiles.org/ubuntu.com/ \
    http://ftp.rz.tu-bs.de/pub/mirror/ubuntu-packages/ \
    ftp://ftp.rz.tu-bs.de/pub/mirror/ubuntu-packages/ \
    ftp://ftp.join.uni-muenster.de/pub/mirrors/ftp.ubuntu.com/ubuntu/ \
    http://ftp.join.uni-muenster.de/pub/mirrors/ftp.ubuntu.com/ubuntu/ \
    http://ftp.kfki.hu/linux/ubuntu/ \
    ftp://ftp.kfki.hu/pub/linux/ubuntu/ \
    ftp://ftp.fsn.hu/pub/linux/distributions/ubuntu/ \
    http://komo.vlsm.org/ubuntu/ \
    http://kambing.vlsm.org/ubuntu/ \
    http://ubuntu.odg.cc/ \
    http://ftp.esat.net/mirrors/archive.ubuntu.com/ \
    ftp://ftp.esat.net/mirrors/archive.ubuntu.com/ \
    http://ftp.heanet.ie/pub/ubuntu/ \
    ftp://ftp.heanet.ie/pub/ubuntu/ \
    http://ftp.linux.it/ubuntu/ \
    ftp://ftp.linux.it/ubuntu/ \
    http://na.mirror.garr.it/mirrors/ubuntu-archive/ \
    ftp://na.mirror.garr.it/mirrors/ubuntu-archive/ \
    http://ubuntu.mithril-linux.org/archives/ \
    http://ftp.litnet.lt/pub/ubuntu/ \
    ftp://ftp.litnet.lt/pub/ubuntu/ \
    ftp://ftp.polytechnic.edu.na/pub/ubuntulinux/ \
    ftp://ftp.bit.nl/ubuntu/ \
    http://ftp.bit.nl/ubuntu/ \
    http://ubuntu.synssans.nl/ \
    ftp://ftp.uninett.no/linux/ubuntu/ \
    http://ubuntulinux.mainseek.com/ubuntu/ \
    ftp://ftp.rnl.ist.utl.pt/ubuntu/ \
    http://darkstar.ist.utl.pt/ubuntu/archive/ \
    http://ftp.lug.ro/ubuntu/ \
    ftp://ftp.lug.ro/ubuntu/ \
    http://ftp.roedu.net/mirrors/ubuntu/ \
    http://ftp.iasi.roedu.net/mirrors/ubuntu/ \
    ftp://ftp.um.es/mirror/ubuntu/ \
    ftp://ftp.ubuntu-es.org/ubuntu/ \
    http://ftp.acc.umu.se/mirror/ubuntu/ \
    ftp://ftp.se.linux.org/pub/Linux/distributions/ubuntu/ \
    http://mirror.switch.ch/ftp/mirror/ubuntu/ \
    ftp://mirror.switch.ch/mirror/ubuntu/ \
    http://apt.nc.hcc.edu.tw/pub/ubuntu/ \
    ftp://apt.nc.hcc.edu.tw/pub/ubuntu/ \
    ftp://os.nchc.org.tw/ubuntu/ \
    ftp://ftp.ee.ncku.edu.tw/pub/ubuntu/ \
    http://ubuntu.csie.ntu.edu.tw/ubuntu/ \
    http://www.mirrorservice.org/sites/archive.ubuntu.com/ubuntu/ \
    ftp://ftp.mirrorservice.org/sites/archive.ubuntu.com/ubuntu/ \
    http://ftp.cs.umn.edu/pub/ubuntu/ \
    http://mirror.clarkson.edu/pub/distributions/ubuntu/ \
    ftp://mirror.clarkson.edu/pub/distributions/ubuntu/ \
    http://ubuntu.mirrors.tds.net/ubuntu/ \
    ftp://ubuntu.mirrors.tds.net/ubuntu/ \
    http://itanix.rutgers.edu/ubuntu/ \
    http://www.opensourcemirrors.org/ubuntu/ \
    http://ftp.ale.org/pub/mirrors/ubuntu/ \
    http://ubuntu.secs.oakland.edu/ \
    http://mirror.mcs.anl.gov/pub/ubuntu/ \
    ftp://mirror.mcs.anl.gov/pub/ubuntu/ \
    http://debian.okey.net/ubuntu/ \
    ftp://ftp.sjtu.edu.cn/sites/archive.ubuntu.com/"
    TIME="/usr/bin/time -o timer.txt -f %e";
    URL="dists/$1/main/binary-i386/Packages.gz";
    WGET="wget --cache=off -T 20 -t 1 -w 0 -O /dev/null"
    PAYTIME=1000;
    TEMPTIME=1000;
    SITE="http://cn.archive.ubuntu.com/ubuntu/";
    for mirror in $MIRRORS ; do
       echo "Testing $mirror..."
       TEMPTIME=`$TIME $WGET $mirror$URL`;
       if [ "$?" = 0 ] ; then
          TEMPTIME=`cat timer.txt`;
          echo "wget $1 : $TEMPTIME   CurrMinTime : $PAYTIME";
          TEMPTIME2=`echo "$PAYTIME > $TEMPTIME"|bc`;
          if [ $TEMPTIME2 = 1 ] ; then
             PAYTIME="$TEMPTIME";
             SITE="$mirror";
             echo -e "\033[37;41;1mSet best site ($PAYTIME): $SITE\033[0m"   
          fi
       fi
       rm timer.txt;
    done
    echo "Best site ($PAYTIME): $SITE";
    echo "Backup your sources.list."
    declare -i num;
    num=0;
    while [ -e /etc/apt/sources.list.$num ];do
       num=$num+1;      
    done
    mv /etc/apt/sources.list /etc/apt/sources.list.$num
    COMP="main restricted universe multiverse";
    MAINSITE="http://archive.ubuntu.org.cn"
    echo "deb $SITE $1 $COMP" > /etc/apt/sources.list
    echo "deb $SITE $1-security $COMP" >> /etc/apt/sources.list
    echo "deb $SITE $1-updates $COMP" >> /etc/apt/sources.list
    if [ $1 = "hoary" ]; then
       echo "deb $MAINSITE/ubuntu-cn ubuntu.org.cn $COMP" >> /etc/apt/sources.list
       echo "deb $MAINSITE/ubuntu hoary-backports $COMP" >> /etc/apt/sources.list
       echo "deb $MAINSITE/backports hoary-extras $COMP" >> /etc/apt/sources.list
    fi
    echo "Finlish setting sources.list,Run apt-get update now!";
    exit 0
    保存并脚本

  • 设置脚本文件为可执行。sudo chmod +x /usr/bin/setfastsources
  • 执行脚本
    hoary:
    sudo setfastsources hoary
    breezy:
    sudo setfastsources breezy

 

老外的脚本2:Ubuntu自动更新最快软件源脚本

每次装好Ubuntu,对于大多数用户来说,首先要做的事就是手动修改/etc/apt/sources.list文件,将里面的官方软件源地址更换为自己学校或者公司的软件源。当我们更换一个工作环境后,可能伴随着又要替换旧的软件源地址。

笔者觉得这样每次手动更改软件源是一件及其麻烦重复的劳动,于是编写了一个自动更新最快软件源的脚本,从此一劳永逸。

原理

最直观的想法就是:对各个软件源进行测速,选出最快的那个,之后将其替换为新的软件源。

那么如何对各个软件源测速呢?有两种方法:

一、用ping命令 测量其平均响应时间 选出响应时间最短的那个
二、用wget命令 测量下载一个文件的总时间 选出耗时最少的那个

那么这两种方法有什么区别呢?我们该用哪个呢?

前者选出的是响应时间最优的,后者选出的是下载速度最快的。我们都知道软件源的作用是供客户端下载更新软件,所以当然是后者的方法更为准确,但笔者最终选择了前者作为测速方案,因为前者的用户体验更好且代码简单易懂。设想,如果我们采用后者,那么需要从每个软件源下载一个文件,并且这个文件不能太小,否则无法区分他们的速度,那么一个显而易见的情况是脚本需要运行较长的时间。

虽然存在某些软件源可能响应时间很短,而下载速度却很慢的情况,但经过笔者的多次实验,发现这样的情况并不常见。

实现

首先测试用户网络状态

利用 local speed=`ping -W1 -c1 www.baidu.com 2> /dev/null | grep “^rtt” |  cut -d ‘/’ -f5`取出其平均响应时间
如果speed == “” 则说明网络不通,提示用户,且退出程序。
否则,说明网络正常,继续执行。

检测软件源列表文件是否存在

利用test -f $SOURCES_MIRRORS_FILE 若不存在,提示用户,且退出程序。

对每个软件源地址进行测速

在测速之前清空上次运行的测速结果文件,之后将每个软件源的测速结果(源地址 平均响应时间)写入测速结果文件

对测速结果进行排序

利用sort -k 2 -n -o $MIRRORS_SPEED_FILE $MIRRORS_SPEED_FILE 对每行记录 按照平均响应时间升序排列

选出最快的软件源

利用head -n 1 $MIRRORS_SPEED_FILE | cut -d ‘ ‘ -f1 选出最快的软件源

询问用户是否要使用该软件源

用户确认后,先对用户之前的软件源进行备份,然后再替换。

脚本源代码

最新版本:https://github.com/KJlmfe/soEasyUbuntu/tree/master/get_fast_mirror
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#!/bin/bash

#Program:
#   This program gets the fastest ubuntu software sources from SOURCES_MIRRORS_FILE
#   and backup && update /etc/apt/sources.list

#Author:  KJlmfe    www.freepanda.me

#History:
#   2012/12/6   KJlmfe  First release


VERSION= "precise"   # precise is code of Ubuntu 12.04 if your ubuntu is not 12.04 please change
TEST_NETCONNECT_HOST= "www.baidu.com"
SOURCES_MIRRORS_FILE= "sources_mirrors.list"
MIRRORS_SPEED_FILE= "mirrors_speed.list"

function get_ping_speed ( )   #return average ping $1 time
{
    local speed= ` ping -W1 -c1 $1 2 > /dev /null | grep "^rtt" |   cut -d '/' -f5 `
    echo $speed
}

function test_mirror_speed ( )    #
{
    rm $MIRRORS_SPEED_FILE 2 > /dev /null; touch $MIRRORS_SPEED_FILE
   
      cat $SOURCES_MIRRORS_FILE | while read mirror
    do
        if [ "$mirror" != "" ]; then
            echo -e "Ping $mirror \c"
            local mirror_host= ` echo $mirror | cut -d '/' -f3 `   #change mirror_url to host
   
            local speed=$ (get_ping_speed $mirror_host )
   
            if [ "$speed" != "" ]; then
                echo "Time is $speed"
                echo "$mirror$speed" >> $MIRRORS_SPEED_FILE
            else
                echo "Connected failed."
            fi
        fi
    done
}

function get_fast_mirror ( )
{
      sort -k 2 -n -o $MIRRORS_SPEED_FILE $MIRRORS_SPEED_FILE
      local fast_mirror= ` head -n 1 $MIRRORS_SPEED_FILE | cut -d ' ' -f1 `
      echo $fast_mirror
}

function backup_sources ( )
{
    echo -e "Backup your sources.list.\n"
    sudo mv /etc /apt /sources.list /etc /apt /sources.list. ` date + %F- %R: %S `
}

function update_sources ( )
{
    local COMP= "main restricted universe multiverse"
    local mirror= "$1"
    local tmp=$ ( mktemp )

    echo "deb $mirror$VERSION $COMP" >> $tmp
    echo "deb $mirror$VERSION-updates $COMP" >> $tmp
    echo "deb $mirror$VERSION-backports $COMP" >> $tmp
    echo "deb $mirror$VERSION-security $COMP" >> $tmp
    echo "deb $mirror$VERSION-proposed $COMP" >> $tmp

    echo "deb-src $mirror$VERSION $COMP" >> $tmp
    echo "deb-src $mirror$VERSION-updates $COMP" >> $tmp
    echo "deb-src $mirror$VERSION-backports $COMP" >> $tmp
    echo "deb-src $mirror$VERSION-security $COMP" >> $tmp
    echo "deb-src $mirror$VERSION-proposed $COMP" >> $tmp

    sudo mv "$tmp" /etc /apt /sources.list
    echo -e "Your sources has been updated, and maybe you want to run\"sudo apt-get update\" now.\n";
}

echo -e "\nTesting the network connection.\nPlease wait...   \c"

if [ "$(get_ping_speed $TEST_NETCONNECT_HOST)" == "" ]; then
    echo -e "Network is bad.\nPlease check your network."; exit 1
else
    echo -e "Network is good.\n"
    test -f $SOURCES_MIRRORS_FILE

    if [ "$?" != "0" ]; then  
        echo -e "$SOURCES_MIRRORS_FILE is not exist.\n"; exit 2
    else
        test_mirror_speed
        fast_mirror=$ (get_fast_mirror )

        if [ "$fast_mirror" == "" ]; then
            echo -e "Can't find the fastest software sources. Please check your $SOURCES_MIRRORS_FILE\n"
            exit 0
        fi

        echo -e "\n$fast_mirror is the fastest software sources. Do you want to use it? [y/n] \c"  
        read choice

        if [ "$choice" != "y" ]; then
            exit 0
        fi

        backup_sources
        update_sources $fast_mirror
    fi
fi
   
exit 0
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值