在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一、Linux wget简介 wget是linux上的命令行的下载工具。这是一个GPL许可证下的自由软件。Linux wget支持HTTP和FTP协议,支持代理服务器和断点续传功能,能够自动递归远程主机的目录,找到合乎条件的文件并将其下载到本地硬盘上;如果必要,Linux wget将恰当地转换页面中的超级连接以在本地生成可浏览的镜像。由于没有交互式界面,Linux wget可在后台运行,截获并忽略HANGUP信号,因此在用户推出登录以后,仍可继续运行。通常,Linux wget用于成批量地下载Internet网站上的文件,或制作远程网站的镜像。 二、实例 下载下载192.168.1.168首页并且显示下载信息Linux wget -d http://192.168.1.168下载192.168.1.168首页并且不显示任何信息wget -q http://192.168.1.168下载filelist.txt中所包含的链接的所有文件wget -i filelist.txt 下载到指定目录wget -P/tmp ftp://user:passwd@url/file把文件file下载到/tmp目录下。Linux wget是一个命令行的下载工具。对于我们这些 Linux 用户来说,几乎每天都在使用它。下面为大家介绍几个有用的 Linux wget 小技巧,可以让你更加高效而灵活的使用 Linux wget。 * 复制代码 代码如下:$ wget -r -np -nd http://example.com/packages/ 这条命令可以下载 http://example.com 网站上 packages 目录中的所有文件。其中,-np 的作用是不遍历父目录,-nd 表示不在本机重新创建目录结构。
* 复制代码 代码如下:$ wget -r -np -nd --accept=iso http://example.com/centos-5/i386/ 与上一条命令相似,但多加了一个 --accept=iso 选项,这指示Linux wget仅下载 i386 目录中所有扩展名为 iso 的文件。你也可以指定多个扩展名,只需用逗号分隔即可。
* 复制代码 代码如下:$ wget -i filename.txt 此命令常用于批量下载的情形,把所有需要下载文件的地址放到 filename.txt 中,然后 Linux wget就会自动为你下载所有文件了。
* 复制代码 代码如下:$ wget -c http://example.com/really-big-file.iso 这里所指定的 -c 选项的作用为断点续传。
* 复制代码 代码如下:$ wget -m -k (-H) http://www.example.com/ 该命令可用来镜像一个网站,Linux wget将对链接进行转换。如果网站中的图像是放在另外的站点,那么可以使用 -H 选项。
三、参数 代码: 复制代码 代码如下:$ wget --helpGNU Wget 1.9.1 ,非交互式的网络文件下载工具。用法:Linux wget[选项]... [URL]...长选项必须用的参数在使用短选项时也是必须的。
启动: -V, --version 显示 Wget 的版本并且退出。 -o, --output-file=文件 将日志消息写入到指定文件中。 -t, --tries=次数 配置重试次数(0 表示无限)。 -nd --no-directories 不创建目录。 --http-user=用户 配置 http 用户名。 --sslcertfile=文件 可选的客户段端证书。 -nr, --dont-remove-listing 不删除“.listing”文件。 -r, --recursive 递归下载。 -A, --accept=列表 接受的文件样式列表,以逗号分隔。 四、实例:用Wget批量下载远程FTP服务器上的文件 现在有了VPS,有了shell,这个过程就无比简单了,借助机房的大带宽,直接机房对机房互传文件看着简直就是一种享受啊 好了,讲一下方法: 1、旧虚拟主机打包备份整站 site.tar.gz 2、在VPS的shell中利用wget下载旧虚拟主机中的site.tar.gz,使用FTP协议 复制代码 代码如下:wget --ftp-user=username --ftp-password=password -m -nh ftp://xxx.xxx.xxx.xxx/xxx/xxx/site.tar.gz wget --ftp-user=username --ftp-password=password -r -m -nh ftp://xxx.xxx.xxx.xxx/xxx/xxx/* 上面就是命令了,FTP用户名密码参数不解释; -r 可选,表示递归下载,如果直接下载整个目录就需要该参数; -m 表示镜像,不解释; -nh表示不生成那一堆层级目录,直接从当前目录开始显示,非常好的参数; 后面是ftp的地址,斜杠后的 * 表示下载该目录下的所有文件,如果只是一个文件,直接输入文件名即可。 五、Q&A A.使用wget工具linux所以的主要版本都自带了Linux wget这个下载工具.bash$ wget http://place.your.url/here它还能控制ftp来下载整个web站点的各级目录,当然,如果你不小心,可能会把整个网站以及其他和他做链接的网站全部下载下来.bash$ wget -m http://target.web.site/subdirectory由于这个工具具有很强的下载能力,所以可以在服务器上把它用作镜像网站的工具.让它按照”robots.txt”的规定来执行.有很多参数用来控制它如何正确地做镜像,可以限制链接的类型和下载文件的类型等等.例如:只下载有联系的链接并且忽略GIF图片: 复制代码 代码如下:bash$ wget -m -L –reject=gif http://target.web.site/subdirectory
Linux wget也能够实现断点续传(-c参数),当然,这种操作是需要远程服务器支持的. 复制代码 代码如下:bash$ wget -c http://the.url.of/incomplete/file 可以把断点续传和镜像功能结合起来,这样可以在以前断过多次的情况下继续镜像一个有大量选择性文件的站点.如何自动实现这个目的我们在后面会讨论得更多.
如果你觉得下载时老是断线会影响你办公的话,你可以限制Linux wget重试的次数. 复制代码 代码如下:bash$ wget -t 5 http://place.your.url/here 这样重试五次后就放弃了.用”-t inf”参数表示永远不放弃.不停地重试.
B.那对于代理服务该怎么办呢?可以使用http代理的参数或者在.wgetrc配置文件里指定一个如何通过代理去下载的途径.但是有这么一个问题,如果通过代理来进行断点续传的话可能会有几次失败.如果有一次通过代理下载的过程发生中断,那么代理服务器上缓存里保存是那个完整的文件拷贝. 所以当你用”wget -c”来下载剩余部分的时候代理服务器查看它的缓存,并错误地认为你已经下载了整个文件.于是就发出了错误的信号.这个时候你可以用添加一个特定的请求参数来促使代理服务器清除他们的缓存: 复制代码 代码如下:bash$ wget -c –header=”Pragma: no-cache” http://place.your.url/here
这个”–header”参数能够以各种数字,各种方式添加。通过它我们可以更改web服务器或者代理服务器的某些属性。有些站点不提供外部连接的文件服务,只有通过同一个站点上其他的一些页面时内容才会被提交。这个时候你可以用加上”Referer:”参数:bash$ wget –header=”Referer: http://coming.from.this/page” http://surfing.to.this/page有些特殊的网站只支持某种特定的浏览器,这个时候可以用”User-Agent:”参数 复制代码 代码如下:bash$ wget –header=”User-Agent: Mozilla/4.0 (compatible; MSIE 5.0;Windows NT; DigExt)” http://msie.only.url/here
C.那我怎么设定下载时间呢? D.下载要花很多时间? 前两列指定了每天一到晚上11点就开始用Linux wget下载,一到早上6点就停止一切Linux wget下载。第三四列的*表示每个月的每一天都执行这个任务。第五列则指定了一个星期的哪几天来执行这个程序。 –”1-5″表示从星期一到星期五。这样在每个工作日的晚上11点,下载工作开始,到了上午的6点,任何的Linux wget任务就被停掉了。你可以用下面的命令来执行 复制代码 代码如下:crontab:bash$ crontab crontab.txt
Linux wget的这个”-N”参数将会检查目标文件的时间戳,如果匹配了,下载程序就会停止,因为它说明整个文件已经下载完全了。用”crontab -r”可以删除这个计划安排。我已经多次采用这种方法,通过共享的电话拨号来下载过很多的ISO镜像文件,还是比较实用的。 E.如何下载动态变化的网页 复制代码 代码如下:bash$ wget http://lwn.net/bigpage.php3
我办公室里的网络条件经常很差,给我的下载带了很大的麻烦,所以我写了个简单的脚本来检测动态页面是否已经完全更新了. 复制代码 代码如下:#!/bin/bash #create it if absent touch bigpage.php3 #check if we got the whole thing while ! grep -qi bigpage.php3 do rm -f bigpage.php3 #download LWN in one big page wget http://lwn.net/bigpage.php3 done 这个脚本能够保证持续的下载该网页,直到网页里面出现了" ",这就表示该文件已经完全更新了. F.对于ssl和Cookies怎么办? 复制代码 代码如下:bash$ cookie=$( grep nytimes ~/.lynx_cookies |awk {printf(”%s=%s;”,$6,$7)} ) 就可以构造一个请求Cookie来下载http://www.nytimes.com上的内容.当然,你要已经用这个浏览器在该网站上完成注册.w3m使用了一种不同的,更小巧的Cookie文件格式:复制代码 代码如下:bash$ cookie=$( grep nytimes ~/.w3m/cookie |awk {printf(”%s=%s;”,$2,$3)} ) 现在就可以用这种方法来下载了: 复制代码 代码如下:bash$ wget –header=”Cookie: $cookie” http://www.nytimes.com/reuters/technology/tech-tech-supercomput.html 或者用curl工具: 复制代码 代码如下:bash$ curl -v -b $cookie -o supercomp.html http://www.nytimes.com/reuters/technology/tech-tech-supercomput.htm
G.如何建立地址列表? 复制代码 代码如下:bash$ lynx -dump ftp://ftp.ssc.com/pub/lg/ |grep gz$ |tail -10 |awk {print $2} > urllist.txt lynx的输出结果可以被各种GNU文本处理工具过虑.在上面的例子里,我们的链接地址是以”gz”结尾的,并且把最后10个文件地址放到urllist.txt文件里.然后我们可以写一个简单的bash脚本来自动下载这个文件里的目标文件: 复制代码 代码如下:bash$ for x in $(cat urllist.txt) > do > wget $x > done 这样我们就能够成功下载Linux Gazette网站(ftp://ftp.ssc.com/pub/lg/)上的最新10个论题. H.扩大使用的带宽 复制代码 代码如下:url1=http://ftp.eecs.umich.edu/pub/linux/mandrake/iso/Mandrake80-inst.iso url2=http://ftp.rpmfind.net/linux/Mandrake/iso/Mandrake80-inst.iso url3=http://ftp.wayne.edu/linux/mandrake/iso/Mandrake80-inst.iso 这个文件的长度是677281792个字节,所以用curl程序加”–range”参数来建立三个同时进行的下载: 复制代码 代码如下:bash$ curl -r 0-199999999 -o mdk-iso.part1 $url1 & bash$ curl -r 200000000-399999999 -o mdk-iso.part2 $url2 & bash$ curl -r 400000000- -o mdk-iso.part3 $url3 & 这样就创建了三个后台进程.每个进程从不同的服务器传输这个ISO文件的不同部分.这个”-r”参数指定目标文件的字节范围.当这三个 进程结束后,用一个简单的cat命令来把这三个文件衔接起来– cat mdk-iso.part? > mdk-80.iso.(强烈建议在刻盘之前先检查md5) 你也可以用”–verbose”参数来使每个curl进程都有自己的窗口来显示传输的过程. |
请发表评论