经常看到别人使用wget从网站download文件,一直挺害怕没有用过这个工具,今天专门了解一下,以后也试试。
首先,看看GNU上对wget的介绍:
GNU Wget is a free software package for retrieving files using HTTP, HTTPS and FTP, the most widely-used Internet protocols. It is a non-interactive commandline tool, so it may easily be called from scripts, cron jobs, terminals without X-Windows support, etc.
GNU Wget是一款通过HTTP,HTTPS和FTP三个最广泛使用的Internet协议来获取文件的免费软件包。这是一个非交互式的命令行工具,所以它可以很方便的在脚本,定时任务,不带X-Windows的终端等环境下使用。
GNU Wget has many features to make retrieving large files or mirroring entire web or FTP sites easy, including:
GNU Wget有许多特性使得下载大文件或者镜像整个web或者FTP站点变得容易,包括:
- Can resume aborted downloads, using REST and RANGE
- 可以续传已经中断的下载,使用REST或者RANGE
- Can use filename wild cards and recursively mirror directories
- 可以使用文件名通配符和多层目录结构
- NLS-based message files for many different languages
- 基于NLS的消息文件可以支持多种不同的语言(NLS是National Language Support吗)
- Optionally converts absolute links in downloaded documents to relative, so that downloaded documents may link to each other locally
- 可以自由的转换下载文件中的绝对路径为相对路径,使得下载的文件可以在本地保持相同的目录结构(是在镜像web或者FTP站点时把服务器上的目录结构复制变为本地结构?)
- Runs on most UNIX-like operating systems as well as Microsoft Windows
- 可以在多种类UNIX系统例如Windows系统上运行
- Supports HTTP proxies
- 支持HTTP代理
- Supports HTTP cookies
- 支持HTTP cookies(做什么用?)
- Supports persistent HTTP connections
- 支持HTTP长链接?
- Unattended / background operation
- 无人值守/后台运行?
- Uses local file timestamps to determine whether documents need to be re-downloaded when mirroring
- 检查本地文件时间戳判断是否需要更新镜像站点上的文件
- GNU Wget is distributed under the GNU General Public License.
介绍看了个大概,也要实际使用一下才能有所体会。我这台机器上没有虚拟机,但是cygwin里面已经下载了wget,很好,先看看帮助都有什么:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 |
GNU Wget 1.15,非交互式的网络文件下载工具。 用法: wget [选项]... [URL]... 长选项所必须的参数在使用短选项时也是必须的。 启动: -V, --version 显示 Wget 的版本信息并退出。 -h, --help 打印此帮助。 -b, --background 启动后转入后台。 -e, --execute=COMMAND 运行一个“.wgetrc”风格的命令。 日志和输入文件: -o, --output-file=FILE 将日志信息写入 FILE。 -a, --append-output=FILE 将信息添加至 FILE。 -d, --debug 打印大量调试信息。 -q, --quiet 安静模式 (无信息输出)。 -v, --verbose 详尽的输出 (此为默认值)。 -nv, --no-verbose 关闭详尽输出,但不进入安静模式。 --report-speed=TYPE Output bandwidth as TYPE. TYPE can be bits. -i, --input-file=FILE 下载本地或外部 FILE 中的 URLs。 -F, --force-html 把输入文件当成 HTML 文件。 -B, --base=URL 解析与 URL 相关的 HTML 输入文件 (由 -i -F 选项指定)。 --config=FILE Specify config file to use. 下载: -t, --tries=NUMBER 设置重试次数为 NUMBER (0 代表无限制)。 --retry-connrefused 即使拒绝连接也是重试。 -O, --output-document=FILE 将文档写入 FILE。 -nc, --no-clobber skip downloads that would download to existing files (overwriting them). -c, --continue 断点续传下载文件。 --progress=TYPE 选择进度条类型。 -N, --timestamping 只获取比本地文件新的文件。 --no-use-server-timestamps 不用服务器上的时间戳来设置本地文件。 -S, --server-response 打印服务器响应。 --spider 不下载任何文件。 -T, --timeout=SECONDS 将所有超时设为 SECONDS 秒。 --dns-timeout=SECS 设置 DNS 查寻超时为 SECS 秒。 --connect-timeout=SECS 设置连接超时为 SECS 秒。 --read-timeout=SECS 设置读取超时为 SECS 秒。 -w, --wait=SECONDS 等待间隔为 SECONDS 秒。 --waitretry=SECONDS 在获取文件的重试期间等待 1..SECONDS 秒。 --random-wait 获取多个文件时,每次随机等待间隔 0.5*WAIT...1.5*WAIT 秒。 --no-proxy 禁止使用代理。 -Q, --quota=NUMBER 设置获取配额为 NUMBER 字节。 --bind-address=ADDRESS 绑定至本地主机上的 ADDRESS (主机名或是 IP)。 --limit-rate=RATE 限制下载速率为 RATE。 --no-dns-cache 关闭 DNS 查寻缓存。 --restrict-file-names=OS 限定文件名中的字符为 OS 允许的字符。 --ignore-case 匹配文件/目录时忽略大小写。 -4, --inet4-only 仅连接至 IPv4 地址。 -6, --inet6-only 仅连接至 IPv6 地址。 --prefer-family=FAMILY 首先连接至指定协议的地址 FAMILY 为 IPv6,IPv4 或是 none。 --user=USER 将 ftp 和 http 的用户名均设置为 USER。 --password=PASS 将 ftp 和 http 的密码均设置为 PASS。 --ask-password 提示输入密码。 --no-iri 关闭 IRI 支持。 --local-encoding=ENC IRI (国际化资源标识符) 使用 ENC 作为本地编码。 --remote-encoding=ENC 使用 ENC 作为默认远程编码。 --unlink remove file before clobber. 目录: -nd, --no-directories 不创建目录。 -x, --force-directories 强制创建目录。 -nH, --no-host-directories 不要创建主目录。 --protocol-directories 在目录中使用协议名称。 -P, --directory-prefix=PREFIX 以 PREFIX/... 保存文件 --cut-dirs=NUMBER 忽略远程目录中 NUMBER 个目录层。 HTTP 选项: --http-user=USER 设置 http 用户名为 USER。 --http-password=PASS 设置 http 密码为 PASS。 --no-cache 不在服务器上缓存数据。 --default-page=NAME 改变默认页 (默认页通常是“index.html”)。 -E, --adjust-extension 以合适的扩展名保存 HTML/CSS 文档。 --ignore-length 忽略头部的‘Content-Length’区域。 --header=STRING 在头部插入 STRING。 --max-redirect 每页所允许的最大重定向。 --proxy-user=USER 使用 USER 作为代理用户名。 --proxy-password=PASS 使用 PASS 作为代理密码。 --referer=URL 在 HTTP 请求头包含‘Referer: URL’。 --save-headers 将 HTTP 头保存至文件。 -U, --user-agent=AGENT 标识为 AGENT 而不是 Wget/VERSION。 --no-http-keep-alive 禁用 HTTP keep-alive (永久连接)。 --no-cookies 不使用 cookies。 --load-cookies=FILE 会话开始前从 FILE 中载入 cookies。 --save-cookies=FILE 会话结束后保存 cookies 至 FILE。 --keep-session-cookies 载入并保存会话 (非永久) cookies。 --post-data=STRING 使用 POST 方式;把 STRING 作为数据发送。 --post-file=FILE 使用 POST 方式;发送 FILE 内容。 --method=HTTPMethod use method "HTTPMethod" in the header. --body-data=STRING Send STRING as data. --method MUST be set. --body-file=FILE Send contents of FILE. --method MUST be set. --content-disposition 当选中本地文件名时 允许 Content-Disposition 头部 (尚在实验)。 --content-on-error output the received content on server errors. --auth-no-challenge 发送不含服务器询问的首次等待 的基本 HTTP 验证信息。 HTTPS (SSL/TLS) 选项: --secure-protocol=PR choose secure protocol, one of auto, SSLv2, SSLv3, TLSv1 and PFS. --https-only only follow secure HTTPS links --no-check-certificate 不要验证服务器的证书。 --certificate=FILE 客户端证书文件。 --certificate-type=TYPE 客户端证书类型,PEM 或 DER。 --private-key=FILE 私钥文件。 --private-key-type=TYPE 私钥文件类型,PEM 或 DER。 --ca-certificate=FILE 带有一组 CA 认证的文件。 --ca-directory=DIR 保存 CA 认证的哈希列表的目录。 --random-file=FILE 带有生成 SSL PRNG 的随机数据的文件。 --egd-file=FILE 用于命名带有随机数据的 EGD 套接字的文件。 FTP 选项: --ftp-user=USER 设置 ftp 用户名为 USER。 --ftp-password=PASS 设置 ftp 密码为 PASS。 --no-remove-listing 不要删除‘.listing’文件。 --no-glob 不在 FTP 文件名中使用通配符展开。 --no-passive-ftp 禁用“passive”传输模式。 --preserve-permissions 保留远程文件的权限。 --retr-symlinks 递归目录时,获取链接的文件 (而非目录)。 WARC options: --warc-file=FILENAME save request/response data to a .warc.gz file. --warc-header=STRING insert STRING into the warcinfo record. --warc-max-size=NUMBER set maximum size of WARC files to NUMBER. --warc-cdx write CDX index files. --warc-dedup=FILENAME do not store records listed in this CDX file. --no-warc-compression do not compress WARC files with GZIP. --no-warc-digests do not calculate SHA1 digests. --no-warc-keep-log do not store the log file in a WARC record. --warc-tempdir=DIRECTORY location for temporary files created by the WARC writer. 递归下载: -r, --recursive 指定递归下载。 -l, --level=NUMBER 最大递归深度 (inf 或 0 代表无限制,即全部下载)。 --delete-after 下载完成后删除本地文件。 -k, --convert-links 让下载得到的 HTML 或 CSS 中的链接指向本地文件。 --backups=N before writing file X, rotate up to N backup files. -K, --backup-converted 在转换文件 X 前先将它备份为 X.orig。 -m, --mirror -N -r -l inf --no-remove-listing 的缩写形式。 -p, --page-requisites 下载所有用于显示 HTML 页面的图片之类的元素。 --strict-comments 用严格方式 (SGML) 处理 HTML 注释。 递归接受/拒绝: -A, --accept=LIST 逗号分隔的可接受的扩展名列表。 -R, --reject=LIST 逗号分隔的要拒绝的扩展名列表。 --accept-regex=REGEX regex matching accepted URLs. --reject-regex=REGEX regex matching rejected URLs. --regex-type=TYPE regex type (posix). -D, --domains=LIST 逗号分隔的可接受的域列表。 --exclude-domains=LIST 逗号分隔的要拒绝的域列表。 --follow-ftp 跟踪 HTML 文档中的 FTP 链接。 --follow-tags=LIST 逗号分隔的跟踪的 HTML 标识列表。 --ignore-tags=LIST 逗号分隔的忽略的 HTML 标识列表。 -H, --span-hosts 递归时转向外部主机。 -L, --relative 只跟踪有关系的链接。 -I, --include-directories=LIST 允许目录的列表。 --trust-server-names use the name specified by the redirection url last component. -X, --exclude-directories=LIST 排除目录的列表。 -np, --no-parent 不追溯至父目录。 请将错误报告或建议寄给 <bug-wget@gnu.org>。 |
选项很多,但常用的应该也就是续传(),接着就试试这个功能:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
$ wget ftp://ftp.gnu.org/gnu/wget/wget-1.10.1.tar.gz --2015-04-12 22:14:00-- ftp://ftp.gnu.org/gnu/wget/wget-1.10.1.tar.gz => “wget-1.10.1.tar.gz” 正在解析主机 ftp.gnu.org (ftp.gnu.org)... 208.118.235.20, 2001:4830:134:3::b 正在连接 ftp.gnu.org (ftp.gnu.org)|208.118.235.20|:21... 已连接。 正在以 anonymous 登录 ... 登录成功! ==> SYST ... 完成。 ==> PWD ... 完成。 ==> TYPE I ... 完成。 ==> CWD (1) /gnu/wget ... 完成。 ==> SIZE wget-1.10.1.tar.gz ... 1212784 ==> PASV ... 完成。 ==> RETR wget-1.10.1.tar.gz ... 完成。 长度:1212784 (1.2M) (非正式数据) 33% [============> ] 407,340 11.6KB/s 剩余 53s $ ls -l wget-1.10.1.tar.gz -rw-r--r--+ 1 oncebye None 408800 四月 12 22:14 wget-1.10.1.tar.gz $ wget -c ftp://ftp.gnu.org/gnu/wget/wget-1.10.1.tar.gz --2015-04-12 22:16:30-- ftp://ftp.gnu.org/gnu/wget/wget-1.10.1.tar.gz => “wget-1.10.1.tar.gz” 正在解析主机 ftp.gnu.org (ftp.gnu.org)... 208.118.235.20, 2001:4830:134:3::b 正在连接 ftp.gnu.org (ftp.gnu.org)|208.118.235.20|:21... 已连接。 正在以 anonymous 登录 ... 登录成功! ==> SYST ... 完成。 ==> PWD ... 完成。 ==> TYPE I ... 完成。 ==> CWD (1) /gnu/wget ... 完成。 ==> SIZE wget-1.10.1.tar.gz ... 1212784 ==> PASV ... 完成。 ==> REST 408800 ... 完成。 ==> RETR wget-1.10.1.tar.gz ... 完成。 长度:1212784 (1.2M),剩余 803984 (785K) (非正式数据) 100%[+++++++++++++=========================>] 1,212,784 20.4KB/s 用时 36s 2015-04-12 22:17:48 (21.9 KB/s) - “wget-1.10.1.tar.gz” 已保存 [1212784] |
用wget下载自己的源码包,在33%的时候用Ctrl+C结束下载,然后再使用-c选项继续续传,看第二次wget的输出信息,很明显在计算完已经下载的数据量之后,再接着执行下载的