Linux命令行FTP下载完整指南
概述
FTP(文件传输协议)是网络中常用的文件传输方式。本文档详细介绍在Linux系统中使用wget和curl命令行工具下载FTP服务器内容的多种方法,包括递归下载目录、单个文件下载及高级参数配置。
前提条件
- 确保系统已安装wget和curl工具
- 获取FTP服务器的访问凭证
- 确认网络连接正常
安装工具
bash
# 安装wget(CentOS/RHEL)
yum install wget -y
# 安装wget(Ubuntu/Debian)
apt install wget -y
# 安装curl(CentOS/RHEL)
yum install curl -y
# 安装curl(Ubuntu/Debian)
apt install curl -y使用wget下载
1. 递归下载FTP目录
bash
wget -r -np -nH --cut-dirs=5 --user=test --password=testpw ftp://192.168.1.12/home/test/jdk/参数详解
| 参数 | 说明 |
|---|---|
-r | 递归下载 |
-np | 不遍历父目录 |
-nH | 不生成主机名前缀 |
--cut-dirs=5 | 保留5层目录结构 |
--user | FTP用户名 |
--password | FTP密码 |
2. 下载单个文件
bash
wget --user=test --password=testpw ftp://192.168.1.12/home/test/jdk/jdk-8u291-linux-x64.tar.gz3. 高级wget参数
bash
# 限制下载速度(1MB/s)
wget --limit-rate=1m -r -np -nH --user=test --password=testpw ftp://192.168.1.12/home/test/jdk/
# 断点续传
wget -c --user=test --password=testpw ftp://192.168.1.12/home/test/jdk/largefile.iso
# 后台下载
wget -b -r -np -nH --user=test --password=testpw ftp://192.168.1.12/home/test/jdk/
# 指定文件类型
wget -A "*.tar.gz" -r -np -nH --user=test --password=testpw ftp://192.168.1.12/home/test/jdk/
# 排除特定文件
wget -R "*.tmp" -r -np -nH --user=test --password=testpw ftp://192.168.1.12/home/test/jdk/使用curl下载
1. 下载单个文件
bash
curl -u test:testpw -O ftp://192.168.1.12/home/test/jdk/jdk-8u291-linux-x64.tar.gz参数详解
| 参数 | 说明 |
|---|---|
-u | 指定用户名和密码(格式:user:password) |
-O | 使用远程文件名保存到本地 |
2. 高级curl参数
bash
# 下载并重命名文件
curl -u test:testpw -o local-filename.tar.gz ftp://192.168.1.12/home/test/jdk/jdk-8u291-linux-x64.tar.gz
# 断点续传
curl -C - -u test:testpw -O ftp://192.168.1.12/home/test/jdk/largefile.iso
# 显示下载进度
curl -# -u test:testpw -O ftp://192.168.1.12/home/test/jdk/jdk-8u291-linux-x64.tar.gz
# 限制下载速度
curl --limit-rate 1M -u test:testpw -O ftp://192.168.1.12/home/test/jdk/largefile.iso
# 静默模式(不显示进度)
curl -s -u test:testpw -O ftp://192.168.1.12/home/test/jdk/jdk-8u291-linux-x64.tar.gz使用lftp下载
1. 基本用法
bash
# 安装lftp
yum install lftp -y # CentOS/RHEL
apt install lftp -y # Ubuntu/Debian
# 交互式下载
lftp -u test,testpw ftp://192.168.1.12
# 在lftp提示符下执行
lcd /local/path # 设置本地目录
cd /remote/path # 设置远程目录
get -r * # 递归下载所有文件2. 非交互式下载
bash
# 使用脚本文件下载
cat > download.txt << EOF
set ftp:ssl-allow no
set ftp:passive-mode on
set ssl:verify-certificate no
open -u test,testpw ftp://192.168.1.12
lcd /local/download/path
cd /remote/path
mirror --parallel=3
quit
EOF
lftp -f download.txt高级下载技巧
1. 多线程下载
bash
# 使用aria2c多线程下载
yum install aria2 -y # CentOS/RHEL
apt install aria2 -y # Ubuntu/Debian
# FTP多线程下载
aria2c -x 8 -s 8 --ftp-user=test --ftp-passwd=testpw ftp://192.168.1.12/home/test/jdk/jdk-8u291-linux-x64.tar.gz2. 下载后验证
bash
# 下载并验证MD5
wget --user=test --password=testpw ftp://192.168.1.12/file.tar.gz
md5sum file.tar.gz
# 下载并校验文件大小
wget --user=test --password=testpw ftp://192.168.1.12/file.tar.gz
ls -lh file.tar.gz3. 批量下载脚本
bash
#!/bin/bash
# 批量FTP下载脚本
SERVER="ftp://192.168.1.12"
USER="test"
PASS="testpw"
REMOTE_DIR="/home/test/jdk"
LOCAL_DIR="/opt/downloads"
# 创建本地目录
mkdir -p "$LOCAL_DIR"
# 读取文件列表下载
while read -r filename; do
echo "正在下载: $filename"
wget --user="$USER" --password="$PASS" "$SERVER$REMOTE_DIR/$filename" -O "$LOCAL_DIR/$filename"
done < filelist.txt安全注意事项
⚠️ 密码安全:
- 避免在命令行中直接输入密码(可被历史记录捕获)
- 使用环境变量或配置文件存储凭证
- 使用FTP over TLS (FTPS)增强安全性
bash
# 使用环境变量存储密码
export FTP_PASS="testpw"
wget --user=test --password="$FTP_PASS" ftp://192.168.1.12/file
unset FTP_PASS⚠️ 网络安全:
- 在非可信网络中避免使用明文FTP
- 考虑使用SFTP替代FTP
- 使用VPN或SSH隧道保护传输
故障排查
1. 连接失败
bash
# 测试FTP连接
ftp 192.168.1.12
# 使用被动模式
wget --passive-ftp --user=test --password=testpw ftp://192.168.1.12/file
# 详细模式查看错误
wget --debug --user=test --password=testpw ftp://192.168.1.12/file2. 下载中断
bash
# 使用断点续传
wget -c --user=test --password=testpw ftp://192.168.1.12/largefile
# 使用curl断点续传
curl -C - -u test:testpw -O ftp://192.168.1.12/largefile性能优化
1. 调整wget参数
bash
# 增加重试次数
wget --tries=10 --timeout=30 --user=test --password=testpw ftp://192.168.1.12/file
# 调整并发下载
wget --user=test --password=testpw -r -np -nH -P5 ftp://192.168.1.12/directory/2. 使用代理
bash
# 通过代理下载
wget -e use_proxy=yes -e https_proxy=192.168.1.1:8080 --user=test --password=testpw ftp://192.168.1.12/file
# curl使用代理
curl -x 192.168.1.1:8080 -u test:testpw -O ftp://192.168.1.12/file总结
Linux命令行工具提供了丰富的FTP下载选项:
- wget:适合递归下载整个目录结构
- curl:灵活的下载工具,支持断点续传
- lftp:功能强大的FTP客户端,适合复杂下载任务
- aria2c:支持多线程下载,提高大文件下载速度
根据实际需求选择合适的工具和参数组合,注意安全性和错误处理,可以高效地完成FTP下载任务。