IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

其实你不懂wget的心-05

linux大棚-roclinux.cn 2011-06-02 13:44:52 累计浏览 3,951 次
本机暂存

    上篇文章,给了大家不少误会,对于明白原理的朋友,不说自明;但对于不太精通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秒。

同分类推荐文章

  1. 从零重建 macOS 开发机:可复现的环境初始化流程 (2026-06-14 20:36:00)
  2. 百度物理网络监控工具开源第二弹:毫秒级监控工具 baize,让你的网络问题无处遁形 (2026-06-11 08:10:28)
  3. How to Set Up Homebrew Tap for Private CLI Tools: A Complete Guide (2026-05-27 02:13:03)

查看更多 DevOps 文章 →

建议继续学习

  1. SmartSprites - 命令行形式的CSS Sprites生成器 (累计阅读 123,894)
  2. 浅析http协议、cookies和session机制、浏览器缓存 (累计阅读 17,446)
  3. 从输入 URL 到页面加载完成的过程中都发生了什么事情? (累计阅读 15,933)
  4. libcurl的使用总结(二) (累计阅读 15,083)
  5. 使用python爬虫抓站的一些技巧总结:进阶篇 (累计阅读 13,301)
  6. HTTP协议Keep-Alive模式详解 (累计阅读 12,104)
  7. Linux命令行里的“瑞士军刀” (累计阅读 11,586)
  8. 你必须了解的Session的本质 (累计阅读 11,441)
  9. curl 命令使用cookie (累计阅读 10,016)
  10. Linux date 命令获取某日期的前一天 (累计阅读 9,881)