=Start=
缘由:
今天在服务器上批量下载文件的时候用到了wget命令,期间碰到了一些小问题,在解决这些问题的过程中总结了一些常用的wget命令选项,分别应对不同的场景,在此记录一下,方便后期查阅。
参考说明:
wget -O save_file_name $URL #设置下载文件保存在本地的名字 wget -i download_list.txt #(批量)下载文件中出现的目标列表 wget --no-clobber $URL #(-nc)拒绝下载同一文件 wget --timestamping $URL #(-N)开启时间戳机制,wget会下载远程时间戳更新的文件 wget -c $URL_old #断点续传,继续下载 wget -b $URL #后台下载 wget --timeout=5 $URL #设置超时时间 wget --limit-rate=100k $URL #限制下载速度 wget --wait=20 --limit-rate=20K $URL wget --random-wait --limit-rate=20K wget --http-user=narad --http-password=password $URL wget --ftp-user=narad --ftp-password=password $URL wget --no-check-certificate $URL #用于下载HTTPS链接 wget -U Mozilla $URL #手动设置User-Agent
其中的「-nc」选项对于某些场景来说非常实用:可以避免重复下载!
在不知道这个选项之前,我自己都是这么用的:
# 对 wget 的简单封装,避免重复下载 function download() { if [[ -f ${1##*/} ]]; then : else wget $1 fi }
还有「-N」选项,使用时间戳机制,在远程文件时间戳更新的情况下进行下载;之前我是通过curl命令先查询远程文件的大小和本地已下载文件的大小进行比对,存在差异时才进行更新(个人感觉这个应该要比wget命令的「-N」选项要准确些),之前在文章「如何实时更新一些数据文件?」中有过说明:
oldSize=`ls -l qqwry.dat.zip | awk '{print $5}'` newSize=`curl -s -I http://www.newxing.com/D6C47427E608/qqwry.dat | grep Content-Length` if [$oldSize != $newSize];then #这里其实既可以作为字符串比较也可以作为数字进行比较{只要两者不同即可} wget -O qqwry.dat.zip http://www.newxing.com/D6C47427E608/qqwry.dat unzip -o qqwry.dat.zip fi
常用的wget命令还有很多的「黑科技」,大家可以根据自身的实际需求进行挖掘、使用。
参考链接:
- http://www.tecmint.com/10-wget-command-examples-in-linux/
- http://www.linuxjournal.com/content/downloading-entire-web-site-wget
- http://roclinux.cn/?p=2107
- =
- http://www.kossboss.com/linux—wget-full-website
- http://linuxreviews.org/quicktips/wget/
- http://www.thegeekstuff.com/2009/09/the-ultimate-wget-download-guide-with-15-awesome-examples/
- http://stackoverflow.com/questions/8755229/how-to-download-all-files-but-not-html-from-a-website-using-wget
- http://stackoverflow.com/questions/273743/using-wget-to-recursively-fetch-a-directory-with-arbitrary-files-in-it
=END=
《 “wget命令的使用” 》 有 5 条评论
wget 结合 df 根据磁盘空间决定是否继续下载
http://www.factj.com/archives/792.html
`
for U in `cat seeds/filelist`;do
if [ `df -h | grep 20G | awk ‘{print $5}’ | awk -F% ‘{if($1>90){print “A”}else{print “B”}}’`”x” = “Bx” ];then
wget -c “$U” –content-disposition
fi
done
`
Curl命令的使用
http://blog.51yip.com/linux/1049.html
http://man.linuxde.net/curl
http://www.ruanyifeng.com/blog/2011/09/curl.html
将curl命令转换成相同功能的Python/PHP/JavaScript代码(convert curl commands to python, javascript, php)
https://github.com/NickCarneiro/curlconverter
https://curl.trillworks.com/
GNU Wget 安全漏洞预警
https://mp.weixin.qq.com/s/uhwDZx_Tci1D9tXEk-vmCA
https://www.viestintavirasto.fi/en/cybersecurity/vulnerabilities/2017/haavoittuvuus-2017-037.html
`
2017年10月26日,GNU Wget发布了1.19.2之前版本的缓冲区溢出漏洞公告,存在漏洞的wget可能受到恶意HTTP响应攻击,导致拒绝服务和恶意代码执行。
目前网上已经有该漏洞细节和测试代码,建议尽快更新到新的版本和参考其他缓解措施。
`
汇集各发行版安全公告列表:
https://security.archlinux.org/CVE-2017-13089
https://security.archlinux.org/CVE-2017-13090
如何用nc创建一个临时Web服务
`
步骤①监听端口
[root@sec-test ~]# nc -lk 8080
步骤②发送数据
[ixyzero@localhost ~]$ curl -X POST http://192.168.241.17:8080/ -d “user=hi”
[ixyzero@localhost ~]$ curl -X GET http://192.168.241.17:8080/users?a=xxx
步骤③检查发送的数据
[root@sec-test ~]# nc -lk 8080
POST / HTTP/1.1
Host: 192.168.241.17:8080
User-Agent: curl/7.54.0
Accept: */*
Content-Length: 7
Content-Type: application/x-www-form-urlencoded
user=hi
GET /users?a=xxx HTTP/1.1
Host: 192.168.241.17:8080
User-Agent: curl/7.54.0
Accept: */*
`