Linux ftp 命令全解:linux-command 手册中的交互式文件传输实战指南
Linux ftp 命令全解:linux-command 手册中的交互式文件传输实战指南
导读
本文以 linux-command 项目中的 ftp 命令手册 为骨架,系统讲解 Linux ftp 客户端的语法、启动选项与 34 个交互式子命令的用法,并结合仓库内 lftp、ncftp、ftpcount、wget 等关联文档做横向对比。读完本文,你将掌握如何通过命令行在本地机与远程 FTP 服务器之间完成目录浏览、文件上传、批量下载、匿名登录与断开会话等完整操作流程。
ftp 命令概述
ftp 是 Linux 自带的文件传输协议(File Transfer Protocol)命令行客户端。虽然文档开头将其描述为"用来设置文件系统相关功能",但从其实际行为看,它的核心职责是以命令行的方式控制在本地机和远程机之间传送文件——FTP 服务器在网上较为常见,而 ftp 命令正是与之交互的最直接工具。掌握这些常用子命令后,日常的 FTP 运维操作将变得非常简单,无需依赖任何图形化客户端。
在 linux-command 项目中,ftp 属于网络文件传输类命令,与 ncftp(增强版 FTP 工具)、lftp(多协议文件客户端)、ftpcount(统计 FTP 在线人数)、ftpwho(显示 FTP 会话详情)等命令共同构成了完整的 FTP 命令族,可对照查阅。
语法与启动方式
ftp(选项)(参数)
启动后 ftp 会进入交互模式,出现 ftp> 提示符。此后所有操作都以子命令的形式在提示符下完成,无需反复输入 ftp 前缀,这也是它区别于 wget、curl 等单次执行型下载工具的最大特点。
启动选项详解
-d:详细显示指令执行过程,便于排错或分析程序执行的情况;
-i:关闭互动模式,不询问任何问题;
-g:关闭本地主机文件名称支持特殊字符的扩充特性;
-n:不使用自动登录;
-v:显示指令执行过程。
| 选项 | 作用 | 典型场景 |
|---|---|---|
-d |
详细显示指令执行过程 | 连接失败或传输出错时排查协议交互细节 |
-i |
关闭互动模式,不询问任何问题 | 配合 mget/mput 批量操作时避免逐个确认 |
-g |
关闭本地文件名通配符(如 *、?)扩充特性 |
需要原样传递含特殊字符的文件名时 |
-n |
不使用自动登录 | 连接到非标准账号环境时,手动输入用户名与密码 |
-v |
显示指令执行过程 | 与 -d 类似但输出相对精简,适合日常观察 |
其中 -i 与批量命令 mget/mput 是黄金搭档:默认情况下 mget 传输每个文件前都会弹出确认提示,加上 -i 后即可"无脑"批量执行。
连接 FTP 服务器
参数:主机
ftp 命令的参数是要连接的 FTP 服务器的主机名或 IP 地址:
ftp 192.168.1.100
ftp ftp.example.com
典型的连接交互流程如下(具体欢迎语随服务器软件而异):
$ ftp 192.168.1.100
Connected to 192.168.1.100.
220 (vsftpd 3.0.3)
Name (192.168.1.100:user): ftpuser
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
连接成功后即进入 ftp> 交互提示符,可开始执行下文介绍的全部子命令。若在命令行直接以 ftp 主机名 启动,多数服务器会尝试按当前系统用户名自动登录,此时可用 -n 选项关闭自动登录,改为手动指定账号。
匿名登录
当目标服务器开放匿名访问时,可使用文档中给出的通用匿名账号:
账号:anonymous
密码: anonymous@
很多公共 FTP 镜像站(例如软件源、开源项目发行站点)都允许 anonymous 账号匿名下载,密码部分常见做法是填写任意邮箱格式的字符串,文档给出的 anonymous@ 即为此类惯例写法。
ftp 交互式命令大全
进入 ftp> 提示符后,可用命令按功能分类如下。这是文档的核心内容,也是日常操作中最常用的部分。
传输模式与行为控制
| 命令 | 作用 |
|---|---|
ascii |
设定以 ASCII 方式传送文件(缺省值),适合纯文本 |
binary |
设定以二进制方式传送文件,适合压缩包、图片、可执行文件 |
bell |
每完成一次文件传送,报警提示 |
case |
当为 ON 时,用 mget 命令拷贝的文件名到本地机器中全部转换为小写字母 |
prompt |
交互提示模式,控制批量操作时是否逐个询问 |
status |
显示当前 FTP 的状态 |
system |
显示远端主机系统类型 |
文本文件用 ascii、二进制文件用 binary 是最基本也是最重要的习惯:用 ASCII 模式传输二进制文件会导致数据损坏,反之则可能使文本文件出现乱码。
目录浏览与路径导航
| 命令 | 作用 |
|---|---|
cd |
同 UNIX 的 cd 命令,切换远端目录 |
cdup |
返回上一级目录 |
dir [remote-directory] [local-file] |
列出当前远端主机目录中的文件;若有本地文件参数,就将结果写至本地文件 |
ls [remote-directory] [local-file] |
同 dir |
pwd |
列出当前远端主机目录 |
dir 与 ls 支持把远端目录列表重定向到本地文件,例如 dir /pub local-list.txt 可把 /pub 的清单保存到本地,便于后续分析。
本地主机操作
| 命令 | 作用 |
|---|---|
lcd |
改变当前本地主机的工作目录;如果缺省,就转到当前用户的 HOME 目录 |
! |
从 ftp 子系统退出到外壳(临时执行本地 shell 命令) |
lcd 决定了文件下载到本地的落盘位置,是最容易忽略但最影响效率的命令之一——先 lcd /home/user/downloads 再执行下载,可避免文件散落在启动目录。! 则可临时回到 shell 执行本地命令(如 !ls),执行完 exit 后返回 ftp>。
文件传输(下载与上传)
| 命令 | 作用 |
|---|---|
get [remote-file] [local-file] |
从远端主机传送文件至本地主机 |
recv remote-file [local-file] |
同 get |
mget [remote-files] |
从远端主机接收一批文件至本地主机 |
put local-file [remote-file] |
将本地一个文件传送至远端主机 |
send local-file [remote-file] |
同 put |
mput local-files |
将本地主机中一批文件传送至远端主机 |
get/put 处理单个文件,mget/mput 配合通配符(如 *.txt)处理批量文件,是文件传输的核心四件套。
远端文件与目录管理
| 命令 | 作用 |
|---|---|
chmod |
改变远端主机的文件权限 |
delete |
删除远端主机中的文件 |
mdelete [remote-files] |
删除一批文件 |
mkdir directory-name |
在远端主机中建立目录 |
rmdir directory-name |
删除远端主机中的目录 |
rename [from] [to] |
改变远端主机中的文件名 |
这些命令将文件管理器常见的"远端文件操作"能力搬进了命令行,配合 dir 可完成远端目录的日常整理。
会话管理
| 命令 | 作用 |
|---|---|
open host [port] |
重新建立一个新的连接 |
close |
终止远端的 FTP 进程,返回到 FTP 命令状态;所有的宏定义都被删除 |
bye |
终止主机 FTP 进程,并退出 FTP 管理方式 |
quit |
同 bye |
user user-name [password] [account] |
重新以别的用户名登录远端主机 |
open 与 user 的价值在于不退出客户端即可切换服务器或账号:close 断开当前连接后,用 open 新主机 再连另一台;或直接用 user 新账号 新密码 在同一台服务器上切换身份。
帮助与宏
| 命令 | 作用 |
|---|---|
help [command] |
输出指定命令的解释 |
? [command] |
同 help;若未指定 command,ftp 将显示全部命令的列表 |
macdef |
定义宏命令,将多条子命令组合成一个宏批量执行 |
忘记某个命令的用法时,help 或 ? 是最快的查阅途径;macdef 则适合把"切目录 → 传文件 → 断开"这类固定流程封装为宏。
关闭 FTP 连接
以下三个命令均用于结束会话:
bye
exit
quit
其中 bye 与 quit 等价,都是终止 FTP 进程并退出管理方式;exit 效果相同。close 则有所不同——它只终止远端 FTP 进程,但会让你返回 ftp> 命令状态(此前的宏定义会被删除),之后仍可用 open 连接其他服务器。
下载文件实战
ftp> get readme.txt # 下载 readme.txt 文件
ftp> mget *.txt # 批量下载当前远端目录下所有 .txt 文件
- 单文件下载用
get,可加第二个参数重命名本地文件:get readme.txt local-readme.txt; - 批量下载用
mget,配合通配符一次拉取多个文件;建议同时配合启动参数-i关闭确认提示,让mget全程无中断执行; - 下载前先用
lcd切换到目标本地目录,再用binary确保二进制文件传输无误。
上传文件实战
ftp> put /path/readme.txt # 上传 readme.txt 文件
ftp> mput *.txt # 可以上传多个文件
- 单文件上传用
put,第一个参数为本地路径,第二个参数可指定远端文件名; - 批量上传用
mput,通配符匹配的是本地文件; - 上传同样遵循"文本用
ascii、二进制用binary"的传输模式原则。
与其他 FTP 命令的联动与选型
linux-command 仓库收录了多个与 FTP 相关的命令,可在不同场景下配合或替代 ftp:
- lftp 命令:更现代的交互式客户端,支持 FTP、SFTP、HTTP、FTPS 等多协议,具备
mget -c断点续传、mirror目录镜像、pget -c -n 10多线程下载等能力,是ftp的强力替代品; - ncftp 命令:增强版 FTP 工具,支持显示传输速率、下载进度、自动续传、书签等功能,其
ncftpput -m -R可递归上传目录并自动创建远端目录; - ftpcount 命令:服务端视角的配套工具,通过读取
/var/run/ftpd.counts显示当前 FTP 登录用户数与连接上限,适合管理员侧排查; - wget 命令:虽然主打 HTTP/HTTPS 下载,但也支持 FTP 协议,适合单次匿名下载大文件且断网后续传的场景。
选型建议:日常交互式维护首选 lftp 或 ncftp;纯下载任务可用 wget;排查服务端并发连接则用 ftpcount 配合 netstat 查看 21 端口连接。
注意事项与安全建议
- 传输模式务必匹配:文本用
ascii、二进制用binary,混用会导致文件损坏; - 批量操作善用
-i:mget/mput结合-i可避免逐个确认,大幅提升效率; - 路径意识:
lcd决定本地落盘位置,cd/pwd决定远端操作位置,二者不可混淆; case选项:开启后mget下载到本地的文件名会被统一转为小写,注意与远端大小写敏感文件名的差异;- 明文传输风险:FTP 协议本身以明文传递账号密码与数据,安全性较弱。仓库的 ftpcount 手册 也明确建议"FTP 协议本身不安全,建议使用 SFTP(SSH 文件传输协议)替代"。涉及敏感数据时,应优先选用 SFTP 或 FTPS。
通过本仓库 command 目录 中的 ftp.md、lftp.md、ncftp.md 等文档,你可以获得 FTP 命令族最完整的中文速查资料;配合 README.md 中描述的 Web 搜索版本,随时随地检索任意命令的用法。