![查找 ping 延迟较小的服务器(我的脚本,但任何人都可以用 Perl 编写它吗?)](https://linux22.com/image/16639/%E6%9F%A5%E6%89%BE%20ping%20%E5%BB%B6%E8%BF%9F%E8%BE%83%E5%B0%8F%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%99%A8%EF%BC%88%E6%88%91%E7%9A%84%E8%84%9A%E6%9C%AC%EF%BC%8C%E4%BD%86%E4%BB%BB%E4%BD%95%E4%BA%BA%E9%83%BD%E5%8F%AF%E4%BB%A5%E7%94%A8%20Perl%20%E7%BC%96%E5%86%99%E5%AE%83%E5%90%97%EF%BC%9F%EF%BC%89.png)
我想通过带有脚本的 FTP 下载 OpenBSD,并且我想从我附近的服务器下载它。所以我想选择一个“ping 延迟”低的镜像。我写了一个小脚本,效果很好(仅在 bash/Linux 下测试):
LATESTRELVER=`curl -s 'www.openbsd.org' | fgrep 'The current release is ' | sed 's/OpenBSD /\n/' | sed 's/<\/a>/\n/' | grep "^[0-9]" | head -1`
FASTESTSRV=`curl -s "http://www.openbsd.org/ftp.html#ftp" | fgrep '<a href="ftp://' | sed 's/"ftp:\/\//\n/' | cut -d "/" -f1 | fgrep -v '<a href=' | while read MIRRORSRVS; do ping -c 1 -w 1 $MIRRORSRVS 2>/dev/null | fgrep ' time=' | sed 's/ time=/\n/' | grep ' ms' | sed 's/ ms$/ /' | sed 's/\./ |/' | cut -d "|" -f1 | tr -d '\n'; if [ $? -eq 0 ]; then echo "$MIRRORSRVS"; fi; done | grep "^[0-9]" | sort -un | head -1 | awk '{print $2}'`
LATESTRELVERSHORT=`echo $LATESTRELVER | sed 's/\.//g'`
# NEEDEDARCH=i386
NEEDEDARCH=amd64
wget "$FASTESTSRV/pub/OpenBSD/$LATESTRELVER/$NEEDEDARCH/install$LATESTRELVERSHORT.iso" -O "install$LATESTRELVERSHORT-$NEEDEDARCH.iso"
问:有人可以用 Perl 编写这个脚本吗? :P(有更小、更好的代码吗?)
这个脚本的主要目的例如:不使用国外的带宽。
答案1
选择合适镜子的最简单方法是网络选择。您可以使用该-s 3
选项告诉它选择 3 个最好的服务器。