wget是一个强大的命令行下载工具,支持断点续传、递归下载和镜像网站。使用wget -c可续传中断的大文件;–mirror –convert-links –page-requisites –no-parent可完整下载网站用于离线浏览;与curl相比,wget专注下载,而curl更擅长多协议交互和API调试。
wget
在Linux世界里,就像是命令行下的一个瑞士军刀,专门用来从网络上下载文件。它简单、直接,而且功能强大到足以处理各种复杂的下载任务,从单个文件到整个网站,它都能搞定。对我来说,它不仅仅是一个命令,更是一个在无数次自动化脚本和服务器维护中,帮我省下大量时间和精力的老伙计。它的核心价值在于,即使网络中断,它也能智能地尝试续传,而且完全不需要图形界面,这在远程服务器管理时简直是福音。
解决方案
使用
wget
下载文件,最基础的命令格式是:
wget [选项] [URL]
例如,要下载一个名为
example.zip
的文件,你只需要知道它的网络地址:
wget https://example.com/files/example.zip
文件会默认下载到当前目录。如果你想指定下载到其他目录,可以用
-P
或
--directory-prefix
选项:
wget -P /home/user/downloads https://example.com/files/example.zip
如果下载的文件名太长或者你想给它换个名字,
-O
或
--output-document
就派上用场了:
wget -O my_custom_name.zip https://example.com/files/example.zip
有时候,下载需要认证,比如通过用户名和密码,这时候
-user
和
--password
就很有用了:
wget --user=your_username --password=your_password https://example.com/secure/file.tar.gz
当然,很多时候我们下载的文件可能来自一个不是很稳定的网络,或者文件本身就很大。
wget
在这种情况下表现得非常出色,特别是它处理中断下载的能力,简直是救星。
Linux wget命令如何下载整个网站或目录?
说实话,
wget
真正让我觉得它不可替代的,是它递归下载的能力。这不仅仅是下载一个文件,而是可以抓取整个网站或者一个目录下的所有内容。这功能在做离线浏览、备份网站或者分析网站结构时特别有用。
要实现这个,你需要用到
--recursive
或
-r
选项。但仅仅这样还不够,通常我们还需要一些其他的选项来精细控制下载行为:
-
--level=N
:指定递归的深度。默认是5,但如果你只想下载当前目录下的所有文件,可以设为1。
-
--no-parent
:这个选项非常重要,它会阻止
wget
访问父目录,确保你不会意外地下载到网站根目录以外的东西。
-
--convert-links
:下载完成后,将HTML文件中的链接转换为本地链接,这样你就可以在本地离线浏览整个网站了。
-
--page-requisites
或
-P
:下载所有页面所需的附加文件,比如图片、CSS文件、JavaScript脚本等,确保页面在本地能完整显示。
-
--mirror
或
-m
:这是一个组合选项,等同于
-r -N -l inf --no-host-directories
,它会以镜像模式下载网站,保留时间戳,并无限递归。这是下载整个网站的最佳实践。
举个例子,如果你想完整地镜像一个网站供离线浏览:
wget --mirror --convert-links --page-requisites --no-parent https://example.com/
这个命令会下载
example.com
网站的所有内容,并调整链接,让你可以在本地浏览器中打开下载下来的HTML文件,就像在线浏览一样。不过,在使用这个功能时,务必注意目标网站的
robots.txt
文件,尊重网站的抓取策略,避免给对方服务器造成不必要的负担。
wget下载大文件中断后如何续传?
这大概是
wget
最常用的功能之一了,尤其是在处理那些动辄几个GB的大文件时。网络环境不稳定、断电、或者只是你不小心关掉了终端,都可能导致下载中断。这时候,
wget
的续传功能简直是雪中送炭。
核心选项是
-c
或
--continue
。当一个下载任务中断后,你只需要用相同的
wget
命令,加上
-c
选项,
wget
就会检查本地已下载的部分,然后从上次中断的地方继续下载。
# 假设你正在下载一个大文件,但中断了 wget https://example.com/large_archive.tar.gz # 几分钟后,你发现中断了,想继续下载 wget -c https://example.com/large_archive.tar.gz
它能做到这一点,是因为HTTP协议本身支持“范围请求”(Range Requests)。当
wget -c
执行时,它会告诉服务器,它已经有了文件的前N个字节,请求服务器从第N+1个字节开始发送数据。当然,前提是服务器也支持这个功能,不过现在绝大多数的HTTP服务器都支持。
我个人就经常遇到这种情况,尤其是在下载一些大型的虚拟机镜像或者数据集时。没有
-c
,可能每次中断都意味着从头再来,那简直是噩梦。所以,只要是下载大文件,我几乎都会习惯性地带上
-c
,以防万一。
wget与curl命令有哪些核心差异和适用场景?
在Linux命令行工具中,
wget
和
curl
都是下载文件或与Web服务器交互的利器,但它们的设计理念和主要用途却有些不同。在我看来,它们就像是工具箱里两把不同的锤子,各有各的用武之地。
wget
(Web Getter)顾名思义,它的核心设计目标就是“获取”Web上的资源。它更专注于非交互式、递归式的下载。如果你需要下载一个文件、一个目录甚至整个网站,并且希望这个过程是自动化的、能在后台运行的,那么
wget
通常是首选。它的递归下载、续传、后台运行(通过
&
或
--background
)等功能,都体现了其作为下载工具的强大。
而
curl
(Client URL)则更加通用,它是一个数据传输工具,支持的协议远不止HTTP/HTTPS,还包括FTP、FTPS、gopher、SMB、Telnet等二十多种协议。
curl
的设计更侧重于与服务器进行“交互”,它可以发送自定义的HTTP请求头、处理各种认证、上传数据、甚至模拟浏览器行为。它更像是一个“瑞士军刀”,适合那些需要精细控制网络请求的场景,比如测试API接口、调试Web服务、或者进行数据抓取时。
核心差异总结:
- 默认行为:
wget
默认下载文件到本地,而
curl
默认将内容输出到标准输出(终端)。
- 递归下载:
wget
天生支持递归下载(
-r
),而
curl
没有内置的递归下载功能,需要通过脚本实现。
- 协议支持:
wget
主要支持HTTP、HTTPS和FTP,而
curl
支持的协议种类更多。
- 上传:
curl
可以上传数据(
-F
或
-T
),
wget
则没有这个功能。
- API测试:
curl
在API测试和调试方面更强大,可以轻松构造各种HTTP请求(GET, POST, PUT, DELETE等)。
适用场景:
- 选择
wget
:
当你需要下载单个文件、批量下载、镜像网站、或者在脚本中进行非交互式下载时。 - 选择
curl
:
当你需要测试API、上传文件、发送自定义HTTP请求、或者与各种不同协议的服务器进行交互时。
坦白说,在我的日常工作中,这两个命令经常是并存的。对于简单的文件下载或网站备份,我会毫不犹豫地使用
wget
。但如果我需要调试一个RESTful API,或者需要发送一个带有特定头部信息的POST请求,那么
curl
就是我的首选。它们各有侧重,互为补充,理解它们的差异能让你在面对不同的网络任务时,选择最合适的工具。
linux css javascript word java html go 浏览器 虚拟机 工具 JavaScript restful css html cURL Directory continue 递归 接口 delete background http https linux 自动化