Linux命令-ncftp(增强的的FTP工具)

ncftp 是 Linux 中一个功能强大的 FTP 客户端 ,提供了比传统 ftp 命令更丰富的功能和更友好的界面。它支持自动登录、断点续传、递归传输、书签管理等功能,是 FTP 操作的强大工具。

📖 基本语法

bash 复制代码
ncftp [选项] [主机名]
ncftpget [选项] 主机名 [远程文件] [本地文件]
ncftpput [选项] 主机名 [本地文件] [远程文件]
ncftpls [选项] 主机名 [远程目录]
ncftpbatch [选项] [批处理文件]

重要特性

  • 支持断点续传
  • 支持递归目录操作
  • 支持书签管理
  • 支持命令行补全
  • 支持通配符操作
  • 支持被动和主动模式

🎯 常用选项

ncftp 通用选项
选项 说明
-u <用户名> 指定登录用户名。
-p <密码> 指定登录密码。
-P <端口> 指定 FTP 服务器端口(默认 21)。
-j <账号> 指定账号(某些 FTP 服务器需要)。
-h 显示帮助信息。
-v 显示版本信息。
-d <级别> 设置调试级别(0-10)。
-t <秒> 设置超时时间。
-r <秒> 设置重试间隔。
-R <次数> 设置重试次数。
-f <文件> 从文件读取登录信息。
-F 使用被动模式(PASV)。
-A 使用主动模式(PORT)。
-V 详细输出模式。
-X 使用 ASCII 传输模式。
-Y 使用二进制传输模式。
ncftpget 特定选项
选项 说明
-c 断点续传(如果文件已存在)。
-C 强制断点续传。
-T 使用临时文件传输。
-R 递归下载目录。
-m 使用通配符。
-DD 下载后删除远程文件。
-z 远程文件较新时才下载。
-Z 远程文件较旧或相同时才下载。
-f 强制覆盖本地文件。
-E 使用 EPSV 命令(扩展被动模式)。
ncftpput 特定选项
选项 说明
-c 断点续传(如果文件已存在)。
-C 强制断点续传。
-T 使用临时文件传输。
-R 递归上传目录。
-m 使用通配符。
-z 本地文件较新时才上传。
-Z 本地文件较旧或相同时才上传。
-f 强制覆盖远程文件。
-E 使用 EPSV 命令(扩展被动模式)。

💡 核心用法示例

1. 交互式 FTP 会话
bash 复制代码
# 连接到 FTP 服务器
ncftp ftp.example.com

# 使用用户名和密码连接
ncftp -u username -p password ftp.example.com

# 使用特定端口连接
ncftp -P 2121 ftp.example.com

# 使用被动模式连接
ncftp -F ftp.example.com

# 使用主动模式连接
ncftp -A ftp.example.com
2. 下载文件(ncftpget)
bash 复制代码
# 下载单个文件
ncftpget ftp.example.com /remote/file.txt /local/path/

# 下载文件并指定用户名密码
ncftpget -u username -p password ftp.example.com /remote/file.txt /local/path/

# 断点续传下载
ncftpget -c ftp.example.com /remote/largefile.iso /local/path/

# 递归下载目录
ncftpget -R ftp.example.com /remote/directory/ /local/path/

# 使用通配符下载多个文件
ncftpget -m ftp.example.com /remote/*.txt /local/path/

# 下载后删除远程文件
ncftpget -DD ftp.example.com /remote/file.txt /local/path/

# 只下载较新的文件
ncftpget -z ftp.example.com /remote/file.txt /local/path/
3. 上传文件(ncftpput)
bash 复制代码
# 上传单个文件
ncftpput ftp.example.com /remote/path/ /local/file.txt

# 上传文件并指定用户名密码
ncftpput -u username -p password ftp.example.com /remote/path/ /local/file.txt

# 断点续传上传
ncftpput -c ftp.example.com /remote/path/ /local/largefile.iso

# 递归上传目录
ncftpput -R ftp.example.com /remote/path/ /local/directory/

# 使用通配符上传多个文件
ncftpput -m ftp.example.com /remote/path/ /local/*.txt

# 只上传较新的文件
ncftpput -z ftp.example.com /remote/path/ /local/file.txt
4. 列出文件(ncftpls)
bash 复制代码
# 列出远程目录
ncftpls ftp.example.com /remote/path/

# 列出详细信息
ncftpls -l ftp.example.com /remote/path/

# 递归列出目录
ncftpls -R ftp.example.com /remote/path/

# 列出隐藏文件
ncftpls -a ftp.example.com /remote/path/

# 按时间排序
ncftpls -t ftp.example.com /remote/path/

# 按大小排序
ncftpls -S ftp.example.com /remote/path/
5. 批处理操作(ncftpbatch)
bash 复制代码
# 创建批处理文件
cat > ftp_batch.txt << 'EOF'
open ftp.example.com
user username password
cd /remote/path
get file1.txt
get file2.txt
put localfile.txt
quit
EOF

# 执行批处理
ncftpbatch ftp_batch.txt

# 使用 ncftpbatch 直接执行命令
ncftpbatch -c "open ftp.example.com; user username password; ls; quit"

🔧 交互式命令

进入 ncftp 交互模式后,可以使用以下命令:

连接和认证
命令 说明
open <主机名> 连接到 FTP 服务器。
user <用户名> [密码] 登录到 FTP 服务器。
auth 重新认证。
close 关闭当前连接。
quitexit 退出 ncftp。
目录操作
命令 说明
pwd 显示远程当前目录。
lpwd 显示本地当前目录。
cd <目录> 切换远程目录。
lcd <目录> 切换本地目录。
mkdir <目录> 创建远程目录。
rmdir <目录> 删除远程目录。
chmod <权限> <文件> 更改远程文件权限。
文件操作
命令 说明
ls [选项] [目录] 列出远程文件。
lls [选项] [目录] 列出本地文件。
get <远程文件> [本地文件] 下载文件。
put <本地文件> [远程文件] 上传文件。
mget <模式> 使用通配符下载多个文件。
mput <模式> 使用通配符上传多个文件。
rename <旧名> <新名> 重命名远程文件。
delete <文件> 删除远程文件。
rm <文件> 删除远程文件(同 delete)。
mv <源> <目标> 移动远程文件。
cp <源> <目标> 复制远程文件(某些服务器支持)。
传输设置
命令 说明
ascii 使用 ASCII 传输模式。
binaryimage 使用二进制传输模式。
mode <模式> 设置传输模式(S=流,B=块,C=压缩)。
passive 切换被动模式。
active 切换主动模式。
type <类型> 设置传输类型(A=ASCII,I=二进制)。
书签管理
命令 说明
bookmark 显示书签列表。
bookmark add <名称> 添加当前连接为书签。
bookmark delete <名称> 删除书签。
bookmark edit 编辑书签文件。
bookmark <名称> 连接到书签。
其他命令
命令 说明
help [命令] 显示帮助信息。
!<命令> 执行本地 shell 命令。
set <选项> 设置选项。
show 显示当前设置。
site <命令> 发送 SITE 命令到服务器。
quote <命令> 发送原始 FTP 命令。
version 显示 ncftp 版本。
about 显示关于信息。

📁 书签功能

ncftp 的书签功能可以保存 FTP 连接信息,方便快速连接。

1. 创建书签
bash 复制代码
# 连接到 FTP 服务器
ncftp ftp.example.com

# 登录后添加书签
bookmark add myserver

# 直接创建书签(不连接)
ncftp
bookmark add myserver ftp://username:password@ftp.example.com
2. 使用书签
bash 复制代码
# 连接到书签
ncftp myserver

# 在交互模式中使用书签
open myserver
3. 管理书签
bash 复制代码
# 列出所有书签
bookmark

# 编辑书签
bookmark edit

# 删除书签
bookmark delete myserver

# 书签文件位置:~/.ncftp/bookmarks

🔄 断点续传

ncftp 支持断点续传,对于大文件传输非常有用。

bash 复制代码
# 下载时断点续传
ncftpget -c ftp.example.com /remote/largefile.iso /local/path/

# 上传时断点续传
ncftpput -c ftp.example.com /remote/path/ /local/largefile.iso

# 强制断点续传(即使时间戳不同)
ncftpget -C ftp.example.com /remote/largefile.iso /local/path/

📊 递归传输

ncftp 支持递归传输整个目录结构。

bash 复制代码
# 递归下载目录
ncftpget -R ftp.example.com /remote/directory/ /local/path/

# 递归上传目录
ncftpput -R ftp.example.com /remote/path/ /local/directory/

# 递归列出目录
ncftpls -R ftp.example.com /remote/path/

⚙️ 配置文件

ncftp 的配置文件位于 ~/.ncftp/ 目录。

主要配置文件
  1. ~/.ncftp/prefs - 用户首选项
  2. ~/.ncftp/bookmarks - 书签文件
  3. ~/.ncftp/trace - 跟踪日志
  4. ~/.ncftp/firewall - 防火墙设置
示例配置文件
bash 复制代码
# ~/.ncftp/prefs 示例
allow-clobber=no
confirm-close=yes
logsize=0
passive-mode=yes
progress-meter=2
recursive-list=no
save-passwords=no
show-status=yes
xfer-progress=yes

🛠️ 实用脚本

1. 自动备份脚本
bash 复制代码
#!/bin/bash
# 自动备份到 FTP 服务器

FTP_HOST="ftp.example.com"
FTP_USER="username"
FTP_PASS="password"
FTP_DIR="/backups/"
LOCAL_DIR="/backup/"
BACKUP_FILE="backup_$(date +%Y%m%d_%H%M%S).tar.gz"

# 创建本地备份
echo "创建本地备份..."
tar -czf "$LOCAL_DIR/$BACKUP_FILE" /path/to/backup

# 上传到 FTP
echo "上传到 FTP 服务器..."
ncftpput -u "$FTP_USER" -p "$FTP_PASS" -c "$FTP_HOST" "$FTP_DIR" "$LOCAL_DIR/$BACKUP_FILE"

if [[ $? -eq 0 ]]; then
    echo "备份成功: $BACKUP_FILE"
    
    # 清理旧备份(保留最近7天)
    find "$LOCAL_DIR" -name "backup_*.tar.gz" -mtime +7 -delete
    
    # 清理远程旧备份
    echo "清理远程旧备份..."
    ncftpls -l -u "$FTP_USER" -p "$FTP_PASS" "$FTP_HOST" "$FTP_DIR" | \
        grep "backup_" | sort -r | tail -n +8 | awk '{print $9}' | \
        while read -r old_file; do
            echo "删除: $old_file"
            ncftp -u "$FTP_USER" -p "$FTP_PASS" "$FTP_HOST" <<EOF
cd $FTP_DIR
delete $old_file
quit
EOF
        done
else
    echo "备份失败"
    exit 1
fi
2. 同步目录脚本
bash 复制代码
#!/bin/bash
# 同步本地目录到 FTP 服务器

FTP_HOST="ftp.example.com"
FTP_USER="username"
FTP_PASS="password"
REMOTE_DIR="/website/"
LOCAL_DIR="/var/www/html/"
LOG_FILE="/var/log/ftp_sync.log"

echo "=== 开始同步 $(date) ===" >> "$LOG_FILE"

# 上传新增和修改的文件
find "$LOCAL_DIR" -type f -newer "$LOG_FILE" 2>/dev/null | while read -r file; do
    rel_path="${file#$LOCAL_DIR}"
    remote_path="$REMOTE_DIR${rel_path%/*}"
    
    echo "上传: $rel_path" | tee -a "$LOG_FILE"
    
    # 确保远程目录存在
    ncftp -u "$FTP_USER" -p "$FTP_PASS" "$FTP_HOST" <<EOF 2>/dev/null
mkdir -p $remote_path
quit
EOF
    
    # 上传文件
    ncftpput -u "$FTP_USER" -p "$FTP_PASS" -z "$FTP_HOST" "$remote_path" "$file"
    
    if [[ $? -eq 0 ]]; then
        echo "成功: $rel_path" >> "$LOG_FILE"
    else
        echo "失败: $rel_path" >> "$LOG_FILE"
    fi
done

# 删除本地不存在的远程文件(可选)
echo "同步完成 $(date)" >> "$LOG_FILE"
3. FTP 监控脚本
bash 复制代码
#!/bin/bash
# 监控 FTP 服务器状态

FTP_HOST="ftp.example.com"
FTP_USER="username"
FTP_PASS="password"
CHECK_FILE="health_check.txt"
TIMEOUT=30
RETRY=3

check_ftp() {
    local attempt=1
    while [[ $attempt -le $RETRY ]]; do
        echo "尝试 $attempt/$RETRY 连接 FTP 服务器..."
        
        # 测试连接和基本操作
        ncftp -u "$FTP_USER" -p "$FTP_PASS" -t "$TIMEOUT" "$FTP_HOST" <<EOF 2>/dev/null
pwd
put /dev/null $CHECK_FILE
delete $CHECK_FILE
quit
EOF
        
        if [[ $? -eq 0 ]]; then
            echo "FTP 服务器正常"
            return 0
        fi
        
        sleep 5
        ((attempt++))
    done
    
    echo "FTP 服务器连接失败"
    return 1
}

# 执行检查
if check_ftp; then
    echo "状态: 正常"
    exit 0
else
    echo "状态: 异常"
    # 发送警报
    echo "FTP 服务器 $FTP_HOST 连接失败" | mail -s "FTP 服务器警报" admin@example.com
    exit 1
fi

🔍 调试和故障排除

1. 启用调试模式
bash 复制代码
# 设置调试级别
ncftp -d 5 ftp.example.com

# 在交互模式中启用调试
set debug 5

# 查看调试信息
show debug
2. 常见错误解决
bash 复制代码
# 连接超时
# 增加超时时间
ncftp -t 60 ftp.example.com

# 被动模式问题
# 尝试主动模式
ncftp -A ftp.example.com

# 防火墙问题
# 检查防火墙设置
sudo iptables -L
sudo firewall-cmd --list-all

# 权限问题
# 检查文件权限
ls -la /path/to/file

# 磁盘空间不足
# 检查磁盘空间
df -h
3. 查看传输统计
bash 复制代码
# 在交互模式中查看统计
show transfer-status

# 查看连接信息
show connection

# 查看设置
show all

📌 最佳实践

  1. 使用书签:对于经常访问的 FTP 服务器,使用书签功能。
  2. 启用断点续传 :对于大文件传输,始终使用 -c 选项。
  3. 使用二进制模式:对于非文本文件,使用二进制模式传输。
  4. 检查传输完整性:传输完成后验证文件大小和 MD5。
  5. 使用临时文件 :对于重要文件,使用 -T 选项。
  6. 定期清理:定期清理旧的备份和临时文件。
  7. 安全考虑:避免在命令行中直接输入密码,使用配置文件或环境变量。

🔄 与其他 FTP 工具对比

特性 ncftp ftp lftp curl
断点续传 支持 不支持 支持 支持
递归传输 支持 不支持 支持 支持
书签管理 支持 不支持 支持 不支持
命令行补全 支持 不支持 支持 不支持
脚本友好 中等
协议支持 FTP FTP FTP/HTTP/SFTP 多协议
学习曲线 简单 简单 中等 简单

🎯 快速参考卡

复制代码
基本连接:
  ncftp ftp.example.com
  ncftp -u user -p pass ftp.example.com
  ncftp -P 2121 ftp.example.com

文件传输:
  ncftpget -c -R ftp.example.com /remote/ /local/
  ncftpput -c -R ftp.example.com /remote/ /local/

交互命令:
  open, user, close, quit
  ls, lls, cd, lcd
  get, put, mget, mput
  mkdir, rmdir, delete, rename
  bookmark, help, !

书签管理:
  bookmark add name
  bookmark delete name
  bookmark
  open name

ncftp 是一个功能丰富的 FTP 客户端,特别适合需要断点续传、递归传输和书签管理的场景。虽然现在 SFTP 和云存储更常用,但 FTP 在某些传统环境中仍然广泛使用,ncftp 是管理 FTP 服务器的优秀工具。

相关推荐
深念Y1 小时前
从CH341A编程器、SPI Flash到Linux+STM32理解
linux·stm32·flash·bios·固件·编程器·闪存
Shingmc33 小时前
【Linux】线程互斥与同步
linux
Vect__10 小时前
深刻理解进程、线程、程序
linux
w61001046610 小时前
CKAD-2026-Ingress
运维·k8s·ckad
末日汐11 小时前
传输层协议UDP
linux·网络·udp
zzzsde14 小时前
【Linux】库的制作和使用(3)ELF&&动态链接
linux·运维·服务器
CQU_JIAKE14 小时前
4.3【A]
linux·运维·服务器
AI周红伟14 小时前
OpenClaw是什么?OpenClaw能做什么?OpenClaw详细介绍及保姆级部署教程-周红伟
大数据·运维·服务器·人工智能·微信·openclaw
Elastic 中国社区官方博客14 小时前
当 TSDS 遇到 ILM:设计不会拒绝延迟数据的时间序列数据流
大数据·运维·数据库·elasticsearch·搜索引擎·logstash