linux ftp命令

Linux ftp命令是文件传输协议(File Transfer Protocol)客户端工具,用于在本地计算机和远程服务器之间传输文件。

提示: FTP协议传输数据时默认不加密,建议在安全要求高的环境中使用SFTP或FTPS等加密协议。

语法格式

ftp [选项] [主机名 [端口]]

常用选项

选项 说明
-v 显示详细信息,显示远程服务器的所有响应
-n 禁止自动登录
-i 关闭交互模式(用于脚本)
-d 启用调试模式
-g 禁用文件名通配
-p 使用被动模式(PASV)
主机名 要连接的FTP服务器地址
端口 FTP服务器端口(默认21)

FTP交互模式常用命令

命令 说明 示例
open 连接到FTP服务器 open ftp.example.com
user 输入用户名和密码登录 user username
ls 列出远程目录内容 lsls -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

使用示例

示例1:连接到FTP服务器

# 启动FTP客户端
ftp

# 在FTP提示符下连接服务器
ftp> open ftp.example.com
# 或直接指定服务器
ftp ftp.example.com

# 连接指定端口
ftp ftp.example.com 2121

示例2:匿名FTP访问

# 连接到匿名FTP服务器
ftp ftp.gnu.org

# 用户名输入 anonymous
Name (ftp.gnu.org:user): anonymous

# 密码输入邮箱地址(或直接回车)
Password: your_email@example.com

# 登录成功后显示欢迎信息
230 Login successful.

示例3:文件下载操作

# 下载单个文件
ftp> get README.txt

# 下载并重命名文件
ftp> get source.txt destination.txt

# 下载多个文件(需要确认)
ftp> mget *.pdf

# 不确认直接下载多个文件
ftp> prompt  # 关闭交互确认
ftp> mget *.pdf
ftp> prompt  # 重新打开交互确认

示例4:文件上传操作

# 上传单个文件
ftp> put localfile.txt

# 上传并重命名文件
ftp> put localfile.txt remotefile.txt

# 上传多个文件
ftp> mput *.jpg

# 设置二进制模式上传图片
ftp> binary
ftp> put image.jpg

示例5:目录操作

# 查看远程目录
ftp> ls -la

# 查看本地目录
ftp> !ls -la

# 切换远程目录
ftp> cd /pub/linux

# 切换本地目录
ftp> lcd /home/user/downloads

# 创建远程目录
ftp> mkdir new_directory

# 删除远程目录(必须为空)
ftp> rmdir old_directory

示例6:传输模式设置

# 设置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

示例7:使用脚本自动传输

#!/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 "文件传输完成"

示例8:批量下载操作

# 创建包含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

示例9:高级功能使用

# 恢复中断的下载(仅支持某些服务器)
ftp> reget largefile.zip

# 重命名远程文件
ftp> rename oldname.txt newname.txt

# 显示文件大小
ftp> size filename.txt

# 设置传输缓冲区大小
ftp> hash  # 每传输一个数据块显示一个#号
ftp> hash 2048  # 设置每2048字节显示一个#号

FTP传输模式说明

模式 用途 适用文件类型 命令
ASCII模式 文本文件传输,自动转换换行符 .txt, .html, .php, .css等 ascii
二进制模式 原样传输,不进行任何转换 .jpg, .png, .zip, .exe等 binary
注意:
  • FTP协议默认不加密,用户名和密码以明文传输
  • 使用prompt off关闭交互确认时要小心
  • 二进制模式适合所有文件类型,ASCII模式只适合纯文本
  • 传输大文件时建议使用二进制模式
  • 某些FTP服务器可能限制连接数或传输速度
  • 防火墙可能阻止FTP连接,特别是被动模式
  • 现代系统推荐使用SFTP(SSH File Transfer Protocol)替代FTP

FTP vs SFTP vs FTPS

协议 端口 加密 特点
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编码(需服务器支持)

安全建议

  • 避免在脚本中硬编码密码
  • 使用.netrc文件存储凭据(设置适当权限)
  • 考虑使用SFTP替代FTP
  • 定期更改FTP密码
  • 限制FTP用户权限
  • 使用防火墙限制FTP访问

相关命令

  • sftp - SSH文件传输协议客户端
  • lftp - 功能丰富的FTP客户端
  • ncftp - 增强的FTP客户端
  • curl - 支持多种协议的数据传输
  • wget - 网络下载工具
  • rsync - 高效的文件同步工具