Linux ftp命令是文件传输协议(File Transfer Protocol)客户端工具,用于在本地计算机和远程服务器之间传输文件。
ftp [选项] [主机名 [端口]]
| 选项 | 说明 |
|---|---|
-v |
显示详细信息,显示远程服务器的所有响应 |
-n |
禁止自动登录 |
-i |
关闭交互模式(用于脚本) |
-d |
启用调试模式 |
-g |
禁用文件名通配 |
-p |
使用被动模式(PASV) |
主机名 |
要连接的FTP服务器地址 |
端口 |
FTP服务器端口(默认21) |
| 命令 | 说明 | 示例 |
|---|---|---|
open |
连接到FTP服务器 | open ftp.example.com |
user |
输入用户名和密码登录 | user username |
ls |
列出远程目录内容 | ls 或 ls -la |
cd |
改变远程工作目录 | cd /pub |
lcd |
改变本地工作目录 | lcd /home/user |
get |
下载单个文件 | get filename |
mget |
下载多个文件(支持通配符) | mget *.txt |
put |
上传单个文件 | put filename |
mput |
上传多个文件 | mput *.jpg |
delete |
删除远程文件 | delete filename |
mkdir |
在远程创建目录 | mkdir dirname |
rmdir |
删除远程目录 | rmdir dirname |
binary |
设置二进制传输模式 | binary |
ascii |
设置ASCII文本传输模式 | ascii |
pwd |
显示远程当前目录 | pwd |
lpwd |
显示本地当前目录 | lpwd |
bye/quit |
退出FTP会话 | bye |
help |
显示帮助信息 | help 或 ? |
! |
执行本地shell命令 | !ls -la |
# 启动FTP客户端
ftp
# 在FTP提示符下连接服务器
ftp> open ftp.example.com
# 或直接指定服务器
ftp ftp.example.com
# 连接指定端口
ftp ftp.example.com 2121
# 连接到匿名FTP服务器
ftp ftp.gnu.org
# 用户名输入 anonymous
Name (ftp.gnu.org:user): anonymous
# 密码输入邮箱地址(或直接回车)
Password: your_email@example.com
# 登录成功后显示欢迎信息
230 Login successful.
# 下载单个文件
ftp> get README.txt
# 下载并重命名文件
ftp> get source.txt destination.txt
# 下载多个文件(需要确认)
ftp> mget *.pdf
# 不确认直接下载多个文件
ftp> prompt # 关闭交互确认
ftp> mget *.pdf
ftp> prompt # 重新打开交互确认
# 上传单个文件
ftp> put localfile.txt
# 上传并重命名文件
ftp> put localfile.txt remotefile.txt
# 上传多个文件
ftp> mput *.jpg
# 设置二进制模式上传图片
ftp> binary
ftp> put image.jpg
# 查看远程目录
ftp> ls -la
# 查看本地目录
ftp> !ls -la
# 切换远程目录
ftp> cd /pub/linux
# 切换本地目录
ftp> lcd /home/user/downloads
# 创建远程目录
ftp> mkdir new_directory
# 删除远程目录(必须为空)
ftp> rmdir old_directory
# 设置ASCII模式(适合文本文件)
ftp> ascii
200 Switching to ASCII mode.
# 设置二进制模式(适合图片、压缩文件等)
ftp> binary
200 Switching to Binary mode.
# 检查当前传输模式
ftp> status
Connected to ftp.example.com.
Type: binary; Verbose: On; Bell: Off; Prompting: On; Globbing: On
#!/bin/bash
# 自动FTP传输脚本
FTP_HOST="ftp.example.com"
FTP_USER="username"
FTP_PASS="password"
LOCAL_DIR="/home/user/local"
REMOTE_DIR="/pub/files"
# 使用heredoc执行FTP命令
ftp -n -v $FTP_HOST << EOF
user $FTP_USER $FTP_PASS
binary
cd $REMOTE_DIR
lcd $LOCAL_DIR
mput *.txt
bye
EOF
echo "文件传输完成"
# 创建包含FTP命令的文件
cat > ftp_commands.txt << 'EOF'
open ftp.example.com
user username password
binary
cd /pub/downloads
lcd /home/user/downloads
mget *.zip
bye
EOF
# 执行批量下载
ftp -n < ftp_commands.txt
# 恢复中断的下载(仅支持某些服务器)
ftp> reget largefile.zip
# 重命名远程文件
ftp> rename oldname.txt newname.txt
# 显示文件大小
ftp> size filename.txt
# 设置传输缓冲区大小
ftp> hash # 每传输一个数据块显示一个#号
ftp> hash 2048 # 设置每2048字节显示一个#号
| 模式 | 用途 | 适用文件类型 | 命令 |
|---|---|---|---|
| ASCII模式 | 文本文件传输,自动转换换行符 | .txt, .html, .php, .css等 | ascii |
| 二进制模式 | 原样传输,不进行任何转换 | .jpg, .png, .zip, .exe等 | binary |
prompt off关闭交互确认时要小心| 协议 | 端口 | 加密 | 特点 |
|---|---|---|---|
| FTP | 21(控制) 20(数据) |
不加密 | 传统协议,广泛支持 |
| SFTP | 22 | SSH加密 | 安全,基于SSH,单连接 |
| FTPS | 990(隐式) 21(显式) |
SSL/TLS加密 | FTP over SSL,需要证书 |
可能原因: 服务器地址错误、端口错误或防火墙阻止
解决:
# 检查网络连接
ping ftp.example.com
# 检查端口是否开放
telnet ftp.example.com 21
# 使用被动模式
ftp -p ftp.example.com
可能原因: 用户名/密码错误或权限不足
解决:
# 检查用户名密码
# 联系服务器管理员
# 尝试匿名登录
ftp> user anonymous
解决: 调整传输模式或使用压缩
# 使用二进制模式
ftp> binary
# 关闭哈希显示
ftp> hash off
# 调整TCP窗口大小(需服务器支持)
解决: 使用英文文件名或调整编码
# 重命名为英文
ftp> rename 中文文件.txt english_file.txt
# 使用UTF-8编码(需服务器支持)
sftp - SSH文件传输协议客户端lftp - 功能丰富的FTP客户端ncftp - 增强的FTP客户端curl - 支持多种协议的数据传输wget - 网络下载工具rsync - 高效的文件同步工具