一、前置任务
为了便于实验,我用母盘的虚拟机克隆出两台虚拟机来模拟两台主机进行文件传输

查询两台主机的IP
BL1

192.168.163.130/24
BL2

192.168.88.129/24
二、文件传输
scp命令
|------|---------------------|
| 不填选项 | 正常显示进度的传输 |
| -q | 静默传输 |
| -r | 递归传输(用于传输目录及目录里的内容) |
1.复制本地文件到远程主机
bash
scp [-r] <本地文件> <远程主机用户@远程主机ip:远程主机目录的绝对路径>


先在BL1中创建一个实验文件BL1file,BL2中桌面上是没有BL1file


直接使用scp命令是不行的
先要编辑/etc/ssh/sshd_config(sshd的配置文件)
在第40行将PermitRootLogin 改成yes


正常传输
bash
scp BL1file [email protected]:/root/Desktop
scp <要传输的文件名> 以什么身份传输@传输的主机的IP地址:要放在传输的主机的哪里(绝对路径)


-q(静默传输)
bash
scp -q quietfile [email protected]:/root/Desktop/

-r递归传输


aaa目录中没有任何文件,bbb中有file123三个文件
bash
scp -rq aaa [email protected]:/root/Desktop/


bash
scp -rq bbb [email protected]:/root/Desktop/


rsync命令
比scp更快速传输,它会检查有无已经有的文件,若已经有则跳过文件传输下一个文件。
|----|--------|
| -r | 复制目录 |
| -l | 复制链接 |
| -p | 复制权限 |
| -t | 复制时间戳 |
| -o | 复制拥有者 |
| -g | 复制拥有组 |
| -D | 复制设备文件 |
实验前置

touch /mnt/BL1file{1..5} 在mnt目录下创建BL1file1~5
chmod 777 /mnt/BL1file* 更改mnt目录下BL1file1~5的权限
chown vb.vb /mnt/BL1file* 更改mnt目录下BL1file1~5的所有人和所有组

创建一个链接文件BL1Link指向BL1file5
bash
ln -s /mnt/BL1file5 /mnt/BL1Link
-r复制目录


bash
rsync -r /mnt [email protected]:/root/Desktop
注意:在用rsync传输目录时,当目录中有软链接时,rsync -r会跳过软链接的传输
注意:复制目录时/的位置以及是否带/ 是有区别的!!!
要复制的目录后不带/
传输目录中的内容和目录本身
要传输的目录后带/传输目录中的内容而不传输目录本身


-l复制链接
bash
rsync -lr /mnt [email protected]:/root/Desktop

-p复制权限
bash
rsync -lpr /mnt [email protected]:/root/Desktop


-o复制所属者
bash
rsync -lpor /mnt [email protected]:/root/Desktop


注:因为BL2中没有vb这个用户,所以复制的是BL1中vb的id 1001

-g复制所属组
bash
rsync -lpgor /mnt [email protected]:/root/Desktop


-t复制时间戳
bash
rsync -lpgort /mnt [email protected]:/root/Desktop


-D复制设备
bash
rsync -lpgortD /dev/pts/ [email protected]:/root/Desktop


三、加速文件传输-归档与压缩
归档
tar命令
|----------|------------|
| c | 创建并归档 |
| t | 查看归档的内容 |
| f | 指定文件名称 |
| x | 解档 |
| v | 详细过程 |
| r | 向归档文件中添加文件 |
| --get | 解档指定文件 |
| --delete | 删除指定文件 |
| -C | 指定解档路径 |
cf创建指定文件名称并归档
bash
tar cf etc.tar /etc/ /mnt
tar cf <文件名>.tar <要归档的内容或目录...>
创建.tar文件并将/etc/和/mnt归档在etc.tar中
tf查看指定文件的归档内的内容
bash
tar tf etc.tar
tar tf <文件名>.tar

xf解档指定文件
bash
tar xf etc.tar
tar xf <文件名>.tar
vf 查看详细归档的文件
bash
tar cvf etc.tar /etc/ /mnt

rf向归档的文件中添加文件
bash
tar rf etc.tar aaaaaaaaaaaaaaaa

--get解档指定文件
bash
tar --get -f etc.tar

--delete删除指定文件
bash
tar --delete -f etc.tar aaaaaaaaaaaaaaaa

查看归档后的大小
du -sh <文件名>.tar
为什么会相差?
是因为归档前的目录中可能存在链接,所以链接和链接的内容会被计算两次
而归档后链接不会被重复计算文件大小
压缩
压缩文件可以减少存储空间的占用,提升数据传输的效率
Linux 系统默认支持多种压缩格式,以下是一些常见的默认支持格式:
gz 格式:以.gz为扩展名,是 Linux 系统中广泛使用的压缩格式。它使用gzip算法进行压缩,具有较 快的压缩和解压缩速度,适用于大多数日常文件的压缩。例如,许多软件包在发布时会采用.gz压缩 格式。
bz2 格式:文件扩展名为.bz2。这种格式采用bzip2算法,压缩率相对较高,但压缩和解压缩速度比 gz格式慢一些。在需要更高压缩比的情况下,如对大型数据文件或备份文件进行压缩时,常采 用.bz2格式。
xz 格式:以.xz为扩展名,使用xz算法进行压缩。它具有极高的压缩率,能最大程度地减小文件体 积,但压缩和解压缩过程相对较慢,通常用于对空间要求极为苛刻的场景,如长期存储的大量数据 归档。
zip 格式:虽然zip格式在 Windows 系统中更为常见,但 Linux 系统也默认支持。它可以将多个文 件和目录压缩到一个文件中,并且支持跨平台使用,方便在不同操作系统之间传输文件。此外,zip 格式还支持加密功能,可以对压缩文件中的内容进行加密保护。
zip
zip -r <命名(一般以.zip为后缀)> <要压缩的文件>


压缩后文件的大小减少了很多
unzip
unzip <要解压缩的.zip文件>

gzip
gzip <要压缩的文件>

与zip压缩方式相比,gz的压缩让文件更小
gunzip
gunzip <要解压缩的gz文件>

bzip2
bzip2 <要压缩的文件>

bunzip2
bunzip2 <要解压缩的.bz2文件>

xz
xz <要压缩的文件>

unxz
unxz <要解压缩的.xz文件>

压缩大小能力xz>bzip2>gzip>zip

归档和解压一步到位
tar zcf <压缩后文件名.gz> <要压缩的文件或目录>
tar jcf <压缩后文件名.bz2> <要压缩的文件或目录>
tar Jcf <压缩后文件名.xz> <要压缩的文件或目录>

tar zxf <压缩后文件名.gz> <要压缩的文件或目录>
tar jxf <压缩后文件名.bz2> <要压缩的文件或目录>
tar Jxf <压缩后文件名.xz> <要压缩的文件或目录>