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