Skip to content

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层目录结构
--userFTP用户名
--passwordFTP密码

2. 下载单个文件

bash
wget --user=test --password=testpw ftp://192.168.1.12/home/test/jdk/jdk-8u291-linux-x64.tar.gz

3. 高级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.gz

2. 下载后验证

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.gz

3. 批量下载脚本

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/file

2. 下载中断

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下载任务。

用心记录,持续学习 | CNB