Linux ncftp命令是增强的FTP客户端工具,提供了比传统ftp命令更强大的功能,包括递归下载、断点续传、命令行自动完成等。
ncftp [选项] [主机名]
| 选项 | 说明 |
|---|---|
-u 用户名 |
指定用户名 |
-p 密码 |
指定密码 |
-P 端口 |
指定FTP端口(默认21) |
-j 用户名:密码@主机名 |
使用URL格式的登录信息 |
-a |
使用匿名登录 |
-d 调试级别 |
设置调试级别(0-9) |
-t 超时时间 |
设置连接超时时间(秒) |
-V |
显示版本信息 |
-h |
显示帮助信息 |
| 命令 | 说明 | 示例 |
|---|---|---|
open |
连接到FTP服务器 | open ftp.example.com |
ls |
列出远程目录内容 | ls 或 ls -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 binary 或 type ascii |
quit/exit |
退出ncftp | quit |
help |
显示帮助信息 | help 或 help 命令 |
! |
执行本地shell命令 | !ls -la |
# 启动ncftp客户端
ncftp
# 连接到FTP服务器
ncftp> open ftp.example.com
# 或直接连接
ncftp ftp.example.com
# 使用用户名和密码连接
ncftp -u username -p password ftp.example.com
# 匿名登录到FTP服务器
ncftp -a ftp.gnu.org
# 或使用交互模式
ncftp> open ftp.gnu.org
# 提示输入用户名时输入anonymous
# 密码可以输入邮箱地址或直接回车
# 递归下载整个目录(ncftp的特殊功能)
ncftp> get -R /pub/linux
# 递归下载并保留目录结构
ncftp> get -R -T /pub/distfiles
# 下载文件,支持断点续传
ncftp> get largefile.iso
# 如果下载中断,重新连接后再次执行get命令
# ncftp会自动检测已下载的部分并继续下载
# 强制重新下载(忽略已下载的部分)
ncftp> get -f largefile.iso
# 批量下载所有PDF文件
ncftp> mget *.pdf
# 批量上传所有图片文件
ncftp> mput *.jpg
# 使用通配符下载特定文件
ncftp> mget data_2023*.csv
# 保存当前连接为书签
ncftp> bookmark save myserver
# 查看所有书签
ncftp> bookmark list
# 使用书签连接
ncftp> open myserver
# 删除书签
ncftp> bookmark delete myserver
#!/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
# 设置传输超时
ncftp -t 30 ftp.example.com
# 使用URL格式登录
ncftp -j ftp://username:password@ftp.example.com
# 设置被动模式(默认)
ncftp> passive on
# 设置主动模式
ncftp> passive off
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是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
# 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
| 特性 | 标准ftp | ncftp |
|---|---|---|
| 递归下载 | 不支持 | 支持(-R选项) |
| 断点续传 | 不支持 | 支持 |
| 命令行自动完成 | 不支持 | 支持 |
| 书签功能 | 不支持 | 支持 |
| 批量脚本支持 | 有限支持 | 优秀支持(ncftpget/ncftpput) |
| 传输进度显示 | 简单显示 | 详细进度条 | tr>
| 目录缓存 | 无 | 有,提高重复访问速度 |
| 连接池 | 无 | 支持多个并发连接 |
解决: 调整超时设置或检查网络
# 增加超时时间
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文件传输协议客户端