最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Shell腳本實現自動檢測修改最快的Ubuntu軟件源

 更新時間:2014年10月15日 13:24:54   投稿:junjie  
這篇文章主要介紹了Shell腳本實現自動檢測修改最快的Ubuntu軟件源,本文先是講解了實現的思路,并給了實現腳本源碼,需要的朋友可以參考下

每次裝好Ubuntu,對于大多數用戶來說,首先要做的事就是手動修改/etc/apt/sources.list文件,將里面的官方軟件源地址更換為自己學?;蛘吖镜能浖础.斘覀兏鼡Q一個工作環(huán)境后,可能伴隨著又要替換舊的軟件源地址。

筆者覺得這樣每次手動更改軟件源是一件及其麻煩重復的勞動,于是編寫了一個自動更新最快軟件源的腳本,從此一勞永逸。

原理

最直觀的想法就是:對各個軟件源進行測速,選出最快的那個,之后將其替換為新的軟件源。

那么如何對各個軟件源測速呢?有兩種方法:

一、用ping命令 測量其平均響應時間 選出響應時間最短的那個

二、用wget命令 測量下載一個文件的總時間 選出耗時最少的那個

那么這兩種方法有什么區(qū)別呢?我們該用哪個呢?

前者選出的是響應時間最優(yōu)的,后者選出的是下載速度最快的。我們都知道軟件源的作用是供客戶端下載更新軟件,所以當然是后者的方法更為準確,但筆者最終選擇了前者作為測速方案,因為前者的用戶體驗更好且代碼簡單易懂。設想,如果我們采用后者,那么需要從每個軟件源下載一個文件,并且這個文件不能太小,否則無法區(qū)分他們的速度,那么一個顯而易見的情況是腳本需要運行較長的時間。

雖然存在某些軟件源可能響應時間很短,而下載速度卻很慢的情況,但經過筆者的多次實驗,發(fā)現這樣的情況并不常見。

實現

首先測試用戶網絡狀態(tài)

利用

復制代碼 代碼如下:

local speed=`ping -W1 -c1 www.baidu.com 2> /dev/null | grep "^rtt" |  cut -d '/' -f5`

取出其平均響應時間 如果speed == “” 則說明網絡不通,提示用戶,且退出程序。 否則,說明網絡正常,繼續(xù)執(zhí)行。

檢測軟件源列表文件是否存在

復制代碼 代碼如下:

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 `

通過取已排序列表中的第一條,選出最快的軟件源

詢問用戶是否要使用該軟件源

用戶確認后,先對用戶之前的軟件源進行備份,然后再替換。

getfastmirror.sh腳本源代碼:

復制代碼 代碼如下:

#!/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_FILEn"
            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

sources_mirrors.list源碼:

復制代碼 代碼如下:

http://cn.archive.ubuntu.com/ubuntu/
http://run.hit.edu.cn/ubuntu/
http://mirrors.sohu.com/ubuntu/
http://mirrors.163.com/ubuntu/
http://mirrors.tuna.tsinghua.edu.cn/ubuntu/
http://mirrors.ustc.edu.cn/ubuntu/
http://mirrors.yun-idc.com/ubuntu/
http://ubuntu.cn99.com/ubuntu/

相關文章

  • Bash中test命令的使用

    Bash中test命令的使用

    本文主要介紹了Bash中test命令的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • linux下怎么解壓.tar.gz .tar.bz2命令

    linux下怎么解壓.tar.gz .tar.bz2命令

    這篇文章主要介紹了linux下解壓.tar.gz .tar.bz2命令的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-12-12
  • 淺談Linux環(huán)境變量與系統(tǒng)編程

    淺談Linux環(huán)境變量與系統(tǒng)編程

    本文主要介紹了淺談Linux環(huán)境變量與系統(tǒng)編程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-05-05
  • shell腳本實現定時檢查應用狀態(tài)步驟

    shell腳本實現定時檢查應用狀態(tài)步驟

    這篇文章主要為大家介紹了shell腳本實現定時檢查應用狀態(tài)步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • linux ls命令教程及l(fā)s命令使用方法

    linux ls命令教程及l(fā)s命令使用方法

    學習linux這么久了,最常用的命令莫屬 ls命令了,今天就總結下ls命令的用法與經驗技巧。感興趣的朋友一起看看吧
    2017-08-08
  • Linux 壓縮某個文件夾的實現方法

    Linux 壓縮某個文件夾的實現方法

    這篇文章主要介紹了Linux 壓縮某個文件夾的實現方法的相關資料,希望通過本文能幫助到大家,讓大家實現這樣的功能,需要的朋友可以參考下
    2017-10-10
  • Linux中sftp常用命令整理

    Linux中sftp常用命令整理

    sftp命令是一款交互式的文件傳輸程序,不僅對傳輸的所有信息使用ssh加密,它還支持公鑰認證和壓縮等功能。這篇文章整理了Linux中sftp的常用命令,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • Shell腳本實戰(zhàn)之DNS主從同步腳本實例

    Shell腳本實戰(zhàn)之DNS主從同步腳本實例

    這篇文章主要介紹了Shell腳本實戰(zhàn)之DNS主從同步腳本實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-10-10
  • 解決VirtualBox中Ubuntu 14.04屏幕分辨率不能設置的問題

    解決VirtualBox中Ubuntu 14.04屏幕分辨率不能設置的問題

    下面小編就為大家?guī)硪黄鉀QVirtualBox中Ubuntu 14.04屏幕分辨率不能設置的問題。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Shell腳本經典之Fork炸彈的分析與預防

    Shell腳本經典之Fork炸彈的分析與預防

    這篇文章主要給大家介紹了Shell腳本經典之Fork炸彈的分析與預防,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-06-06

最新評論

隆回县| 离岛区| 射洪县| 华池县| 吉林市| 铁力市| 玉田县| 慈溪市| 稷山县| 张掖市| 桦甸市| 澄城县| 石柱| 定襄县| 普兰县| 凤凰县| 嫩江县| 新营市| 互助| 廉江市| 交城县| 资中县| 大连市| 盐亭县| 汾西县| 渝中区| 宜都市| 两当县| 玉环县| 祁阳县| 泽库县| 宣化县| 枝江市| 正安县| 霸州市| 原阳县| 绥阳县| 宁蒗| 大安市| 鹤壁市| 富顺县|