Ubuntu 系统中远程传输 / 接收文件的指令集

全面地整理 Ubuntu 系统中远程传输 / 接收文件的指令集,包括更多实用参数、进阶用法、场景适配、故障排查以及不同工具的对比,方便你在不同场景下灵活选择和使用。

前置核心知识(必看)

远程文件传输的基础是 SSH 协议(默认端口 22),先明确 3 个关键前提:

  1. 路径规范

    • 绝对路径:/home/user/test.txt(推荐,避免路径混乱);
    • 相对路径:./test.txt(以当前终端所在目录为基准);
  2. 权限要求 :传输者需对「源路径有读权限」、对「目标路径有写权限」(否则会报 Permission denied);

  3. 免密登录配置(推荐) :频繁传输时,配置 SSH 密钥可避免重复输入密码,步骤如下:

    bash

    运行

    复制代码
    # 1. 本地生成SSH密钥(一路回车,无需设置密码)
    ssh-keygen -t rsa -b 4096
    # 2. 将公钥上传到远程服务器(替换为你的远程信息)
    ssh-copy-id -p 22 远程用户名@远程IP
    # 示例:ssh-copy-id root@192.168.1.100

一、SCP(Secure Copy):极简单次传输

scp 是最基础的远程拷贝工具,基于 SSH 加密,无需额外安装,适合「一次性、小文件 / 目录」传输,优势是语法极简、无依赖。

1. 核心语法(通用)

bash

运行

复制代码
scp [参数] 源地址 目标地址
# 地址格式:[用户名@]IP/主机名:文件/目录路径(本地地址无需加IP)

2. 完整参数说明(按常用度排序)

表格

参数 作用 示例
-r 递归传输目录(必加,否则无法传文件夹) scp -r 本地目录 root@IP:/远程路径
-P 指定 SSH 端口(大写 P!小写 p 是保留属性) scp -P 2222 test.txt root@IP:/home/
-p 保留文件的修改时间、访问时间、权限(如 755、644) scp -p test.txt root@IP:/home/
-q 静默模式,不显示传输进度(适合脚本中使用) scp -q test.txt root@IP:/home/
-C 启用压缩传输(减少网络流量,适合大文件 / 慢网络) scp -C test.zip root@IP:/home/
-l 限制带宽(单位:Kbps,避免占满带宽) scp -l 1024 test.iso root@IP:/home/(限制 1MB/s)
-v 详细输出(排错用,显示连接、传输细节) scp -v test.txt root@IP:/home/

3. 全场景示例

(1)本地 → 远程(上传)

bash

运行

复制代码
# 上传单个文件(绝对路径)
scp -C /home/user/test.txt root@192.168.1.100:/data/
# 上传单个文件(相对路径,当前终端在/home/user/)
scp test.txt root@192.168.1.100:/data/
# 上传目录(必加-r)+ 保留属性 + 指定端口
scp -r -p -P 2222 /home/user/testdir root@192.168.1.100:/data/
# 批量上传同类型文件(用通配符*)
scp -C /home/user/*.log root@192.168.1.100:/var/log/
(2)远程 → 本地(下载)

bash

运行

复制代码
# 下载单个文件
scp -C root@192.168.1.100:/data/test.txt /home/user/
# 下载目录 + 限制带宽(避免拖慢服务器)
scp -r -l 2048 root@192.168.1.100:/data/testdir /home/user/
# 下载远程服务器上的多个文件(通配符)
scp root@192.168.1.100:/data/*.csv /home/user/csv_files/
(3)进阶:远程 A → 远程 B(本地中转)

无需先下载到本地,直接从远程服务器 A 传输到远程服务器 B(本地仅作为中转):

bash

运行

复制代码
scp root@192.168.1.100:/data/test.txt root@192.168.1.101:/data/

4. SCP 常见问题 & 解决

表格

报错信息 原因 解决方法
Connection refused 远程 SSH 端口未开 / 端口写错 1. 检查远程 SSH 服务:ssh -p 端口 用户名@IP;2. 确认端口号(默认 22)
Permission denied 目标路径无写权限 / 源路径无读权限 1. 切换有权限的用户(如 root);2. 修改目标目录权限:chmod 777 /目标路径(临时测试)
No such file or directory 路径写错 / 文件不存在 1. 用ls 路径验证本地 / 远程路径;2. 优先用绝对路径

二、rsync:高效增量同步(推荐生产环境)

rsync进阶版传输工具,核心优势是「增量同步」(只传输文件变化的部分),适合「大文件、频繁同步、批量文件」场景,效率远高于 scp。

1. 前置安装(Ubuntu 默认可能未装)

bash

运行

复制代码
sudo apt update && sudo apt install rsync -y
# 验证安装:rsync --version

2. 核心语法

bash

运行

复制代码
rsync [参数] 源路径 目标路径
# 远程路径格式:用户名@IP:路径(和scp一致)

3. 核心参数(组合使用更高效)

表格

参数组合 作用 适用场景
-avz -a(归档模式:保留权限 / 时间 / 软链接)+ -v(详细输出)+ -z(压缩传输) 绝大多数同步场景(首选)
-avzP -P(显示传输进度 + 断点续传) 大文件传输(如 ISO、视频)
-avz --delete --delete(删除目标端多余文件) 完全同步(如备份)
-avz --exclude="*.log" 过滤指定文件 / 目录 只传输需要的文件

4. 全场景示例

(1)本地 → 远程(上传 / 同步)

bash

运行

复制代码
# 基础同步(保留属性+压缩+进度)
rsync -avzP /home/user/test.iso root@192.168.1.100:/data/
# 完全同步(目标和源一致,删除目标多余文件)
rsync -avz --delete /home/user/testdir root@192.168.1.100:/data/
# 过滤同步(排除.log文件,只传.txt)
rsync -avz --exclude="*.log" --include="*.txt" /home/user/testdir root@192.168.1.100:/data/
# 测试同步(dry-run,只看执行结果不实际传输)
rsync -avz --dry-run /home/user/testdir root@192.168.1.100:/data/
(2)远程 → 本地(下载 / 同步)

bash

运行

复制代码
# 下载并同步目录(断点续传)
rsync -avzP root@192.168.1.100:/data/testdir /home/user/
# 增量同步(只传变化的文件,适合定期备份)
rsync -avz root@192.168.1.100:/data/ /home/user/backup/
(3)进阶:远程 A → 远程 B(无本地中转)

直接从远程 A 同步到远程 B(无需本地作为中转,效率更高):

bash

运行

复制代码
rsync -avz root@192.168.1.100:/data/test.txt root@192.168.1.101:/data/

5. rsync 核心优势对比 scp

表格

场景 scp rsync
小文件单次传输 ✅ 简单 ❌ 略繁琐
大文件 / 重复传输 ❌ 重新传全部 ✅ 只传变化部分
批量文件过滤 ❌ 仅通配符 ✅ 精细过滤(--exclude/--include)
断点续传 ❌ 不支持 ✅ 支持(-P 参数)

三、SFTP:交互式可视化传输

sftp交互式文件传输工具(基于 SSH),适合「需要先浏览远程目录、再选择文件传输」的场景(类似图形化 FTP 客户端),操作更直观。

1. 连接远程服务器

bash

运行

复制代码
# 基础连接(默认端口22)
sftp 用户名@远程IP
# 指定端口
sftp -P 2222 用户名@远程IP
# 免密连接(已配置SSH密钥)
sftp root@192.168.1.100

2. 交互式核心指令(按功能分类)

连接成功后,终端会进入 sftp> 交互模式,以下是高频指令:

(1)目录 / 文件浏览

表格

指令 作用 示例
ls 查看远程当前目录文件 ls
lls 查看本地当前目录文件 lls
cd 路径 切换远程目录 cd /data/
lcd 路径 切换本地目录 lcd /home/user/
pwd 查看远程当前目录路径 pwd
lpwd 查看本地当前目录路径 lpwd
(2)文件 / 目录传输

表格

指令 作用 示例
get 远程文件 下载单个文件到本地 get /data/test.txt
get -r 远程目录 下载整个目录到本地 get -r /data/testdir
get -P 远程文件 断点续传下载 get -P /data/test.iso
put 本地文件 上传单个文件到远程 put /home/user/test.txt
put -r 本地目录 上传整个目录到远程 put -r /home/user/testdir
mget *.log 批量下载匹配文件 mget /data/*.log
mput *.txt 批量上传匹配文件 mput /home/user/*.txt
(3)文件管理(远程)

表格

指令 作用 示例
mkdir 目录名 远程创建目录 mkdir /data/newdir
rm 文件名 删除远程文件 rm /data/test.txt
rmdir 目录名 删除远程空目录 rmdir /data/empty_dir
rename 旧名 新名 远程重命名 rename /data/old.txt /data/new.txt
chmod 权限 文件名 修改远程文件权限 chmod 755 /data/test.sh
(4)退出 / 辅助

表格

指令 作用
exit/quit 退出 sftp 交互模式
help 查看所有 sftp 指令
!命令 执行本地命令(如!ls查看本地文件)

3. SFTP 实操示例(完整流程)

bash

运行

复制代码
# 1. 连接远程服务器
sftp root@192.168.1.100

# 2. 查看远程当前目录
sftp> ls

# 3. 切换远程目录到/data
sftp> cd /data

# 4. 切换本地目录到/home/user/download
sftp> lcd /home/user/download

# 5. 下载远程/data/test.iso(断点续传)
sftp> get -P test.iso

# 6. 上传本地/home/user/download/test.txt到远程/data
sftp> put test.txt

# 7. 远程创建新目录
sftp> mkdir newdir

# 8. 退出
sftp> exit

四、补充工具:特殊场景适配

1. wget/curl:直接下载远程服务器 / 网址文件

适合「无需登录 SSH,直接从远程服务器 / HTTP/HTTPS/FTP 地址下载文件」的场景:

bash

运行

复制代码
# wget(推荐,断点续传+后台下载)
# 从远程SSH服务器下载(需开启SSH,本质是scp变种)
wget scp://root@192.168.1.100:/data/test.txt -O /home/user/test.txt
# 从HTTP地址下载(断点续传+后台)
wget -c -b https://example.com/test.zip -O /home/user/test.zip

# curl(适合简单下载/上传)
# 下载文件
curl -o /home/user/test.txt scp://root@192.168.1.100:/data/test.txt
# 上传文件(较少用,不如scp/rsync)
curl -T /home/user/test.txt scp://root@192.168.1.100:/data/

2. lftp:多线程 / 断点续传(适合慢网络)

适合「大文件、慢网络、需要多线程下载」的场景,支持 FTP/SFTP/HTTP:

bash

运行

复制代码
# 安装
sudo apt install lftp -y

# 连接SFTP并多线程下载
lftp -u 用户名,密码 sftp://远程IP:22
lftp> set net:max-retries 5  # 设置重试次数
lftp> set pget:default-n 5   # 设置5线程下载
lftp> pget /data/test.iso    # 多线程下载
lftp> exit

五、常见故障排查(通用)

表格

核心报错 根因 解决方案
Host key verification failed 远程服务器 SSH 密钥变更 / 首次连接未确认 1. 删除本地缓存:rm ~/.ssh/known_hosts;2. 重新连接并输入yes确认
Timeout connecting to [IP] 网络不通 / 远程防火墙拦截 / SSH 服务未启动 1. ping 远程 IP:ping 192.168.1.100;2. 检查远程防火墙:ufw allow 22;3. 重启 SSH:systemctl restart sshd
scp: error: unexpected filename: ... 路径包含空格 / 特殊字符 用引号包裹路径:scp "root@IP:/data/My File.txt" /home/user/

六、安全建议(重要)

  1. 禁用密码登录 :配置 SSH 密钥后,编辑/etc/ssh/sshd_config,设置:

    bash

    运行

    复制代码
    PasswordAuthentication no
    ChallengeResponseAuthentication no

    重启 SSH:systemctl restart sshd

  2. 修改默认端口:将 SSH 端口从 22 改为非默认(如 2222),减少暴力破解;

  3. 限制传输带宽 :用scp -l/rsync --bwlimit避免占满服务器带宽;

  4. 验证文件完整性 :传输大文件后,用md5sum验证(本地和远程对比 MD5 值)。


总结

  1. 场景化选择工具
    • 单次小文件 / 目录:用scp(极简);
    • 大文件 / 频繁同步:用rsync(增量 + 断点续传,生产环境首选);
    • 交互式浏览 + 传输:用sftp(直观);
    • 远程网址下载:用wget/curl
  2. 核心参数必记
    • 传输目录加-r;指定端口加-P(大写);
    • rsync 首选-avzP(归档 + 压缩 + 进度 + 断点续传);
    • 免密登录配置ssh-keygen + ssh-copy-id,提升效率和安全性。
  3. 故障排查核心:优先检查「路径、权限、SSH 服务 / 端口、网络」四大要素。
相关推荐
小白同学_C11 小时前
Lab4-Lab: traps && MIT6.1810操作系统工程【持续更新】 _
linux·c/c++·操作系统os
今天只学一颗糖11 小时前
1、《深入理解计算机系统》--计算机系统介绍
linux·笔记·学习·系统架构
2601_9491465311 小时前
Shell语音通知接口使用指南:运维自动化中的语音告警集成方案
运维·自动化
儒雅的晴天11 小时前
大模型幻觉问题
运维·服务器
Gofarlic_OMS12 小时前
科学计算领域MATLAB许可证管理工具对比推荐
运维·开发语言·算法·matlab·自动化
通信大师12 小时前
深度解析PCC策略计费控制:核心网产品与应用价值
运维·服务器·网络·5g
dixiuapp12 小时前
智能工单系统如何选,实现自动化与预测性维护
运维·自动化
不做无法实现的梦~12 小时前
ros2实现路径规划---nav2部分
linux·stm32·嵌入式硬件·机器人·自动驾驶
Elastic 中国社区官方博客12 小时前
如何防御你的 RAG 系统免受上下文投毒攻击
大数据·运维·人工智能·elasticsearch·搜索引擎·ai·全文检索
小锋学长生活大爆炸12 小时前
【教程】免Root在Termux上安装Docker
运维·docker·容器