Linux中的文件传输(附加详细实验案例)
一、实验环境的设置
①该实验需要两台主机,虚拟机名称为 L2 和 L3 ,在终端分别更改主机名为 node1 和 node2,在实验过程能够更好分辨。
然后再重新打开终端,主机名便都更改了相应的名称。
②用 ip a 的命令分别查看两个主机的 IP地址。(node1 的IP地址为 192.168.10.128/24,node2 的IP地址为 192.168.10.131/24 )。

IP 地址的来源:
找到编辑,打开虚拟网络编辑器。
选择NAT模式,可看到VMnet 8 打开了DHCP服务,L2 和 L3 虚拟机可自动从 192.168.10.0 这个网段中获取IP地址,DHCP设置中可看到 IP地址的范围是 192.168.10.128 -- 192.168.10.254。
用 ping 命令检测两个虚拟机之间的连通性 
保险起见,在 node1 和 node2 中都编辑一个 sshd 文件,输入 :set nu 命令可显示行数,将第 40 行的 # 删掉,将是否允许超级用户登录后面的单词改为 yes ,然后 :wq 保存退出,再输入 systemctl restart sshd 命令重启 sshd 服务,配置便生效了。(d :开启了守护进程)



二、文件传输方法
1.scp
scp (Secure Copy)是一个在 Linux、Unix 以及类 Unix 系统中广泛使用的命令,用于在本地主机和远程主机之间安全地复制文件和目录。它基于 SSH(Secure Shell)协议,因此在传输过程中会对数据进行加密,确保数据的安全性。
1)把本机文件或目录复制到远程主机
命令格式:scp [-r] <本地文件或目录> <远程主机用户@远程主机IP:远程主机目录的绝对路径>
node1 为当前主机,node2 为远程主机
先在 node1 主机上建立 lxt 目录和 lee 文件,并在 lxt 目录里建立三个 test 文件。 
然后在 node1 复制 lee 文件到 node2 ,同意建立连接,随后输入 node2 主机的密码,即可复制成功。
由图可知,L3 的桌面出现了 lee 文件,即复制成功。
将 node1 主机的 lxt 目录及里面的文件复制到 node2 主机桌面(第一次传输输入过密码,后面传输可直接 Enter 健跳过)。 

命令说明:
| scp lee root@192.168.10.131:/root/Desktop | 复制文件 |
| scp -r lxt root@192.168.10.131:/root/Desktop | -r:递归,复制目录,目录传输时,里面的文件也一块传输 |
| scp -q lxt root@192.168.10.131:/root/Desktop | -q:传输文件时不显示进度 |
2)把远程文件或目录复制到当前主机的当前目录
命令格式: scp [-r] <远程主机用户@远程主机ip:远程主机目录的绝对路径> <本地文件或目录>
先将 node1 主机的桌面清空,随后将 node2 主机的文件和目录分别复制到当前主机 。
命令说明:
| scp root@192.168.10.131:/root/Desktop/lee . | 将远程文件复制到当前主机的当前目录 |
| scp -r root@192.168.10.131:/root/Desktop/lxt . | 将远程目录复制到当前主机的当前目录 |
| 命令最后的 . 表示当前目录,相当于 /root/Deaktop | |
2.rsync
rsync 是一个强大且高效的文件同步和传输工具,既可以通过 SSH 协议进行安全传输,也能使用rsync 守护进程( rsync daemon )进行传输,不仅能实现本地和远程主机间的文件传输,还具备强大的增量传输功能。rsync 的效率比 scp 的效率更高些,但是 rsync 的数据完整性和可靠性相对于 scp 而言要差一些(下面以复制目录为例) 。
实时监控 node2 中的 mnt 目录,并清除里面所有的内容,便于观察里面的变化。![]()

在 mnt 目录里建立 leefile1 - leefile5 五个文件,并将权限改为 777(即 rwnrwnrwn),以及其所有文件的拥有者和拥有组改为 lee ,再建立一个链接
查看 mnt 目录中所有文件及链接的信息
1)把本地文件或目录同步到远程主机
命令格式:
rsync [-rlptogD] <本地文件或目录> <远程主机用户@远程主机IP:远程主机目录的绝对路径>
同步目录和目录中的内容:
将 node1 中的mnt 目录的内容同步到 node2 中。
mnt 目录及其所有文件都能同步到 node2(忽略了链接)。
只同步目录里面的内容:
首先还是先清空 node2 中的mnt 目录里面的内容。 
将 node1 中的 mnt 目录的内容同步到 node2 中。
这时 node2 中只出现了目录里面的内容,没有目录本身(忽略了链接)。
同步普通文件:
-l:同步 node1 的链接到 node2。
-p:同步 node1 的权限到 node2。 
-o:同步 node1 的拥有者到 node2。 
-g:同步 node1 的拥有组到 node2。 
-t:同步 node1 的时间戳到 node2。 
因为 node2 中没有 lee 这个身份,所以拥有者和拥有组显示数字(用户的真实身份是数字)

同步特殊文件:
特殊文件例子:/dev/pts/ 字符设备
-D:同步node1 的设备文件到 node2。

rsync命令总结说明
| rsync -r /mnt root@192.168.10.131: /mnt | 只同步本机的目录和目录中的内容到远程主机 |
| rsync -r /mnt/ root@192.168.10.131: /mnt | 只同步本机的目录中的内容到远程主机 |
| rsync -lr /mnt/ root@192.168.10.131: /mnt | 同步本机的链接到远程主机 |
| rsync -pr /mnt/ root@192.168.10.131: /mnt | 同步本机的权限到远程主机 |
| rsync -or /mnt/ root@192.168.10.131: /mnt | 同步本机的拥有者到远程主机 |
| rsync -gr /mnt/ root@192.168.10.131: /mnt | 同步本机的拥有组到远程主机 |
| rsync -tr /mnt/ root@192.168.10.131: /mnt | 同步本机的时间戳到远程主机 |
| rsync -Dr /mnt/ root@192.168.10.131: /mnt | 同步本机的设备文件到远程主机 |
2)把远程文件或目录同步到当前主机的当前目录
命令格式:
rsync [-rlptogD] <远程主机用户@远程主机IP:远程主机目录的绝对路径> <本地文件或目录>
过程与将当前主机的文件或目录同步到远程主机的过程相同,只是命令中的文件或目录放在了最后,下面仅展示命令示例总结说明:
| rsync -r root@192.168.10.131: /mnt /mnt | 只同步远程主机的目录和目录中的内容到本机 |
| rsync -r /mnt/ root@192.168.10.131: /mnt /mnt/ | 只同步远程主机的目录中的内容到本机 |
| rsync -lr root@192.168.10.131: /mnt /mnt/ | 同步远程主机的链接到本机 |
| rsync -pr root@192.168.10.131: /mnt /mnt/ | 同步远程主机的权限到本机 |
| rsync -or root@192.168.10.131: /mnt /mnt/ | 同步远程主机的拥有者到本机 |
| rsync -gr root@192.168.10.131: /mnt /mnt/ | 同步远程主机的拥有组到本机 |
| rsync -tr root@192.168.10.131: /mnt /mnt/ | 同步远程主机的时间戳到本机 |
| rsync -Dr root@192.168.10.131: /mnt /mnt/ | 同步远程主机的设备文件到本机 |
三、加速文件传输的方法——归档与压缩
1.归档
归档是指将多个文件或目录收集整合到一个单独的文件中,这个单独的文件就被称为归档文件。归档的 主要目的是方便对大量文件进行管理、备份和传输。
将node1 中的 etc 目录及其文件按照正常速度传输到 node2 的话,目录中的内容会一个个传输,速度较慢。

首先在 node1 将需要发送的内容打包成一个 .tar 文件,但不进行压缩。通过查看文件权限,可知已将 etc 目录打包成 etc.tar 文件。
再次将 node1 需要发送的内容传输到 node2,此时显示出来的发送内容只有一条,速度也提升了。
查看 etc 目录和 etc.tar 文件占用内存,是相同的, etc.tar 文件内存少了一点的原因是:etc 目录里有些内容是链接,其中的文件会有重复,所以目录占用内存较多。
②c:创建 f:指定文件或目录名称
创建 abc.tar 归档文件,并将 etc 目录和 mnt 目录打包在一起。
③x:解档 abc.tar 归档文件。
④--get:指定解档 abc.tar 归档文件中的 mnt 目录。
⑤r:将建立的 file 文件添加到 abc.tar 归档文件中,然后查看 abc.tar 归档文件的最后三行,显示有 file 文件,说明添加成功。
⑥--delete:删除 abc.tar 归档文件中的 file 文件,同样查看 abc.tar 文件的最后三行,没有显示 file 文件,说明删除成功。
⑦-C:先查看 pub 目录里面的内容,只有 leefile 文件,然后将 abc.tar 归档文件解档到 pub 目录中,随后再次查看 pub 目录, abc.tar 归档文件中的 etc 目录和 mnt 目录都解档解档到 pub 目录中。
归档命令总结说明
| tar cf etc.tar /etc/ | 创建 etc.tar 归档文件,将 etc 目录打包 |
| tar cf abc.tar /etc/ /mnt/ | 创建 abc.tar 归档文件,将 etc 目录和 mnt 目录一起打包 |
| tar xf abc.tar | 将 abc.tar 归档文件解档 |
| tar rf abc.tar file | 将 file 文件添加到 abc.tar 归档文件 |
| tar tf abc.tar | tail -n 3 | 查看 abc.tar 归档文件的最后三行(内容多,可只查看规定的几行内容) |
| tar f abc.tar --get /mnt/ | 指定解档 abc.tar 归档文件中的 mnt 目录 |
| tar f abc.tar --delete file | 删除 abc.tar 归档文件中的 file 文件 |
| tar xf abc.tar -C /pub/ | 将 abc.tar 归档文件解档到指定的 pub 目录 |
2.压缩
压缩文件可以减少存储空间的占用,提升数据传输的效率。压缩的文件越小,越利于文件传输,压缩速度也越慢。压缩速度快慢除了跟压缩比例相关,更多的是对 CPU 的要求比较高,CPU 快,压缩速度也快。
| Linux 默认支持压缩格式 | zip 格式 | gzip 格式 | bzip2 格式 | xz 格式 |
| 压缩 格式 说明 | 它可以将多个文件和目录压缩到一个文件中,并且支持跨平台使用,方便在不同操作系统之间传输文件。zip 格式还支持加密功能,可以对压缩文件中的内容进行加密保护。 | 以 .gz 为扩展名,是 Linux 系统中广泛使用的压缩格式。它使用 gzip 算法进行压缩,具有较 快的压缩和解压缩速度,适用于大多数日常文件的压缩。例如,许多软件包在发布时会采用 .gz 压缩格式。 | 文件扩展名为 .bz2 。这种格式采用 bzip2 算法,压缩率相对较高,但压缩和解压缩速度比 gz格式慢一些。在需要更高压缩比的情况下,如对大型数据文件或备份文件进行压缩时,常采 用 .bz2 格式。 | 以.xz为扩展名,使用 xz 算法进行压缩。它具有极高的压缩率,能最大程度地减小文件体积,但压缩和解压缩过程相对较慢,通常用于对空间要求极为苛刻的场景,如长期存储的大量数据归档。 |
先清空桌面的文件,重新建立 etc.tar 归档文件,打包 etc 目录。然后查看 etc.tar 归档文件和 etc 目录占用内存大小。
1)zip格式压缩
zip -r etc.tar.zip etc.tar zip 格式压缩文件
unzip etc.tar.zip zip 格式解压缩
将 etc.tar 归档文件压缩成 zip 格式,随后查看压缩后的占用内存,只有7.7M。 
解压 etc.tar.zip,便可得回 etc.tar 归档文件。 
2)gzip 格式
gzip etc.tar gzip 格式压缩文件
gunzip etc.tar.gz gzip 格式解压缩
将 etc.tar 归档文件压缩成 gzip 格式,随后查看压缩后的占用内存,只有6.3M。
解压 etc.tar.gz,便可得回 etc.tar 归档文件。
3)bzip2 格式
bzip2 etc.tar bzip2 格式压缩
bunzip etc.tar.bz2 bzip2 格式解压缩
将 etc.tar 归档文件压缩成 bzip2 格式,随后查看压缩后的占用内存,只有5.4M。 
解压 etc.tar.bz2,便可得回 etc.tar 归档文件。
4)xz 格式
xz etc.tar xz 格式压缩
unxz etc.tar.xz xz 格式解压缩
将 etc.tar 归档文件压缩成 xz 格式,随后查看压缩后的占用内存,只有4.5M。
解压 etc.tar.xz,便可得回 etc.tar 归档文件。 
3.归档压缩一步完成
压缩只针对于文本,涉及图片或视频不支持,因为它们之间的解码不同。
将 etc 目录一步完成归档压缩(只有 gzip、bzip2、xz 格式才能归档压缩一步完成,tar 命令不支持 zip 格式)。
分别解压etc.tar.gz、etc.tar.bz2、etc.tar.xz,便可得回 etc 目录。
相关文章:
Linux中的文件传输(附加详细实验案例)
一、实验环境的设置 ①该实验需要两台主机,虚拟机名称为 L2 和 L3 ,在终端分别更改主机名为 node1 和 node2,在实验过程能够更好分辨。 然后再重新打开终端,主机名便都更改了相应的名称。 ②用 ip a 的命令分别查看两个主机的 …...
基于 OpenHarmony 5.0 的星闪轻量型设备应用开发——Ch2 OpenHarmony LiteOS-M 内核应用开发
写在前面: 此篇是系列文章《基于 OpenHarmony5.0 的星闪轻量型设备应用开发》的第 2 章。本篇介绍了如何在 OpenHarmony 5.0 框架下,针对 WS63 进行 LiteOS-M 内核应用工程的开发。 为了方便读者学习,需要OpenHarmony 5.0 WS63 SDK 的小伙伴可…...
论文阅读:2024-arxiv How to Steer LLM Latents for Hallucination Detection?
总目录 大模型安全相关研究:https://blog.csdn.net/WhiffeYF/article/details/142132328 How to Steer LLM Latents for Hallucination Detection? https://arxiv.org/pdf/2503.01917 https://www.doubao.com/chat/2818934852496130 其它资料: https://blog.csdn.net/we…...
Linux--线程概念与控制
目录 1. Linux线程概念 1-1 什么是线程 1-2 分⻚式存储管理 1-2-1 虚拟地址和⻚表的由来 1-2-2 物理内存管理 1-2-3 ⻚表 1-2-4 ⻚⽬录结构 1-2-5 两级⻚表的地址转换 1-2-6 缺⻚异常 1-3 线程的优点 1-4 线程的缺点 1-5 线程异常 1-6 线程⽤途 2. Linux进程VS线…...
Python | kelvin波的水平空间结构
写在前面 简单记录一下之前想画的一个图: 思路 整体比较简单,两个子图,本质上就是一个带有投影,一个不带投影,通常用在EOF的空间模态和时间序列的绘制中,可以看看之前的几个详细的画法。 Python | El Ni…...
【音视频】SDL播放PCM音频
相关API 打开音频设备 int SDLCALL SDL_OpenAudio(SDL_AudioSpec * desired, SDL_AudioSpec * obtained); desired:期望的参数。obtained:实际音频设备的参数,一般情况下设置为NULL即可。 SDL_AudioSpec typedef struct SDL_AudioSpec { i…...
BERT - Bert模型框架复现
本节将实现一个基于Transformer架构的BERT模型。 1. MultiHeadAttention 类 这个类实现了多头自注意力机制(Multi-Head Self-Attention),是Transformer架构的核心部分。 在前几篇文章中均有讲解,直接上代码 class MultiHeadAtt…...
【LeetCode 热题100】二叉树遍历入门:从中序遍历到层序与右视图(力扣94 / 102/199)(Go语言版)
🌳 二叉树遍历入门:从中序遍历到层序与右视图 本文涵盖 LeetCode 上的三道基础但极具代表性的二叉树遍历题: 二叉树的中序遍历 二叉树的层序遍历 二叉树的右视图 通过这些题目,我们将从 DFS 到 BFS,深入理解如何处理…...
docker创建容器添加启动--restart选项
一、通过 Docker 命令直接修改已启动的容器(推荐-已验证) 操作步骤: 1.执行更新命令: docker update --restartalways <容器名或ID>此命令会将容器的重启策略调整为 always(无论容器以何种状态退出࿰…...
一文读懂WPF系列之常用控件以及样式
WPF控件 控件分类概览常用控件常用控件代码示例和效果 样式与模板应用样式定义方式行内样式页面/窗口级资源样式(Local Resource)应用程序全局资源独立资源字典(ResourceDictionary)控件模板(ControlTemplate&…...
嵌入式硬件篇---单片机周期
文章目录 前言 前言 在单片机中,时序控制是其执行指令和协调外设的核心基础。以下是单片机中常见的各种周期及其详细说明,以层次结构展开: 时钟周期(Clock Cycle) 定义: 时钟周期是单片机的最小时间单位&a…...
【双指针】专题:LeetCode 283题解——移动零
移动零 一、题目链接二、题目三、题目解析四、算法原理两个指针的作用以及三个区间总结 五、与快速排序的联系六、编写代码七、时间复杂度、空间复杂度 一、题目链接 移动零 二、题目 三、题目解析 “保持非零元素的相对顺序”,比如,示例1中非零元素1…...
2025蓝桥杯JavaB组
说明 博主自己水平有限,而且答案也不一定对,下面代码和思路仅作分享。我只把我考场上做了的写出来了,有什么问题欢迎评论区交流。 A:逃离高塔 思路: 由于有了去年的经验,所以一上来我就是找规律…...
SQL学习--基础语法学习
SQL和excle对比 学习目标 单表查询 项目背景 SQL 练习环境 SQL Online Compiler - Next gen SQL Editor 商品信息表:https://study-zhibo.oss-cn-shanghai.aliyuncs.com/test/%E5%95%86%E5%93%81%E4%BF%A1%E6%81%AF%E8%A1%A8.csv 订单明细表:https://…...
MATLAB2022b安装
1 从百度网盘下载MATLAB2022b,下载完成后解压到某个文件夹; 链接: MATLAB2022b 提取码: 6666 2 打开解压后的文件夹,进入setup文件夹,双击打开“setup.exe”文件; 3 在弹出窗口中选择“高级选项”-->“我有文件安…...
如何更改OCP与metadb集群的连接方式 —— OceanBase运维管理
背景 许多用户都会借助OCP平台来进行OceanBase集群的运维与监控,且因为考虑单节点的OCP部署,在遇故障时可能会短时间出现无法管控 OceanBase集群,多数用户倾向于采用多节点方式来部署OCP,即 OCP的 metadb集群也是三节点的集群部署…...
HTTP实现心跳模块
HTTP实现心跳模块 使用轻量级的cHTTP库cpp-httplib重现实现HTTP心跳模块 头文件HttplibHeartbeat.h #ifndef HTTPLIB_HEARTBEAT_H #define HTTPLIB_HEARTBEAT_H#include <string> #include <thread> #include <atomic> #include <chrono> #include …...
架构总览怎么写,才算工业级?
📈系统架构文档是整个项目最重要的起点,但很多人第一章就“写穿了”: 不是写得太细,就是没有重点。想要写出高质量、能协作、能传承的架构文档,这一篇会告诉你应该怎么做—— ✅ 架构总览的终极目标 明确边界、定义角色、画清数据流 别讲执行细节,别深入函数调用。 ✅ 架…...
Python10天突击--Day 3:函数式编程突破
以下是 Python 中实现方法耗时统计装饰器的完整方案,包含同步/异步支持、多级嵌套调用统计、可视化输出和性能分析等高级功能: 基础版:同步方法计时装饰器 import time from functools import wrapsdef timeit(func):"""基础…...
Datawhale 入驻 GitCode:以开源力量推动 AI 教育公平与创新
在 AI 技术深度重塑教育生态的今天,国内首个 AI 开源学习社区 —— Datawhale 正式加入 GitCode 开源平台!作为覆盖全球 3000 高校、培养超百万 AI 人才的创新社区,Datawhale 将通过开源协作模式,为人工智能教育公平注入新动能&a…...
ChatDBA:一个基于AI的智能数据库助手
今天给大家介绍一个基于 AI 大语言模型实现数据库故障诊断的智能助手:ChatDBA。 ChatDBA 是由上海爱可生信息技术股份有限公司开发,通过对话交互,提供数据库故障诊断、专业知识学习、SQL 生成和优化等功能,旨在提升 DBA 工作效率。…...
MacOS中的鼠标、触控板的设置研究
一、背景和写这篇文章的原因 想搞清楚和配置好鼠标,比如解决好为什么我的滚动那么难用?怎么设置滚轮的方向跟windows相同?调整双击速度,调整鼠标滚轮左右拨动的"冷却时间"。 二、各种设置之详细解释 1. MacOS设置 -&…...
asp.net core 项目发布到 IIS 服务器
目录 一、VS2022 发布 二、设置IIS服务 三、配置IIS管理器 (一)打开IIS管理器 (二)添加站台 (三)配置应用程式集区 四、安装ASP.NET Core Hosting Bundle 五、设定IIS的日志位置 六、测试 一、VS2…...
如何解决线程安全问题(不涉及分布式情况)
线程安全问题本质 当多个线程并发操作共享资源(变量/对象)时,可能因非原子性操作或内存可见性问题导致数据不一致。 解决方案一:synchronized 关键字 实现方式: 实例方法同步锁 在实现Runnable接口的自定义线…...
Spring Boot(二十二):RedisTemplate的List类型操作
RedisTemplate和StringRedisTemplate的系列文章详见: Spring Boot(十七):集成和使用Redis Spring Boot(十八):RedisTemplate和StringRedisTemplate Spring Boot(十九)…...
【Nodebb系列】Nodebb笔记写入方案
NodeBB写入方案 前言 最近在整理以前记录的碎片笔记,想把它们汇总到NodeBB中,方便管理和浏览。但是笔记内容有点多,并且用发帖的形式写到NodeBB中会丢失时间信息,因此整理了一套NodeBB写入方案,大致流程如下…...
计算机视觉——基于YOLOV8 的人体姿态估计训练与推理
概述 自 Ultralytics 发布 YOLOV5 之后,YOLO 的应用方向和使用方式变得更加多样化且简单易用。从图像分类、目标检测、图像分割、目标跟踪到关键点检测,YOLO 几乎涵盖了计算机视觉的各个领域,似乎已经成为计算机视觉领域的“万能工具”。 Y…...
鸿蒙小案例---心情日记
效果演示 代码实现 import { router, window } from kit.ArkUIEntry Component struct Index {async aboutToAppear(): Promise<void> {let w await window.getLastWindow(getContext())w.setWindowSystemBarProperties({statusBarColor: #00C6C3,statusBarContentColo…...
力扣第206场周赛
周赛链接:竞赛 - 力扣(LeetCode)全球极客挚爱的技术成长平台 1. 二进制矩阵中的特殊位置 给定一个 m x n 的二进制矩阵 mat,返回矩阵 mat 中特殊位置的数量。 如果位置 (i, j) 满足 mat[i][j] 1 并且行 i 与列 j 中…...
从 SYN Flood 到 XSS:常见网络攻击类型、区别及防御要点
常见的网络攻击类型 SYN Flood、DoS(Denial of Service) 和 DDoS(Distributed Denial of Service) 是常见的网络攻击类型,它们的目标都是使目标系统无法正常提供服务。以下是它们的详细说明: 1. SYN Flood…...
