Linux命令五分钟

《其实你不懂wget的心-01》

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

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

===

[正文开始]

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的追捕喽!

[未完待续]

12条评论

  1. 你好,http://210.26.5.7:9090/ydtsg/ 这是大学图书馆,可以用wget命令下载单个的pdf文件,但我想全部一起下载, 按照网上的命令,下载整个目录时总是失败,有什么别的方法么

  2. 你好 我有个问题想问你,如果我在浏览器地址里输入一个 http://box.zhangmen.baidu.com/x?op=12&count=1&title=yellow$$coldplay,会返回一个xml文件; 但是我在终端下,用命令行:wget -O “t.xml” “http://box.zhangmen.baidu.com/x?op=12&count=1&title=yellow$$coldplay” 就不能完整的得到这个xml文件,这是为什么? 哪里有错? 有什么方法,能够把这个xml文件完整的下载下载(在终端)

  3. “一旦你用wget进行整站的下载,它也会傻傻的去下载外链站点的内容,这样一来,子子孙孙无穷尽也”
    选项-np可以解决这个问题的吧?

  4. 关于用“&”放到后台,“使用ctrl-c还无法终止。只能kill进程来杀掉” 有点补充,用“fg”可以把这样放到后台的程序重新放到前台来,可以用Ctrl+C

  5. 第7点,其实&确实是后台了,只不过stdout和stderr不停地输出,干扰了提示符而已。
    ctrl-c不能停止正说明了正在后台运行呀。:-)
    只要重定向了stdout和stderr就好了。

    当然,–background最好使了。

发表您的评论

请您放心,您的信息会被严格保密。必填项已标识 *