別與實戰(zhàn))
1. 引言在日常開發(fā)、運維和腳本編寫中從命令行下載文件是高頻操作。Linux 世界里有兩位“下載明星”——curl和wget。它們都能幫你把網(wǎng)絡資源取回本地但設計理念、使用方式和適用場景卻有明顯差異。本文將系統(tǒng)梳理兩者的核心用法、常用參數(shù)和本質(zhì)區(qū)別讓你在實際工作中選得對、用得好。2. curl數(shù)據(jù)交互的多面手curl全稱 Client URL是一個功能強大的數(shù)據(jù)傳輸工具。它不僅支持常見的 HTTP、HTTPS還覆蓋 FTP、SFTP、SMTP、IMAP 等二十余種協(xié)議被譽為“命令行里的瑞士軍刀”。2.1 下載文件最基本的使用方式是把遠程資源輸出到標準輸出再用重定向保存curlhttps://example.com/file.tar.gz-ofile.tar.gz其中-o把結(jié)果寫入指定文件。-O使用遠程文件名直接保存到當前目錄。# 使用遠程文件名保存curl-Ohttps://example.com/file.tar.gz2.2 查看 HTTP 響應頭curl非常適合調(diào)試接口與檢查響應信息# 只查看響應頭curl-Ihttps://example.com# 查看完整請求響應過程含請求頭curl-vhttps://example.com2.3 發(fā)送請求參數(shù)與請求體這也是curl相比wget最大的優(yōu)勢之一——它本質(zhì)上是一個 HTTP 客戶端# GET 請求攜帶查詢參數(shù)curlhttps://api.example.com/users?page2# POST 提交 JSON 數(shù)據(jù)curl-XPOST https://api.example.com/login\-HContent-Type: application/json\-d{username:admin,password:123456}2.4 斷點續(xù)傳與限速# 斷點續(xù)傳curl-C--Ohttps://example.com/bigfile.iso# 限制下載速度例如 200KB/scurl--limit-rate 200K-Ohttps://example.com/bigfile.iso3. wget專注下載的重型武器wget的名字源自 World Wide Web 和 get它的定位非常純粹把文件下載下來。相比curlwget在“下載”這件事上做得更極致尤其是遞歸下載和后臺批量下載場景。3.1 基本下載# 下載單個文件wgethttps://example.com/file.tar.gzwget默認會把文件保存到當前目錄并自動使用遠程文件名無需像curl那樣顯式加-O。3.2 后臺下載與日志輸出# 后臺下載日志寫入 wget-logwget-bhttps://example.com/bigfile.iso# 把日志輸出到指定文件wget-odownload.log https://example.com/file.tar.gz3.3 斷點續(xù)傳網(wǎng)絡中斷后wget可以輕松繼續(xù)未完成的下載wget-chttps://example.com/bigfile.iso3.4 遞歸下載整個網(wǎng)站這是wget的殺手級功能常用于鏡像站點或離線保存頁面# 遞歸下載最多 3 層轉(zhuǎn)換鏈接為本地相對路徑wget-r-l3-k-phttps://example.com/docs/參數(shù)說明-r遞歸下載。-l 3遞歸深度為 3 層。-k轉(zhuǎn)換絕對鏈接為本地鏈接。-p同時下載頁面所需的圖片、CSS 等資源。3.5 限速下載# 限制下載速度為 300KB/swget--limit-rate300k https://example.com/bigfile.iso4. curl 與 wget 的核心區(qū)別為了便于快速決策下面從幾個維度對比兩者對比維度curlwget核心定位數(shù)據(jù)傳輸、接口調(diào)試文件下載、站點鏡像支持協(xié)議HTTP、HTTPS、FTP、SFTP、SMTP、IMAP 等 20主要支持 HTTP、HTTPS、FTP遞歸下載不支持支持-r遞歸下載默認保存輸出到標準輸出直接保存到文件斷點續(xù)傳-C --c發(fā)送請求支持 POST、PUT、自定義 Header 等能力較弱主要面向下載適用場景調(diào)試 API、上傳數(shù)據(jù)、腳本交互批量下載、鏡像站點、定時任務簡單總結(jié)調(diào)接口、測服務、傳數(shù)據(jù)用curl下文件、鏡像站、批量抓取用wget。5. 常見問題排查5.1 下載大文件需要斷點續(xù)傳curl使用-C -。wget使用-c。5.2 服務器要求攜帶 Cookie# wgetwget--headerCookie: sessionabc123https://example.com/file# curlcurl-bsessionabc123-Ohttps://example.com/file5.3 排查 SSL 證書錯誤如果遇到certificate verify failed之類錯誤可以臨時跳過驗證但不建議在生產(chǎn)環(huán)境長期使用curl-khttps://example.comwget--no-check-certificate https://example.com6. 總結(jié)curl和wget是 Linux 命令行李不可替代的兩件工具。它們功能有重疊但定位不同curl更像一個全能的數(shù)據(jù)傳輸與調(diào)試工具而wget則是專注于“下載”這件事的行家。掌握兩者的核心參數(shù)與使用邊界能讓你在編寫腳本、排查網(wǎng)絡問題、維護服務器時事半功倍。建議把本文中的命令保存到個人命令速查表以后遇到“下載文件、調(diào)試接口”時就能快速選出最合適的工具。