其实你不懂wget的心

本原创文章属于《Linux大棚》博客,博客地址为http://roclinux.cn。文章作者为rocrocket。

为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅。

===

[正文开始]

wget_1

wget用英语定义就是the non-interactive network downloader,翻译过来就是非交互的网络下载器。

1 wget都支持什么协议的下载?

wget支持HTTP、HTTPS和FTP协议的下载,其中也包括通过HTTP代理的下载。看起来支持的协议没有你想想的多,但其实这已足够,我相信你很少使用除这些协议之外的协议来进行下载吧。

2 wget有哪些特色之处?简单介绍一下。

wget能够跟踪HTML文件和XHTML文件,从而使得你可以下载整个站点的文件,然后离线阅读。当然这个功能并不是特别常用,因为几乎所有站点都会包含外链,一旦你用wget进行整站的下载,它也会傻傻的去下载外链站点的内容,这样一来,子子孙孙无穷尽也。

wget是个非常遵守Robot Exclusion Standard(robots.txt)标准的工具。

wget支持慢速网络下载和不稳定网络的下载。当因为网络不稳定而导致下载失败时,wget会重试直到把目标文件下载下来为止。

wget支持断点续传功能,当你下载的很大的文件在中途失败时,这项功能会很有用处。

3 对于使用wget选项,有什么建议?

由于wget是使用getopt函数来处理选项和参数的,因此wget既支持长格式的选项,也支持短格式的选项,他们大部分是一一对应的关系。但是我不建议大家使用短选项。

当某个选项有参数时,你甚至可以在短选项和参数之间不加空格。比如-o log可以写成-olog。但是,你知道的,这也是不建议的。

如果你连续使用了多个短选项,且这些短选项不需要加参数,那么可以将他们组合在一起。比如-d -r -c可以写成-drc。恩,这是被建议的。呵呵

4 wget有什么潜规则不?

当你使用wget时,请务必查看/etc/wgetrc文件和家目录下的.wgetrc文件,先搞清楚里面都设置了什么,再来使用wget命令不迟,否则,你早晚会吃大亏的。不是危言耸听哦。

某些选项还可以接受用逗号隔开的参数。比如-X(大写的x)选项,它是用来设定“不希望下载”的目录列表。你可以用逗号把不希望下载的目录一个一个写上。比如“wget -X wukong , bajie”,这样wget心里就有数了,他知道wukong目录和bajie目录都是不用下载的。其实你也可以在.wgetrc文件中设置“不希望下载”的目录列表,格式是这样的:

exclude_directories=wukong,bajie

于是,你不必在wget命令上设置,就可以实现“不下载”wukong和bajie目录。

当然,如果某天你下载东西时,发现总有几个目录下载不下来,你可要想到,有可能是其他人设置了.wgetrc造成的哦!当然你还要再去/etc/wgetrc文件中再查看一下,那里也是一个可疑的地方。

还有一个小技巧,也可以避免这种误会(别人设置了exclude_directories,而你却不知道),那就是在你使用wget时,这样写:

wget -r -X ” -X wukong,bajie ftp://localhost

使用-X ”的目的就是去除.wgetrc和/etc/wgetrc的作用,然后再用-X wukong,bajie设置,就可以踏踏实实的保证不下载wukong和bajie目录,而其他目录绝不会受影响。

小总结一下:.wgetrc和-X和/etc/wgetrc的设置都是属于平等关系,三者在使用时会进行并集。而在设置了-X ”时,就完全去掉了.wgetrc和/etc/wgetrc对于目录限制的作用。

5 wget不是只能下单个文件么?怎么能下目录呢?

你也太小看wget了。加上-r选项你试试,这就是传说中的“递归下载”。呵呵

6 wget命令的版本是多少?

使用wget -V(注意是大写的v哦)就可以查看了,或者是–version。我的是1.11.4(Red Hat Modified)

7 我怎么能让wget进入后台执行呢?

使用–background!启动的wget会立即进入后台执行。如果没有使用-o选项设置日志文件的话,缺省是记录在当前目录的wget-log文件中,其实这个日志就是当初输出到屏幕上的那些东东。更重要的一点是,即使你的远程终端连接被ctrl-D或exit了,也不会影响wget的后台执行。

有人会问,我使用wget -r ftp://localhost/a &是不是也可以进入后台阿。你可以试试看,这样写不行的。你会发现即使瞬间看到命令提示符了,但也会瞬间被刷新了的进度条所重新覆盖。而且你使用ctrl-c还无法终止。只能kill进程来杀掉。所以说,如果你想进入后台执行,还是老老实实的使用–background吧!

8 wget在下载网站时如果遇到robots.txt全禁怎么办?

这时候,你可以使用“–execute 选项加参数”,它和把参数放到.wgetrc里的效果是一样的。你使用–execute robots=off就可以躲开robots.txt的追捕喽!

wget_2

上次提到了wget可以避免robots.txt的事情。这篇文章就做个试验,让大家亲身体验。跟着我的思路来走。

1 我们搭建了一个临时的apache-1.3.41服务器,端口号设置成了61212。网页文件所在路径为/home/rocrocket/program/apache-1.3.41-all/htdocs,我们简称为htdocs目录。

2 在htdocs目录中,我们建立一个index.html文件,内容大致如下:

$ cat -n index.html

1  <html>
2          <head>
3                  <title>rocrocket</title>
4          </head>
5          <body>
6                  <ul>
7                          <li><a href=rocrocket-1.html>rocrocket-1</li>
8                          <li><a href=rocrocket-2.html>rocrocket-2</li>
9                  </ul>
10          </body>
11  </html>

通过网页方式访问的话,效果是这样的:

3 类似的建立如下文件:

$ ls -1
index.html
robots.txt
roc.html
rocrocket-1-1.html
rocrocket-1-2.html
rocrocket-1.html
rocrocket-2-1.html
rocrocket-2-2.html
rocrocket-2.html

根据文件编号,你应该能看出他们之间的调用关系。

4 建立简单的robots.txt文件:

$ cat robots.txt
User-agent: *
Disallow: rocrocket-2.html

这个文件的内容就是要屏蔽rocrocket-2文件的下载和spider。

5 我们用wget来下载这个测试站点:

wget -r http://my-test.cn:61212/

$ ls -1
index.html
robots.txt
rocrocket-1-1.html
rocrocket-1-2.html
rocrocket-1.html

看!下载到的包含了robots.txt文件,但没有包含rocrocket-2及其相关的文件。

可见,robots.txt生效了,wget遵守了robots.txt的规则!

6 我如何突破robots.txt的限制呢?

使用–execute选项就可以,这个选项的作用是将其后的参数模拟“放到.wgetrc中的执行效果”。

$ wget -r --execute robots=off http://jx-nsop-test0.jx:61212/

$ ls -1
index.html
rocrocket-1-1.html
rocrocket-1-2.html
rocrocket-1.html
rocrocket-2-1.html
rocrocket-2-2.html
rocrocket-2.html

看,rocrocket-2系列的文件也都顺利的下载下来了:D

wget_3

当你深入学习wget时,你会发现它的选项实在是太多了,错综复杂乱如麻。今天,我们就针对常用的目录选项展开讨论。

1 -r选项

这个选项用于下载远程的文件夹,但是情况没有那么简单,对于ftp协议下载来讲,你如果使用如下命令下载

wget -r ftp://my.test.server:/home/wupengchong/img

那么,实际在当前目录下会生成my.test.server/home/wupengchong/img目录结构,可见直接使用-r选项,默认会创建一域名和绝对路径组成的目录结构的。这或许不是我们的初衷,继续向下看。

2 -nd选项

即–no-directories。当我们下载远程的数据时,可以要求wget只下载文件,不下载文件夹,所有下载的文件都平铺在当前目录下。

这时,敏锐的读者会问:“如果下载到不同路径的同名文件的话,那用-nd岂不是会造成同名文件覆盖的问题?”。答案是不会的,因为wget在下载文件时,如果当前目录下有同名文件,则会默认在新下载的文件后加上“.1”、“.2” …等标识,以示区别。

3 -x选项

即–force-directories。这个选项和–no-directories是完全相反的。–no-directories是要求绝 对不能下载和创建任何文件夹,同时所有文件都平铺在当前目录中。而–force-directories选项则要求处处都要有文件夹,即使是wget
-x http://fly.srk.fer.hr/home/robots.txt这样下载单独普通文件的命令,也会在当前目录下创建fly.srk.fer.hr/home目录结构,然后将robots.txt文件下载到fly.srk.fer.hr/home里面。

4 -nH选项

即–no-host-directories。大家已经知道了在使用wget -r命令下载目录时,默认会创建一个my.test.server文件夹的。使用-nH选项就是来禁止这种默认行为。

所以,当你用wget -r -nH ftp://my.test.server:/home/wupengchong/img命令下载数据时,会在当前目录下创建home/wupengchong/img目录结构,看,my.test.server文件夹已经不见了。

5 –protocol-directories选项

它的作用是先创建一个以协议名为名称的文件夹,例如:

wget -r –protocol-directories ftp://my.test.server:/home/wupengchong/img

则会创建如下目录结构ftp/my.test.server/home/wupengchong/img

这个选项,对于那些希望通过协议类型来区分数据的同学比较有用。

6 –cut-dirs=number选项

这个选项比较常用,它表示下载数据时,在本地创建目录时,忽略多少层目录结构。

我们拿ftp://ftp.xemacs.org/pub/xemacs/为例,如果只使用-r选项,那么本地会创建ftp.xemacs.org /pub/xemacs/目录结构,如果再加上-nH选项,则留下来的目录结构是pub/xemacs/。此处就是–cut-dirs选项起作用的地方 了。我们看一个表格吧:

只用-r选项   -> ftp.xemacs.org/pub/xemacs/

-nH -> pub/xemacs/

-nH –cut-dirs=1 -> xemacs/

-nH –cut-dirs=2  -> .

–cut-dirs=1      -> ftp.xemacs.org/xemacs/

7 -P选项

即–directory-prefix=prefix,所设置的这个prefix路径,则是用来代替当前目录的,所有本应下载到当前目录的数据都会被下载到prefix所设置的目录中去。

wget_4

使用wget时,会遇到各种突发事件。今天来讲一个。

一个800MB的大文件,在远程用wget下载,到一半时,文件被更名、被删除、被移动了,wget会发现么? 它会如何抱怨?还是傻傻地顺序读下去,直到读完800MB为止?(你可以随便猜,但真相只有一个…呵呵)

第一步:创建大文件

$ dd if=/dev/zero of=roc-big-file  bs=8192 count=100000

其中if是数据输入源,of是数据输出目标,bs表示每次读写的缓冲区字节数,count是要读取多少次bs。

这条命令就是用来生成一个大小接近800MB的文件,命名为roc-big-file。

第二步:从另一台机器使用wget进行下载,限速在20k吧,要是不限速,刷刷几下就下完了,都来不及测试了该。呵呵

$ wget –limit-rate=20k ftp://yourdomain:/home/wupengchong/test/wgettest/roc-big-file

第三步:这步就是要搞点恶作剧了。我们先更名!

$ mv roc-big-file roc-big-file1

结果没问题,wget继续稳定运行。

第四步:继续恶作剧。我们移动它。

$ mkdir tmpdir

$ mv roc-big-file1 tmpdir/

没问题,稳定运行。

第五步:我们删除它!(拼了,真不信wget能这么鲁棒)

$ cd tmpdir/

$ rm -f roc-big-file1

继续稳定运行…. 只是你看不到这个文件了,从文件所在文件夹的大小也看不到变化了。

结论:

只要不是网络故障、远程文件系统故障或硬件故障,wget的鲁棒性是值得相信的。

其实,真正理解Linux文件系统的同学会知道,这并不是wget的鲁棒性,而是Linux文件系统的鲁棒性保证的。

over~

wget_5

上篇文章,给了大家不少误会,对于明白原理的朋友,不说自明;但对于不太精通Linux系统原理的朋友,上一篇的表述方法刚刚好。

今天我们继续了解wget的心,看看还有哪些体贴的功能,我们平时没有接触到的。

1 -t选项

即–tries=number,用于设置wget下载时重试的次数,当设置为0(数字零)或inf时表示无限次重试。默认的重试次数是20次。

不过wget也不是在什么情况下都会傻傻的重试的,例如在发生“connection refused”或“not found”时,wget会立即退出,不会进行重试。

2 -o选项

即–output-file=logfile,wget运行过程中输出到标准输出的内容都会被写到所设置的logfile文件中。

3 -O选项

即–output-document-file,表示wget下载的所有文件的内容会被依次追加写到所设置的file文件中,而不会创建原本的文件。在下载单独文件时使用-O选项,可以避免wget下载同名文件时默认写到“.1”后缀文件中的问题。

4 -N选项

即–timestamping,表示开启时间戳机制,wget会下载远程时间戳更新的文件。

5 -nc选项

即–no-clobber选项。

在同一个目录中,如果一个文件被多次下载,那么wget的处理方式会取决于几个重要选项,这其中就包括了-nc选项。

当多次下载同一个文件时,本次文件会被覆盖,或者被重写,或者被保护,这都是有可能的。

当使用wget多次下载同一个文件,且不使用-N,-nc或-r时,那么wget会默认在第二次下载时自动在文件名后加上“.1”后缀,第三次下载时加上“.2”后缀,以此类推。

但当我们使用了-nc选项时,wget不会使用“.1/.2”的策略,而是拒绝下载同一文件(即使文件内容是更新的了)。这个功能用于有的网页被同时指向了很多遍,那么使用-nc可以避免多次下载。

当使用wget且使用-r选项,但不使用-N选项或-nc选项时,重新下载同名文件时,当远程文件的修改时间是更新的了,那么wget会选择覆盖当前目录已有的老文件,此时使用-nc可以禁止wget这样做。(但当远程文件的修改时间并不新,那么wget就会拒绝下载。)

当使用wget且使用-N选项时,是否下载同名文件,完全取决于远程文件和本地文件的时间戳以及文件大小。-nc选项是不允许和-N选项同时设置的。如果你同时使用了-N和-nc选项,会得到这样的错误提示“Can’t timestamp and not clobber old files at the same time.”

6 -c选项

即–continue选项,这就是大名鼎鼎的“断点续传”。无论你之前使用哪个下载工具下载了一半的文件,都可以用wget来继续下载此文件。比如:

wget -c ftp://sunsite.doc.ic.ac.uk/ls-lR.Z

当前目录已有一个ls-lR.Z文件存在,wget将假定这是一个下载了一半的文件,然后提取本地文件的文件大小,并根据此值请求从远程文件的相应文件大小处开始继续下载。

你会发现,其实wget的此断点续传策略是有隐患的,因为如果远程文件的开头部分被进行了修改,wget在进行断点续传时是意识不到这一点的,它只会傻傻的从已传文件大小之后的部分继续下载。所以使用-c选项断点续传之后,务必进行md5校验。

7 –limit-rate=amount选项

此选项适用于限速的,将速度限制在amount bytes/second,  当然也可以用单位k/m来表示,例如–limit-rate=20k将会限制速度在20KB/s。

请注意,wget实现限速的原理是在一次网络读取动作之后sleep一个特定时间段,以让平均的网络读速度降到限制值,这个策略最终会使TCP传输速度降到限制值左右。所以在传输超小文件时,可能无法达到限速的作用。

8 -w选项

即–wait=seconds选项,用于设置wget每两个请求之间间隔的秒数。这个选项很有用处,可以降低远程服务器的负载。你除了可以直接设置秒数,还可以加上m表示分钟、h表示小时、d表示天。

9 –waitretry=seconds选项

用于设置请求重试秒数。wget采用的是线性递增等待的方式,如果你设置的是10秒,那么第一次请求失败后,会等待1秒;第二次请求失败会等待2秒;直到最后达到10秒等待时间为止。所以当到达最后一次时,时间已经过了1+2+…+10=55秒。

over~

wget_others

再转点儿别的

wget 是一个命令行的下载工具。对于我们这些 Linux 用户来说,几乎每天都在使用它。下面为大家介绍几个有用的 wget 小技巧,可以让你更加高效而灵活的使用 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 选项,这指示 wget 仅下载 i386 目录中所有扩展名为 iso 的文件。你也可以指定多个扩展名,只需用逗号分隔即可。

  • $ wget -i filename.txt

此命令常用于批量下载的情形,把所有需要下载文件的地址放到 filename.txt 中,然后 wget 就会自动为你下载所有文件了。

  • $ wget -c http://example.com/really-big-file.iso

这里所指定的 -c 选项的作用为断点续传。

  • $ wget -m -k (-H) http://www.example.com/

该命令可用来镜像一个网站,wget 将对链接进行转换。如果网站中的图像是放在另外的站点,那么可以使用 -H 选项。

http://linuxtoy.org/archives/wget-tips.html

时间: 2024-09-23 06:19:33

其实你不懂wget的心的相关文章

linux wget实现断点下载整个文件目录

wget介绍 wget 可以跟踪HTML页面上的链接依次下载来创建远程服务器的本地版本,完全重建原始站点的目录结构.这又常被称作"递归下载".在递归下载的时候,wget 遵循Robot Exclusion标准(/robots.txt). wget可以在下载的同时,将链接转换成指向本地文件,以方便离线浏览. wget 非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性.如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕.如果是服务器打断下载过程,它会再次联到

让你的PPT 3秒钟能被人看懂!

PPT的清楚表达,有三个层次的要求: 1.清晰可见. 这是最基本的要求.如果一页PPT看上去一团乱麻,密密匝匝的小字放在那儿,听众看都懒得看,怎么能让人家一下子记住内容呢?PPT的字体.字号.颜色都要清晰可见,保证听众不但看得见,而且看得清. 2.容易理解. 讲一遍大家就能听明白.这主要体现在语言方面,既不要之乎者也,也不要从句套从句,让别人雾里看花.水中望月.然后自己感慨一句:其实你不懂我的心.奉劝一句别绕那么多弯弯或者朦胧诗,弄个明明白白我的心多好. 3.体现个性. 前面提到很多方法可以体现

最懂人心的大数据

不要再去问别人爱你有多深了,月亮也代表不了什么意思.你希望得到最权威的答案吗?那不如尝试一下大数据吧! 深谙此道的人都能赢得江山和美人,比如美国的奈飞(Netflix)公司,这些年就凭着这个法宝赚得盆满钵满.这家主营电影电视剧的美国公司本来是靠出租DVD影碟赚钱的,在这个网络视频当道的年代,人人都跑去看Youtube了,他们股价大跌,差点倒闭.所幸他们及时明白了"大数据知人心"的道理,搞起了在线视频点播,迅速再次飞黄腾达. 那么,大数据都帮了他们什么呢?借着从亚马逊数据中心租来的服务器

不容错过!17位好莱坞顶级女星的“前世今生”

如果说红地毯上的好莱坞男星是千篇一律的西装革履走稳重低调路线,那女星一定是争奇斗艳势将红地毯作为第二战场.那当今的好莱坞,哪些女星能名副其实摘得花魁呢?我们为您揭晓. 1. 格温妮丝·帕特洛 (Gwyneth Paltrow) 经典重现:<完美的谋杀案>.<双面情人> 一炮成名:<钢铁侠> 获奖影片:凭借<莎翁情史>荣获第71届奥斯卡最佳女演员奖 火热主打:<两个情人> 最新开拍:日前<钢铁侠2>正在火热开拍中,各位主要演员也已就位.

《艺术人生》十年梳理百位嘉宾节目串烧

2001年嘉宾蒋雯丽做客<艺术人生>节目现场 2001年嘉宾濮存昕做客<艺术人生>现场 2008年孙红雷做客<艺术人生>现场挑起霹雳舞 2009年3月乐队纵贯线做客<艺术人生>栏目组:现场合唱 新浪娱乐讯 十年来,百余期节目,近千位嘉宾都曾在<艺术人生>的舞台有过精彩的瞬间.在之前播出的精编节目中,<艺术人生>也分别为大家集锦了赵本山.刘欢之欢声笑语."四小花旦"的花样年华,还有<西游记>.<红楼

央视湖南元宵晚会闹元宵,四美争艳央视舞台

[元宵晚会四美争艳]"四美"秦岚.佟丽娅.马苏.王丽坤:"老腊肉"潘长江.沙溢.沈腾.周炜:歌手张杰.王铮亮等作为每年央视春晚的"姊妹篇",元宵晚会的影响力.关注度和收视率都不容忽略.主持人朱军.撒贝宁.李思思.毕福剑.朱迅.尼格买提等将继续陪伴大家,并将分为两组展开对垒,一起欢乐闹元宵.元宵晚会将于今晚8点在央视综合频道和综艺频道并机播出. 元宵晚会四美争艳2015央视和湖南元宵晚会节目单 由秦岚.佟丽娅.马苏.王丽坤四位影视演员客串表演的舞蹈

互联网金融日报:四大银行调低支付宝转账额度

3月24日:工农建中四大行先后调低 支付宝转账额度,一行三会酝酿互联网金融负面清单:P2P网贷平台鱼龙混杂,有的人自己借钱自己花:央行重申,对于互联网金融,鼓励态度没有改变,也不会改变~<互联网金融日报>,每天看我就足够~央行回应互联网金融监管:鼓励态度没有改变也不会改变 新华网央行缘何暂停虚拟信用卡和二维码线下支付?对互联网金融的发展究竟持怎样的态度?对这一领域的监管将走向何方?央行人士在接受采访时强调:鼓励互联网 金融发展创新的理念.方向.政策始终没有改变,也不会改变.强调消费者权益保护.

指尖上的一代,从李宁的失败看如何搞定90后?

中介交易 SEO诊断 淘宝客 云主机 技术大厅 如何在移动互联网时代搞定这些90后?如果仅仅把他们看成"非主流"."脑残",那就大错特错了,90后不是另一代人,而是另一类人.90后是完全属于移动互联网一代. 一夜之间,似乎已经是90后的天下了.这群在国内经济进入繁荣期之后出生的一代人,正逐渐成为劳动力和消费市场的主力,有如8.9点钟的太阳般挂在天空受众人瞩目.但作为同龄人的李宁(91年创办的李宁公司,到今天已经21岁了)却状况不妙前途渺茫,似乎缺乏90后的青春活力而

疯狂猜图答案不给力?疯狂猜歌答案来袭

自从<疯狂猜图>火了之后,各种"猜字系"的游戏层出不穷,猜成语.猜商标.猜游戏等等,无所不猜. 近日,一款<http://www.aliyun.com/zixun/aggregation/12770.html">疯狂猜歌开心网>的游戏大受安卓玩家追捧,猜还没过瘾的童鞋,不妨来试试疯狂猜歌,听着那些熟悉的旋律,你都能一一破解吗,小编给大家带来了<疯狂猜歌开心版>的完全攻略和细分的英文歌攻略,大家一起来看看吧. 1 流行 小情歌 2 流行