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就是我的首选。它们各有侧重,互为补充,理解它们的差异能让你在面对不同的网络任务时,选择最合适的工具。









