linux ncftp命令

Linux ncftp命令是增强的FTP客户端工具,提供了比传统ftp命令更强大的功能,包括递归下载、断点续传、命令行自动完成等。

提示: ncftp是一个交互式FTP客户端,提供了许多传统ftp命令不具备的高级功能,特别适合需要批量传输文件或需要断点续传的用户。

语法格式

ncftp [选项] [主机名]

常用选项

选项 说明
-u 用户名 指定用户名
-p 密码 指定密码
-P 端口 指定FTP端口(默认21)
-j 用户名:密码@主机名 使用URL格式的登录信息
-a 使用匿名登录
-d 调试级别 设置调试级别(0-9)
-t 超时时间 设置连接超时时间(秒)
-V 显示版本信息
-h 显示帮助信息

ncftp交互模式常用命令

命令 说明 示例
open 连接到FTP服务器 open ftp.example.com
ls 列出远程目录内容 lsls -la
cd 改变远程工作目录 cd /pub
lcd 改变本地工作目录 lcd /home/user
get 下载单个文件 get filename
mget 下载多个文件(支持通配符) mget *.txt
put 上传单个文件 put filename
mput 上传多个文件 mput *.jpg
rename 重命名远程文件 rename oldname newname
delete 删除远程文件 delete filename
rmdir 删除远程目录 rmdir dirname
mkdir 创建远程目录 mkdir dirname
pwd 显示远程当前目录 pwd
lpwd 显示本地当前目录 lpwd
type 设置传输模式 type binarytype ascii
quit/exit 退出ncftp quit
help 显示帮助信息 helphelp 命令
! 执行本地shell命令 !ls -la

使用示例

示例1:连接到FTP服务器

# 启动ncftp客户端
ncftp

# 连接到FTP服务器
ncftp> open ftp.example.com

# 或直接连接
ncftp ftp.example.com

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

示例2:匿名登录

# 匿名登录到FTP服务器
ncftp -a ftp.gnu.org

# 或使用交互模式
ncftp> open ftp.gnu.org
# 提示输入用户名时输入anonymous
# 密码可以输入邮箱地址或直接回车

示例3:递归下载目录

# 递归下载整个目录(ncftp的特殊功能)
ncftp> get -R /pub/linux

# 递归下载并保留目录结构
ncftp> get -R -T /pub/distfiles

示例4:断点续传

# 下载文件,支持断点续传
ncftp> get largefile.iso

# 如果下载中断,重新连接后再次执行get命令
# ncftp会自动检测已下载的部分并继续下载

# 强制重新下载(忽略已下载的部分)
ncftp> get -f largefile.iso

示例5:批量操作

# 批量下载所有PDF文件
ncftp> mget *.pdf

# 批量上传所有图片文件
ncftp> mput *.jpg

# 使用通配符下载特定文件
ncftp> mget data_2023*.csv

示例6:书签功能

# 保存当前连接为书签
ncftp> bookmark save myserver

# 查看所有书签
ncftp> bookmark list

# 使用书签连接
ncftp> open myserver

# 删除书签
ncftp> bookmark delete myserver

示例7:脚本模式使用

#!/bin/bash
# 使用ncftpget进行脚本下载(ncftp套件的一部分)

# 下载单个文件
ncftpget -u username -p password ftp.example.com /local/path/file.txt /remote/path/file.txt

# 递归下载目录
ncftpbatch -u username -p password -R ftp.example.com /local/dir /remote/dir

# 上传文件
ncftpput -u username -p password ftp.example.com /remote/path/ /local/path/file.txt

示例8:高级选项使用

# 设置传输超时
ncftp -t 30 ftp.example.com

# 使用URL格式登录
ncftp -j ftp://username:password@ftp.example.com

# 设置被动模式(默认)
ncftp> passive on

# 设置主动模式
ncftp> passive off

ncftpget命令

ncftpget是ncftp套件中的非交互式下载工具,适合在脚本中使用:

# 基本语法
ncftpget [选项] FTP服务器 本地目录 远程文件...

# 下载示例
ncftpget -u myuser -p mypass ftp.example.com /local/downloads /pub/file1.txt /pub/file2.txt

# 递归下载目录
ncftpget -u myuser -p mypass -R ftp.example.com /local/downloads /pub/somedir/

# 后台下载
ncftpget -b -u myuser -p mypass ftp.example.com /local/downloads /pub/largefile.iso

ncftpput命令

ncftpput是ncftp套件中的非交互式上传工具:

# 基本语法
ncftpput [选项] FTP服务器 远程目录 本地文件...

# 上传示例
ncftpput -u myuser -p mypass ftp.example.com /remote/uploads file1.txt file2.txt

# 递归上传目录
ncftpput -u myuser -p mypass -R ftp.example.com /remote/uploads /local/dir/

# 上传压缩文件
ncftpput -u myuser -p mypass -z ftp.example.com /remote/ /local/backup.tar.gz
注意:
  • ncftp默认使用被动模式(PASV),某些防火墙可能需要调整配置
  • 递归下载可能消耗大量时间和带宽,请谨慎使用
  • 断点续传功能依赖于服务器支持和本地临时文件
  • 书签功能保存在~/.ncftp/bookmarks文件中
  • ncftp支持命令行自动完成,按Tab键可以自动补全命令和文件名
  • 对于敏感数据,建议使用SFTP等加密协议
  • 传输大文件时,建议使用二进制模式(type binary)

安装ncftp

# Ubuntu/Debian系统
sudo apt-get update
sudo apt-get install ncftp

# CentOS/RHEL系统
sudo yum install ncftp

# 从源码编译安装
wget ftp://ftp.ncftp.com/ncftp/ncftp-3.2.6-src.tar.gz
tar -xzf ncftp-3.2.6-src.tar.gz
cd ncftp-3.2.6
./configure --prefix=/usr/local
make
sudo make install

ncftp与标准ftp对比

tr>
特性 标准ftp ncftp
递归下载 不支持 支持(-R选项)
断点续传 不支持 支持
命令行自动完成 不支持 支持
书签功能 不支持 支持
批量脚本支持 有限支持 优秀支持(ncftpget/ncftpput)
传输进度显示 简单显示 详细进度条
目录缓存 有,提高重复访问速度
连接池 支持多个并发连接

常见问题解决

问题:连接超时

解决: 调整超时设置或检查网络

# 增加超时时间
ncftp -t 60 ftp.example.com
# 或在交互模式中
ncftp> set timeout 60
问题:被动模式失败

解决: 尝试主动模式

# 切换到主动模式
ncftp> passive off
# 或禁用防火墙检查
ncftp> set firewall-ip 0.0.0.0
问题:中文文件名乱码

解决: 调整字符集设置

# 设置字符集
ncftp> set charset utf-8
# 或使用英文文件名
问题:递归下载权限错误

解决: 检查目录权限或使用其他方法

# 尝试单个目录下载
ncftp> get /pub/linux/kernel/
# 或使用ncftpget工具
ncftpget -R -u user -p pass ftp.example.com /local /remote

高级功能

配置文件

# ncftp配置文件位于 ~/.ncftp/prefs
# 可以配置默认选项
cat ~/.ncftp/prefs

# 示例配置项:
# autosave-bookmark=true
# xfer-progress=true
# show-status=true
# passive-mode=true

脚本自动化

# 使用ncftpbatch进行批量传输
# 创建批处理文件
cat > transfer.batch << 'EOF'
open ftp.example.com
user myuser mypass
cd /uploads
lcd /local/data
mput *.csv
bye
EOF

# 执行批处理
ncftpbatch -f transfer.batch

相关命令

  • ncftpget - 非交互式FTP下载工具
  • ncftpput - 非交互式FTP上传工具
  • ncftpbatch - 批量FTP传输工具
  • ftp - 标准FTP客户端
  • lftp - 另一个功能丰富的FTP客户端
  • sftp - SSH文件传输协议客户端