Linux 中的文件传输核心命令:get 与 put
在 Linux 环境下,文件传输是日常运维和开发中的常见需求,无论是远程服务器管理、跨设备数据同步,还是自动化脚本中的文件操作,高效、可靠的文件传输工具都至关重要。get 和 put 命令作为文件传输协议中的基础操作,广泛应用于 FTP、SFTP、SCP 等场景,本文将深入解析这两个命令的功能、使用方法、适用场景及最佳实践,帮助读者掌握 Linux 环境下的文件传输技巧。

理解 get 与 put 的核心概念
get 和 put 是文件传输协议中用于双向数据传输的命令,二者的核心区别在于数据流向:
- get(Get):从远程服务器下载文件到本地主机,其功能是将远程系统中的文件或目录复制到本地,常用于获取服务器上的配置文件、日志或备份数据。
- put(Put):从本地主机上传文件到远程服务器,其功能是将本地系统中的文件或目录复制到远程系统,常用于更新服务器代码、上传数据集或部署应用。
这两个命令并非 Linux 系统的原生命令,而是依赖于特定的文件传输协议工具,如 ftp、sftp、lftp 或 scp,不同工具下的 get 和 put 命令语法可能略有差异,但核心逻辑一致。
常用工具中的 get 与 put 使用方法
FTP(File Transfer Protocol)
FTP 是一种传统的文件传输协议,支持 get 和 put 命令,但数据传输为明文,安全性较低。
-
基本语法:
ftp [remote_server]
连接后进入 FTP 交互界面,可使用以下命令:
get [remote_file] [local_file]:下载远程文件到本地,可指定本地文件名。put [local_file] [remote_file]:上传本地文件到远程,可指定远程文件名。mget [remote_files]:批量下载多个远程文件(支持通配符)。mput [local_files]:批量上传多个本地文件。
-
示例:
ftp 192.168.1.100 Connected to 192.168.1.100 (192.168.1.100). 220 (vsFTPd 3.0.3) Name (192.168.1.100:user): username 331 Please specify the password. Password: 230 Login successful. ftp> get config.txt /home/user/config.txt # 下载文件 local: /home/user/config.txt remote: config.txt 226 File send OK. ftp> put local_file.txt remote_file.txt # 上传文件 local: local_file.txt remote: remote_file.txt 226 File send OK.
SFTP(SSH File Transfer Protocol)
SFTP 基于 SSH 协议,加密传输数据,安全性高于 FTP,是目前推荐使用的文件传输方式。
-
基本语法:
sftp [username]@[remote_server]
连接后进入 SFTP 交互界面,命令与 FTP 类似,但语法更严格:

get [-r] [remote_file] [local_file]:下载文件,-r选项用于下载目录。put [-r] [local_file] [remote_file]:上传文件,-r选项用于上传目录。mget [remote_files]:批量下载(需启用batch-mode)。mput [local_files]:批量上传。
-
示例:
sftp user@192.168.1.100 Connecting to 192.168.1.100... user@192.168.1.100's password: sftp> get -r /remote/dir /local/dir # 下载整个目录 Fetching /remote/dir/file1.txt to /local/dir/file1.txt Fetching /remote/dir/file2.txt to /local/dir/file2.txt sftp> put local_file.txt /remote/path/ # 上传文件到指定路径 Uploading local_file.txt to /remote/path/local_file.txt sftp> exit
SCP(Secure Copy)
SCP 是基于 SSH 的命令行工具,适用于单次文件或目录传输,语法简洁,适合脚本自动化。
-
基本语法:
get(下载):scp [username]@[remote_server]:[remote_file] [local_path]put(上传):scp [local_file] [username]@[remote_server]:[remote_path]
-
示例:
# 下载文件 scp user@192.168.1.100:/remote/config.txt /home/user/ # 上传目录(需加 -r 递归) scp -r /local/project user@192.168.1.100:/remote/
lftp(Advanced File Transfer Tool)
lftp 是功能强大的命令行文件传输客户端,支持 FTP、SFTP、HTTP 等协议,支持多线程传输和断点续传。
-
基本语法:
lftp [username]@[remote_server]
交互界面下:
get [-r] [remote_file]:下载文件或目录。put [-r] [local_file]:上传文件或目录。mirror [-r] [remote_dir] [local_dir]:同步目录(-r控制方向)。
-
示例:
lftp user@192.168.1.100 lftp user@192.168.1.100:~> get -r large_dir # 递归下载目录 lftp user@192.168.1.100:~> put --continue partial_file.txt # 断点续传上传
工具对比与适用场景
为帮助读者快速选择合适的工具,以下是 FTP、SFTP、SCP 和 lftp 的对比:

| 工具 | 协议 | 加密 | 目录传输 | 批量操作 | 断点续传 | 适用场景 |
|---|---|---|---|---|---|---|
| FTP | FTP | 否 | 支持(mget/mput) |
支持 | 不支持 | 内网安全要求低的简单传输 |
| SFTP | SSH | 是 | 支持(-r) |
支持 | 支持 | 远程服务器管理、安全传输 |
| SCP | SSH | 是 | 支持(-r) |
不支持 | 不支持 | 单次文件传输、脚本自动化 |
| lftp | 多协议 | 可选 | 支持(mirror) |
强大 | 支持 | 大文件传输、复杂同步任务 |
最佳实践与注意事项
-
优先选择加密协议:
避免使用明文传输的 FTP,优先选择 SFTP 或 SCP,防止数据泄露。 -
使用
-r处理目录:
传输目录时,务必添加-r选项(递归传输),否则会报错。 -
批量操作优化:
- SFTP 中启用
batch-mode:echo "batch-mode on" > ~/.sftp/config,可避免交互式确认。 - lftp 的
mirror命令支持双向同步,适合定期备份场景。
- SFTP 中启用
-
权限与路径检查:
- 确保本地用户对目标路径有写入权限,远程用户对目标目录有读写权限。
- 远程路径建议使用绝对路径(如
/home/user/file),避免相对路径的歧义。
-
错误处理:
- 传输失败时,检查网络连通性(
ping)、磁盘空间(df -h)及文件权限(ls -l)。 - 大文件传输可使用
pv命令监控进度(如pv local_file | ssh user@remote "cat > remote_file")。
- 传输失败时,检查网络连通性(
get 和 put 作为文件传输的基础操作,在不同工具中实现了从本地到远程(put)和远程到本地(get)的数据双向流动,无论是通过 FTP 进行简单传输,还是通过 SFTP/SCP 保证安全性,亦或是借助 lftp 实现高效同步,理解各工具的特点和适用场景是关键,在实际应用中,需结合安全性、传输效率和操作复杂度选择合适的工具,并遵循最佳实践,确保文件传输的稳定与可靠,掌握这些命令,将极大提升 Linux 环境下的文件管理效率。



















