【Linux】 wget、curl 用法区别

wgetcurl 都是命令行工具,用于网络数据传输(如下载文件),但它们的设计目标和使用场景有显著区别。以下是两者的核心差异和典型用法对比:

一、核心定位与设计目标

工具 定位 核心优势 典型场景
wget 专注于文件下载的工具 支持断点续传、递归下载、后台下载,无需交互 批量下载、镜像网站、后台任务
curl 多功能数据传输工具(支持多种协议) 支持上传/下载、HTTP请求定制、管道处理 API测试、数据交互、复杂请求

二、关键功能区别

1. 协议支持
  • wget:主要支持 HTTP、HTTPS、FTP,协议支持较基础。
  • curl:支持几乎所有主流协议(HTTP/HTTPS、FTP、SFTP、SCP、SMTP、POP3 等),协议覆盖更全面。
2. 下载能力
  • wget

    • 擅长 递归下载 (如 wget -r http://example.com 可下载整个网站结构)。
    • 内置 断点续传(网络中断后重启可继续下载,无需重新开始)。
    • 支持 后台下载-b 参数)和 限速--limit-rate)。
  • curl

    • 需手动指定 -C - 开启断点续传,递归下载能力弱(需配合其他工具)。
    • 不直接支持后台下载(需借助系统工具如 nohup)。
3. 交互与数据处理
  • wget:设计为"非交互式",更适合脚本自动执行,默认将数据保存为文件。
  • curl :支持 管道输出|),可直接将数据传递给其他命令(如 curl http://example.com | grep "keyword"),适合处理动态数据。
4. HTTP请求定制
  • curl 提供强大的 HTTP 请求控制:
    • 自定义请求方法(-X POST-X DELETE 等)。
    • 添加请求头(-H "Content-Type: application/json")。
    • 发送表单数据(-d "name=value")或 JSON 数据(-d '{"key":"value"}')。
  • wget 对 HTTP 请求的定制能力较弱,仅支持基础的头信息设置(--header)。

三、典型用法对比

1. 简单下载文件
bash 复制代码
# wget:直接下载并保存为原文件名
wget http://example.com/file.zip

# curl:需用 -O 保存为原文件名(默认输出到终端)
curl -O http://example.com/file.zip
2. 断点续传
bash 复制代码
# wget:自动支持断点续传,再次运行即可
wget http://example.com/large_file.iso

# curl:需手动指定 -C -
curl -C - -O http://example.com/large_file.iso
3. 递归下载(网站镜像)
bash 复制代码
# wget:轻松下载整个网站结构(包括链接、图片等)
wget -r -np -k http://example.com/docs/
# -r:递归下载;-np:不追溯到父目录;-k:转换链接为本地可用

# curl:无原生递归功能,需配合 find 等工具,复杂且不常用
4. 发送HTTP POST请求(API测试)
bash 复制代码
# curl:支持发送表单或JSON数据(wget难以实现)
curl -X POST -H "Content-Type: application/json" -d '{"name":"test"}' http://api.example.com/submit

# wget:仅能通过 --post-data 发送简单表单,功能有限
wget --post-data "name=test" http://api.example.com/submit
5. 后台下载
bash 复制代码
# wget:内置后台下载(输出日志到 wget-log)
wget -b http://example.com/big_file.tar.gz

# curl:需借助 nohup 或 &
nohup curl -O http://example.com/big_file.tar.gz &

四、如何选择?

  • 如果你需要 下载文件、镜像网站、断点续传 ,或在脚本中进行简单的自动化下载,选 wget
  • 如果你需要 测试API、发送复杂HTTP请求、处理多种协议 ,或需要将数据通过管道传递给其他命令,选 curl

两者并非互斥关系,实际使用中常根据场景搭配:例如用 curl 测试API接口,用 wget 批量下载测试所需的文件。

相关推荐
mljy.20 分钟前
Linux《线程同步和互斥(下)》
linux
养生技术人29 分钟前
Oracle OCP认证考试题目详解082系列第50题
运维·数据库·sql·oracle·database·开闭原则
朱包林33 分钟前
Prometheus监控K8S集群-ExternalName-endpoints-ElasticStack采集K8S集群日志实战
运维·云原生·容器·kubernetes·prometheus
谢语花44 分钟前
【VS2022】LNK assimp64.lib找不到文件_openframework
android·运维·服务器
马克学长44 分钟前
SSM村务管理系统s2qnw(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
java·服务器·数据库
对着晚风做鬼脸1 小时前
MySQL 运维知识点(十五)---- 分库分表与MyCat
运维·数据库·mysql
zhangrelay1 小时前
蓝桥云课中支持的ROS1版本有哪些?-2025在线尝试ROS1全家福最方便的打开模式-
linux·笔记·学习·ubuntu
tt666qq1 小时前
运维自动化之 Ansible 核心知识点总结
运维·自动化·ansible
2301_818411551 小时前
rpm软件包管理以及yum,apt的前端软件包管理器
linux·运维·服务器
源文雨2 小时前
MacOS 下 Warp ping 局域网设备报错 ping: sendto: No route to host 的解决方法
运维·网络协议·安全·macos·网络安全·ping