在Linux系统中,FTP(File Transfer Protocol,文件传输协议)是一种常用的文件传输方式,主要用于在客户端和服务器之间上传、下载文件,尽管现代场景中更推荐使用SFTP(基于SSH的安全文件传输)或FTPS(FTP over SSL/TLS)等更安全的协议,但FTP因其简单性和兼容性仍被部分场景使用,本文将详细介绍在Linux系统中如何使用FTP命令行工具进行文件传输,包括安装、连接、基本操作及高级技巧等内容。
安装FTP客户端工具
Linux系统通常默认不安装FTP客户端,需手动安装,常用的FTP客户端工具包括ftp
(基础工具,多数系统自带)、lftp
(功能更强大的增强版)和curlftpfs
(支持挂载FTP目录为本地文件系统),以下以主流发行版为例,介绍安装方法:
基于Debian/Ubuntu的系统
sudo apt update sudo apt install ftp # 安装基础ftp工具 sudo apt install lftp # 安装增强版lftp(推荐) sudo apt install curlftpfs # 安装挂载工具(可选)
基于RHEL/CentOS的系统
sudo yum install ftp # 安装基础ftp工具 sudo yum install lftp # 安装增强版lftp sudo yum install curlftpfs # 安装挂载工具(可选)
基于Arch Linux的系统
sudo pacman -S ftp # 安装基础ftp工具 sudo pacman -S lftp # 安装增强版lftp sudo pacman -S curlftpfs # 安装挂载工具(可选)
连接FTP服务器
使用FTP工具前,需确保目标FTP服务器已开启,并获取服务器的地址、端口、用户名及密码(匿名登录则无需密码),以下是连接步骤:
使用基础ftp
命令连接
ftp ftp.example.com # 连接FTP服务器(默认端口21) ftp ftp.example.com 2121 # 指定非默认端口(如2121)
连接后,根据提示输入用户名和密码:
- 匿名登录:用户名输入
anonymous
,密码留空或输入任意邮箱(如test@example.com
)。 - 普通用户登录:输入服务器分配的用户名和密码。
使用lftp
命令连接(推荐)
lftp
支持更友好的交互界面和高级功能(如断点续传、多线程传输),推荐优先使用:
lftp ftp.example.com # 连接并自动提示输入用户名密码 lftp ftp://username:password@ftp.example.com # 直接在命令中指定用户名密码(不安全,慎用)
连接成功后,命令行会显示lftp ftp.example.com:
,进入FTP交互模式。
FTP基本操作
连接成功后,可通过命令进行文件传输和目录管理,以下是常用操作(以ftp
和lftp
为例,部分命令在两者中通用):
目录操作
命令 | 功能说明 | 示例 |
---|---|---|
pwd |
显示当前远程工作目录 | ftp> pwd → /home/user |
cd 目录名 |
切换远程目录 | ftp> cd upload |
lcd 目录名 |
切换本地工作目录(客户端本地) | ftp> lcd /tmp |
ls |
列出远程目录文件(简略信息) | ftp> ls |
dir |
列出远程目录文件(详细信息) | ftp> dir |
mkdir 目录名 |
创建远程目录 | ftp> mkdir new_folder |
rmdir 目录名 |
删除远程空目录 | ftp> rmdir old_folder |
文件传输
命令 | 功能说明 | 示例 |
---|---|---|
get 文件名 |
下载远程单个文件到本地 | ftp> get file.txt |
mget 文件名1 文件名2 |
下载远程多个文件(支持通配符) | ftp> mget *.txt |
put 文件名 |
上传本地单个文件到远程 | ftp> put local_file.zip |
mput 文件名1 文件名2 |
上传本地多个文件(支持通配符) | ftp> mput *.jpg |
delete 文件名 |
删除远程单个文件 | ftp> delete temp.log |
mdelete 文件名1... |
删除远程多个文件 | ftp> mdelete *.tmp |
传输模式设置
FTP默认使用ASCII模式传输文本文件,但二进制文件(如图片、压缩包)需切换为二进制模式,否则可能损坏文件:
ftp> binary # 切换为二进制模式(推荐传输所有文件时使用) ftp> ascii # 切换为ASCII模式(仅用于纯文本文件)
传输状态与控制
命令 | 功能说明 | 示例 |
---|---|---|
hash |
显示传输进度(每传输1024字节显示#) | ftp> hash → 开启,ftp> hash → 关闭 |
status |
显示当前FTP连接状态 | ftp> status |
执行本地系统命令 | ftp> ! ls → 列出本地目录 |
|
bye /quit |
退出FTP连接 | ftp> bye |
FTP高级技巧
被动模式(PASV)设置
若FTP服务器位于内网或防火墙后,需开启被动模式,使客户端主动连接服务器数据端口,避免连接失败:
ftp> passive # 开启被动模式(lftp默认开启) ftp> passive off # 关闭被动模式
断点续传
传输大文件时,若网络中断,可通过restart
命令从断点继续传输(需服务器支持):
ftp> get large_file.zip # 传输中断后重新连接,执行: ftp> restart 102400 # 从102400字节处继续下载
批量传输脚本
通过结合Shell脚本,可实现自动化文件传输,使用lftp
上传本地目录到远程:
#!/bin/bash lftp -u username,password ftp.example.com << EOF cd /remote/upload lcd /local/folder mput * bye EOF
将脚本保存为upload.sh
,赋予执行权限后运行:chmod +x upload.sh && ./upload.sh
。
挂载FTP目录为本地文件系统(可选)
使用curlftpfs
可将FTP服务器目录挂载到本地,像操作本地文件一样操作远程文件:
# 安装curlftpfs(见第一节) mkdir /mnt/ftp curlftpfs ftp.example.com /mnt/ftp -o user=username:password # 挂载后可通过cd /mnt/ftp访问远程文件 # 卸载:fusermount -u /mnt/ftp
常见问题与注意事项
- 安全性问题:FTP传输数据(包括密码)为明文,易被窃听,生产环境建议使用SFTP(基于SSH)或FTPS(FTP over SSL/TLS)替代。
- 权限问题:上传文件时需确保远程目录有写入权限,本地文件有读取权限;下载文件时需确保本地目录有写入权限。
- 连接超时:若长时间无操作,FTP服务器可能断开连接,可通过
ftp> idle 300
设置超时时间(单位:秒)。
相关问答FAQs
Q1: Linux下FTP连接失败,提示“Connection refused”可能的原因及解决方法?
A: 可能原因包括:
- FTP服务器未启动或端口错误(默认21端口):检查服务器状态,确认端口是否开放(可通过
telnet ftp.example.com 21
测试)。 - 防火墙拦截:客户端或服务器防火墙可能阻止FTP连接,需开放21端口(命令模式)及数据端口(被动模式下随机端口,如
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
)。 - 被动模式未开启:若服务器位于内网,需在FTP客户端执行
passive
命令开启被动模式。
Q2: 使用FTP上传文件时提示“Permission denied”,如何解决?
A: 主要原因及解决方法:
- 远程目录权限不足:需联系FTP管理员,确保当前用户对目标目录有写入权限(可通过
dir
命令查看目录权限,或使用chmod
命令修改权限,如ftp> chmod 755 upload
)。 - 本地文件权限不足:确保本地文件可读(如
chmod 644 local_file
)。 - 磁盘空间不足:检查服务器磁盘剩余空间(通过
ftp> df
命令查看),清理无用文件后重试。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/22224.html