在 Linux 服務器上,通過命令行 FTP 客戶端將本地目錄打包上傳至遠程 FTP 空間,是常見的異地備份手段。本文演示從打包壓縮、FTP 連接登錄、上傳驗證、腳本自動化、斷點續傳、安全加固的完整流程。

yum install -y ftp / apt install -y ftp(或 lftp、ncftp 功能更強)。/home/wwwroot/aaa/)讀取權限。
cd /home/wwwroot
tar -czf aaa.tar.gz aaa/
# -c 創建 -z gzip壓縮 -f 指定文件名
# 大目錄建議排除緩存/日志:tar -czf aaa.tar.gz --exclude='*.log' --exclude='cache' aaa/
ftp 55.44.33.22
# 或指定端口
ftp 55.44.33.22 2121
# 輸入用戶名、密碼
# 連接成功顯示 ftp> 提示符
ftp> binary # 關鍵:二進制模式,防止文本轉換損壞壓縮包/圖片
ftp> put aaa.tar.gz
# 等待傳輸完成,顯示 226 Transfer complete
ftp> ls -l # 確認遠程文件大小一致
ftp> quit
#!/bin/bash
# /root/scripts/ftp_backup.sh
set -euo pipefail
# 配置區
SRC_DIR="/home/wwwroot/aaa"
BAK_DIR="/tmp/backup"
FTP_HOST="55.44.33.22"
FTP_USER="backup_user"
FTP_PASS="strong_password"
FTP_REMOTE_DIR="/backup/web"
KEEP_DAYS=7
DATE=$(date +%Y%m%d_%H%M%S)
FILENAME="aaa_${DATE}.tar.gz"
# 創建備份目錄
mkdir -p "${BAK_DIR}"
# 打包
tar -czf "${BAK_DIR}/${FILENAME}" -C "$(dirname "${SRC_DIR}")" "$(basename "${SRC_DIR}")"
# 上傳 (使用 lftp 支持腳本化、鏡像、斷點續傳)
lftp -u "${FTP_USER}","${FTP_PASS}" "${FTP_HOST}" <
加入 crontab 定時執行:
# 每天凌晨 2 點
0 2 * * * /root/scripts/ftp_backup.sh >> /var/log/ftp_backup.log 2>&1
| 功能 | 命令/參數 |
|---|---|
| 斷點續傳 | put -c / get -c / mirror -c |
| 鏡像同步 (增量) | mirror -R --only-newer --parallel=4 local_dir remote_dir |
| 限速 | set net:limit-rate 1024000 (1MB/s) |
| FTPS (隱式/顯式 SSL) | set ftp:ssl-force true / set ftp:ssl-protect-data true |
| SFTP (SSH 文件傳輸) | lftp sftp://user:pass@host |
.netrc (權限 600) 或 SSH 密鑰登錄 SFTP。/usr/sbin/nologin)。md5sum / sha256sum。| 現象 | 原因 | 解決 |
|---|---|---|
ftp: command not found | 未安裝 ftp 客戶端 | yum/apt install ftp 或用 lftp/ncftp |
425 Failed to establish connection | 被動模式端口被防火牆阻擋 | FTP 服務器開啟被動端口範圍並放行;客戶端 passive on |
| 上傳後文件損壞/大小不一致 | 未設置 binary 模式 | 上傳前必須 binary |
| 腳本交互式卡住 | ftp 不支持批量腳本 | 改用 lftp 或 expect 腳本 |
| 磁盤空間不足 | 備份文件過大/未清理 | 增量備份、壓縮等級調整、增加保留清理 |
掌握 FTP 備份腳本化、lftp 高級功能、安全加固,能構建可靠、低成本的異地備份體系。關鍵在於:自動化 + 校驗 + 異地 + 定期演練恢復。