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 关闭当前连接。
quit 或 exit 退出 ncftp。
目录操作
命令 说明
pwd 显示远程当前目录。
lpwd 显示本地当前目录。
cd <目录> 切换远程目录。
lcd <目录> 切换本地目录。
mkdir <目录> 创建远程目录。
rmdir <目录> 删除远程目录。
chmod <权限> <文件> 更改远程文件权限。
文件操作
命令 说明
ls [选项] [目录] 列出远程文件。
lls [选项] [目录] 列出本地文件。
get <远程文件> [本地文件] 下载文件。
put <本地文件> [远程文件] 上传文件。
mget <模式> 使用通配符下载多个文件。
mput <模式> 使用通配符上传多个文件。
rename <旧名> <新名> 重命名远程文件。
delete <文件> 删除远程文件。
rm <文件> 删除远程文件(同 delete)。
mv <源> <目标> 移动远程文件。
cp <源> <目标> 复制远程文件(某些服务器支持)。
传输设置
命令 说明
ascii 使用 ASCII 传输模式。
binary 或 image 使用二进制传输模式。
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 服务器的优秀工具。

相关推荐
未济4 天前
linux 配置环境变量
linux
傲世仙尊4 天前
目录即文件-Ext文件系统收尾篇
linux·c语言
虎头金猫4 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
_艾伦 耶格尔.4 天前
进程间通信
linux
AI职业加油站4 天前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
Liuqy-054 天前
Linux IO编程——静态库、动态库
linux
此冬歌咏4 天前
K8s 节点故障实战:优雅驱逐 31 秒,硬故障 331 秒,以及那个永远 Pending 的 Pod
运维·k8s
彧azz4 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
-梅4 天前
linux(8) 软硬链接
linux·运维·服务器
AIgorithmGEEK4 天前
[Linux]线程三部曲(上):一个执行流的诞生——从操作系统一路拆到 pthread_create
linux·线程·pid