Linux下wget和curl两个命令行工具的文件下载方法

下面详细介绍使用 
wget
 和 
curl
 下载文件的完整用法,包括基础下载、断点续传的原理、高级参数配置以及常见问题解决:

一、wget:专注下载的工具


wget
 是 Linux 下经典的命令行下载工具,专为文件传输设计,对断点续传、递归下载等支持完善,参数简洁直观。

1. 基础下载命令


# 基本用法:直接下载,保存为链接中的文件名
wget https://example.com/large_file.iso
 
# 自定义保存文件名(-O 参数,注意大写)
wget -O my_download.iso https://example.com/large_file.iso
 
# 后台下载(适合大文件,终端关闭不影响)
wget -b https://example.com/large_file.iso
# 后台下载的日志会默认保存到 wget-log,查看日志:tail -f wget-log
2. 断点续传核心用法

核心参数:
-c
(–continue)
作用:当下载中断后,
wget
 会检查本地已下载的文件大小,向服务器发送 
Range
 请求(如 
Range: bytes=1000000-
),仅获取剩余部分,避免重复下载。



# 首次下载(若中断,直接用下面的命令续传)
wget https://example.com/large_file.iso
 
# 断连后续传(必须使用 -c,且文件名与已下载部分一致)
wget -c https://example.com/large_file.iso
 
# 自定义文件名的续传(确保 -O 指定的文件名与已下载文件一致)
wget -c -O my_download.iso https://example.com/large_file.iso

续传原理

服务器需支持 HTTP 1.1 的 
Range
 头(几乎所有现代服务器都支持,旧服务器可能不兼容,此时 
-c
 会失效,重新下载整个文件)。
wget
 会对比本地文件大小和服务器文件总大小:若本地文件小于服务器文件,从断点续传;若相等,提示 “文件已完整”;若本地文件更大,会询问是否覆盖。

3. 高级参数(提升下载效率 / 适应性)


# 限速下载(避免占用全部带宽,单位:字节/秒,k=千字节,m=兆字节)
wget -c --limit-rate=2m https://example.com/large_file.iso  # 限速 2MB/s
 
# 设置重试次数(默认重试 20 次,网络不稳定时增加)
wget -c --tries=50 https://example.com/large_file.iso  # 最多重试 50 次
 
# 忽略证书错误(适用于自签名 HTTPS 链接)
wget -c --no-check-certificate https://example.com/large_file.iso
 
# 添加请求头(模拟浏览器,部分服务器需要特定 User-Agent)
wget -c -U "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/90.0.4430.212" https://example.com/large_file.iso
 
# 代理下载(通过 HTTP 代理)
wget -c -e use_proxy=yes -e http_proxy=127.0.0.1:8080 https://example.com/large_file.iso

二、curl:多功能数据传输工具


curl
 功能更全面(支持 HTTP/HTTPS/FTP 等多种协议,可模拟表单提交、API 请求等),断点续传需通过特定参数实现,适合需要结合其他网络操作的场景。

1. 基础下载命令


# 基本用法:按链接文件名保存(-O 大写)
curl -O https://example.com/large_file.iso
 
# 自定义保存文件名(-o 小写)
curl -o my_download.iso https://example.com/large_file.iso
 
# 显示下载进度(-# 用进度条显示,默认是详细日志)
curl -# -O https://example.com/large_file.iso
2. 断点续传核心用法

核心参数:
-C -
(–continue-at -)
作用:
-C
 用于指定续传的起始位置,
-
 表示让 
curl
 自动检测本地文件大小作为起始位置(与 
wget -c
 效果类似)。



# 首次下载(中断后用下面的命令续传)
curl -O https://example.com/large_file.iso
 
# 断连后续传(必须用 -C -,且文件名与已下载部分一致)
curl -C - -O https://example.com/large_file.iso
 
# 自定义文件名的续传(确保 -o 指定的文件名与已下载文件一致)
curl -C - -o my_download.iso https://example.com/large_file.iso

续传原理

与 
wget
 类似,依赖服务器支持 
Range
 请求。
curl
 会读取本地文件的字节数 
N
,向服务器发送 
Range: bytes=N-
 请求,获取剩余数据并追加到本地文件。若服务器不支持 
Range

curl
 会忽略 
-C
 参数,重新下载整个文件(此时会覆盖本地文件,需谨慎)。

3. 高级参数(适配复杂场景)


# 限速下载(--limit-rate,单位:字节/秒,k=千,m=兆)
curl -C - -# --limit-rate 2m -O https://example.com/large_file.iso
 
# 设置超时时间(连接超时 10 秒,总下载超时 300 秒)
curl -C - -o my_download.iso --connect-timeout 10 --max-time 300 https://example.com/large_file.iso
 
# 忽略证书错误(HTTPS 自签名证书)
curl -C - -k -O https://example.com/large_file.iso  # -k 等价于 --insecure
 
# 添加请求头(模拟浏览器或携带 Cookie)
curl -C - -H "User-Agent: Mozilla/5.0" -H "Cookie: sessionid=xxx" -O https://example.com/large_file.iso
 
# 代理下载(HTTP 代理)
curl -C - -x http://127.0.0.1:8080 -O https://example.com/large_file.iso

三、断连续传的关键注意事项

文件名必须一致续传时,
wget
/
curl
 会根据文件名识别本地已下载文件,若文件名不同(如首次用 
wget file.zip
,续传时用 
wget -c file2.zip
),会视为新文件重新下载。

本地文件未被修改若手动编辑过已下载的部分文件(如删除、修改内容),续传后可能导致文件损坏(因为服务器传输的是剩余字节,与本地修改后的内容不匹配)。

服务器支持验证可通过 
curl -I
 查看服务器是否支持 
Range
(检查响应头是否有 
Accept-Ranges: bytes
):



curl -I https://example.com/large_file.iso
# 若输出包含 "Accept-Ranges: bytes",则支持续传;否则不支持。

大文件推荐搭配校验下载完成后,建议用 
md5sum
 或 
sha256sum
 验证文件完整性(若服务器提供校验值):



# 示例:校验 MD5
md5sum large_file.iso  # 计算本地文件 MD5
# 对比服务器提供的 MD5 值,一致则文件完整。

四、常见问题解决

续传时提示 “文件已存在” 但未完成


wget
:默认会询问是否覆盖,输入 
n
 后加 
-c
 重新执行即可。
curl
:若本地文件存在,
-C -
 会自动续传;若未续传,可能是服务器不支持 
Range
,需重新下载。

HTTPS 链接下载失败

检查是否有证书问题:加 
--no-check-certificate
(wget)或 
-k
(curl)。确认链接是否需要登录:通过 
-H "Cookie: ..."
 携带登录凭证。

下载速度过慢

尝试限速(避免被服务器限制)。更换网络或使用代理(
-e http_proxy
 或 
-x
 参数)。

总结

优先用 
wget
:专为下载设计,续传(
-c
)更稳定,参数简单,适合新手。选 
curl
 场景
:需要结合其他网络操作(如模拟请求、处理 API),或习惯其灵活的参数体系。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
宏宇的头像 - 鹿快
评论 抢沙发

请登录后发表评论

    暂无评论内容