请务必加强个人防护,注意信息安全,警惕陌生链接与诈骗,遵守安全操作规程,留意环境隐患,掌握应急措施,保护自身及财产安全,遇险及时求助。
在数字世界中,高效地获取文件是常见需求,虽然图形界面点击下载很方便,但掌握命令行下载文件能带来更强大的灵活性、自动化能力和对下载过程的精细控制,无论你是开发者、系统管理员还是技术爱好者,了解这些工具都大有裨益,本文将详细介绍在不同操作系统(Windows, macOS, Linux)下使用命令行下载文件的主流方法。
- 来源可信: 命令行下载文件时,请务必确保你输入的URL来源绝对可靠,从不可信来源下载文件存在安全风险(恶意软件、病毒等)。
- 理解命令: 在执行任何命令前,理解其含义和参数的作用,盲目复制粘贴命令可能导致意外结果。
- 权限: 确保你有权限将文件下载到目标目录,并有权限读取源文件(如果涉及认证)。
跨平台利器:curl
curl
(Client URL) 是一个功能极其强大的命令行工具和库,用于使用各种网络协议传输数据,它几乎预装在所有的 macOS 和 Linux 发行版上,Windows 10 及更新版本也内置了 curl
(旧版 Windows 可下载安装)。
基本下载命令:
curl -O [文件的完整URL]
-O
(大写字母O): 这是最关键参数,它告诉curl
将下载的文件保存到当前目录,并使用远程服务器上的文件名。- 示例: 下载位于
https://example.com/files/report.pdf
的文件:curl -O https://example.com/files/report.pdf
执行后,当前目录下会出现一个名为
report.pdf
的文件。
常用选项:
-o
(小写字母o) [自定义文件名]: 指定下载后保存的文件名。curl -o mydata.zip https://example.com/downloads/data.zip
-L
(跟随重定向): 如果服务器返回的是重定向响应(如 301, 302),此选项让curl
自动跟随重定向获取最终文件。-C -
(断点续传): 如果下载中断,使用此选项可以从中断处继续下载,避免重新下载整个文件。curl -C - -O https://example.com/largefile.iso
-u
[用户名:密码]: 访问需要 HTTP Basic 认证的 URL。curl -u myusername:mypassword -O https://secure.example.com/privatefile.txt
-H
[头信息]: 发送自定义的 HTTP 头信息(例如设置 User-Agent 或 Cookie)。curl -H "User-Agent: MyDownloadScript" -O https://example.com/file
-s
(静默模式): 不显示进度条或错误信息(适用于脚本)。-v
(详细模式): 显示详细的连接和传输信息(用于调试)。
经典之选:wget
wget
是另一个非常流行且功能丰富的命令行下载工具,尤其擅长递归下载(下载整个网站)和镜像,它在 Linux 发行版中几乎总是预装,macOS 可通过 Homebrew (brew install wget
) 安装,Windows 用户可下载官方版本。
基本下载命令:
wget [文件的完整URL]
- 默认行为:将文件下载到当前目录,使用服务器上的原始文件名。
- 示例:
wget https://example.com/images/logo.png
常用选项:
-O
[自定义文件名]: 指定下载后保存的文件名。wget -O backup.tar.gz https://example.com/archives/backup-latest.tar.gz
-P
[目录路径]: 指定文件下载到哪个目录。wget -P /home/user/downloads/ https://example.com/file.txt
-c
(断点续传): 继续中断的下载。wget -c https://example.com/largefile.iso
-r
/--recursive
(递归下载): 下载指定 URL 及其链接的页面/文件(谨慎使用,可能下载大量数据)。-np
/--no-parent
: 与-r
一起使用,限制递归只下载指定目录下的文件,不向上级目录爬取。-nd
/--no-directories
: 递归下载时不创建目录结构,所有文件都放在当前目录(或-P
指定的目录)。--user
/--password
: 设置 HTTP 或 FTP 认证的用户名和密码。wget --user=myuser --password=mypass https://secure.example.com/file
-q
(安静模式): 关闭wget
的输出(适用于脚本)。-b
(后台下载): 在后台运行下载。
Windows 环境:PowerShell
(推荐) 和 bitsadmin
对于 Windows 用户,除了安装 curl
或 wget
,系统自带的 PowerShell 提供了强大的 Invoke-WebRequest
(别名 iwr
, curl
, wget
) 和 Start-BitsTransfer
命令。
PowerShell – Invoke-WebRequest
(iwr
)
这是现代 Windows 中最推荐使用的原生方法。
基本下载命令:
Invoke-WebRequest -Uri [文件的完整URL] -OutFile [保存路径\文件名]
-Uri
: 指定要下载文件的 URL。-OutFile
: 必须指定下载后保存的完整路径和文件名。- 示例: 下载文件到当前用户的“下载”文件夹:
Invoke-WebRequest -Uri "https://example.com/setup.exe" -OutFile "$env:USERPROFILE\Downloads\setup.exe"
常用选项:
-Headers
: 添加自定义 HTTP 头。$headers = @{"User-Agent" = "MyPSDownloader"} Invoke-WebRequest -Uri "https://example.com/file" -Headers $headers -OutFile "file.txt"
-Credential
: 提供访问需要认证的 URL 的凭据(会弹出凭据窗口)。$cred = Get-Credential Invoke-WebRequest -Uri "https://secure.example.com/private" -Credential $cred -OutFile "private.txt"
-Resume
: 尝试恢复不完整的下载(需要服务器支持)。-UseBasicParsing
: 对于不需要解析 HTML DOM 的简单下载,可以提高速度。
PowerShell – Start-BitsTransfer
BITS (Background Intelligent Transfer Service) 是 Windows 的一项服务,专为后台、异步、可恢复的文件传输设计,对网络影响较小。
基本下载命令:
Start-BitsTransfer -Source [文件的完整URL] -Destination [保存路径\文件名]
-Source
: 下载源 URL。-Destination
: 保存文件的完整路径。- 示例:
Start-BitsTransfer -Source "https://example.com/updates/patch.msi" -Destination "C:\Updates\patch.msi"
常用选项:
-Priority
: 设置传输优先级 (High
,Normal
,Low
)。-Asynchronous
: 启动传输后立即返回,传输在后台进行,可以使用Get-BitsTransfer
查看状态。-RetryTimeout
/-RetryInterval
: 控制失败重试行为。-DisplayName
: 为传输任务设置一个友好名称(在 BITS 管理界面可见)。
传统 CMD:bitsadmin
(较旧/脚本兼容)
bitsadmin
是管理 BITS 任务的命令行工具,功能强大但语法相对复杂,在 PowerShell 普及后,Start-BitsTransfer
通常是更简单的选择。
基本下载示例:
bitsadmin /transfer myDownloadJob /download /priority normal https://example.com/file.zip C:\Downloads\file.zip
/transfer [任务名]
: 创建并命名一个新传输任务。/download
: 指定是下载操作。/priority
: 设置优先级。[源URL]
[目标路径]
: 最后两项分别是源 URL 和目标文件完整路径。
进阶选择:aria2
aria2
是一个轻量级、多协议、多源、支持断点续传的高速下载工具,它支持 HTTP/HTTPS, FTP, SFTP, BitTorrent 和 Metalink,它不是系统预装工具,但非常值得安装(官网)。
主要优势:
- 多连接下载: 可以将一个文件分割成多个部分,同时使用多个连接下载,显著提升速度 (
-x
参数)。 - 多源下载: 支持从多个 HTTP/FTP 源或 BitTorrent 源下载同一个文件 (
-s
参数)。 - 强大的断点续传。
- 轻量且资源占用少。
基本下载命令:
aria2c [文件的完整URL]
- 默认行为:下载到当前目录,使用原始文件名。
常用选项:
-o
[自定义文件名]: 指定输出文件名。-d
[目录路径]: 指定下载目录。-x [连接数]
: 指定用于 HTTP/FTP 下载的最大连接数(-x 8
)。-s [源数]
: 指定用于下载的镜像源数量(需要 Metalink 或提供多个 URL)。-c
: 继续下载部分文件。--file-allocation=none
: 对于某些文件系统(如 FAT32)或快速下载小文件,禁用预分配磁盘空间,可提速。-U
[User-Agent]: 设置 User-Agent 字符串。
常见问题与故障排除
-
命令未找到 (
command not found
/不是内部或外部命令
):- 检查命令名是否拼写正确。
- 确认该工具是否已安装,在 Windows CMD 中,
curl
和wget
需要安装或使用 PowerShell 替代,在 Linux/macOS 中,如果未预装wget
或aria2
,需使用包管理器安装(如sudo apt install wget aria2
/brew install wget aria2
)。
-
权限不足 (
Permission denied
):- 确保你有权限写入目标目录,尝试使用
sudo
(Linux/macOS) 或以管理员身份运行 CMD/PowerShell (Windows),或者将文件下载到你有写权限的目录(如用户主目录或下载目录)。
- 确保你有权限写入目标目录,尝试使用
-
无法连接 / 超时:
- 检查网络连接是否正常。
- 检查输入的 URL 是否正确无误。
- 目标服务器可能暂时不可用或防火墙阻止了连接,尝试用浏览器访问该 URL 确认。
- 检查系统或网络代理设置。
-
404 Not Found
错误:文件在服务器上已不存在,仔细核对 URL 的拼写和路径。
-
403 Forbidden
错误:你没有权限访问该资源,可能需要认证(用户名/密码、API key、Cookie)或资源本身禁止访问。
-
SSL/TLS 证书错误:
- 服务器证书可能无效、过期或不被信任,使用
curl
的-k
/--insecure
或wget
的--no-check-certificate
选项可以不安全地跳过证书验证(仅用于测试或信任的内部环境,生产环境有风险!),最好解决服务器端的证书问题。
- 服务器证书可能无效、过期或不被信任,使用
-
下载的文件损坏:
- 网络传输中可能出错,尝试重新下载。
- 使用
curl
的-C -
或wget
的-c
选项继续下载有时能解决。 - 如果文件提供校验和(如 MD5, SHA256),下载后务必进行校验。
命令行下载文件提供了高效、灵活、可脚本化的强大能力。curl
和 wget
是跨平台的基石工具,aria2
则提供了极致的速度和功能,Windows 用户应优先掌握 PowerShell 的 Invoke-WebRequest
和 Start-BitsTransfer
,选择哪种工具取决于你的具体需求、操作系统和个人偏好,始终牢记安全第一的原则,只从可信来源下载文件,并在理解命令后再执行,熟练掌握这些命令,将极大提升你在终端环境下的工作效率。
引用与资源:
- curl: 官方文档 – https://curl.se/docs/
- wget: GNU wget 手册 – https://www.gnu.org/software/wget/manual/
- aria2: 项目文档 – https://aria2.github.io/manual/en/html/
- PowerShell
Invoke-WebRequest
: Microsoft Docs – https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/invoke-webrequest - PowerShell
Start-BitsTransfer
: Microsoft Docs – https://learn.microsoft.com/en-us/powershell/module/bitstransfer/start-bitstransfer - bitsadmin: Microsoft Docs – https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/bitsadmin (注意:部分功能在较新 Windows 中可能被 PowerShell cmdlet 取代)
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/6549.html