如何在两台Linux主机之间利用局域网实现文件传输??
我们在学习之前先准备好实验环境,以便于我们更好的理解内容。
需要 2 台主机并且保证这两台主机是可以通信的:
westos_linux : 172.25.254.105
westos_node1 : 172.25.254.205
westos_linux&westos_node1:
关闭火墙服务
$sudo systemctl disable --now firewalld
$sudo systemctl stop firewalld
1. scp 命令
scp 本地文件 远程主机用户@远程主机 ip:远程主机目录的绝对路径
scp 远程主机用户@远程主机 ip:远程主机文件的绝对路径 本地文件
实验步步骤:
(1)在westos_linux建立实验素材
$sudo touch westos
$sudo mkdir westosdir
(2)测试
a)把本地文件复制到远程主机 (上传)
$sudo scp westos root@172.25.254.205:/root/Desktop
$sudo scp -r westosdir root@172.25.254.205:/root/Desktop ## -r 表示复制目录
$sudo scp -q westos root@172.25.254.205:/root/Desktop ##-q 传输文件时不显示进度(较大的文件才会显示进度)
b)把远程文件复制到本地(下载)
$sudo scp root@172.25.254.205:/root/Desktop/westos_node1 /root/Desktop
2.rsync
a) rsync 和 scp 命令的对比
实验素材:
1)172.25.254.105:
dd if=/dev/zero of=/root/Desktop/westosfile1 bs=1M count=10
##dd=截取,if=inputfile
##of=outputfile
#bs=blocksize
#count=块的个数
dd if=/dev/zero of=/root/Desktop/westosfile2 bs=1M count=20
dd if=/dev/zero of=/root/Desktop/westosfile3 bs=1M count=30
2)在主机之间建立免密登陆使远程文件传输可以直接执行
westos_linux中:
$sudo ssh-keygen ##生成密钥
$sudo ssh-copy-id -i /root/.ssh/id_rsa.pub. root@172.25.254.205
3)创建测试脚本
vim check_scp.sh ##检测 scp 传输时间
time scp -qr /root/Desktop root@172.25.254.20:/root/Desktop
time scp -qr /root/Desktop root@172.25.254.20:/root/Desktop
time scp -qr /root/Desktop root@172.25.254.20:/root/Desktop
vim check_rsync.sh ##检测 rsync 的传输时间
time rsync -raCq /root/Desktop root@172.25.254.20:/root/Desktop
time rsync -raCq /root/Desktop root@172.25.254.20:/root/Desktop
time rsync -raCq /root/Desktop root@172.25.254.20:/root/Desktop
4)执行
scp执行效果:
$sudo bash check_scp.sh
real 0m1.334s
user 0m0.210s
sys 0m0.490s ##第一次系统执行时间
real 0m1.642s
user 0m0.412s
sys 0m0.383s ##第二次系统执行时间
real 0m1.586s
user 0m0.309s
sys 0m0.497s ##第三次系统执行时间
以上执行效果我们可以看出 scp 三次执行时间几乎一致
rsync 执行效果:
$sudo bash check_rsync.sh
real 0m1.603s
user 0m0.399s
sys 0m0.557s ##第一次系统执行时间
real 0m0.329s
user 0m0.012s
sys 0m0.010s ##第二次系统执行时间
real 0m0.348s
user 0m0.014s
sys 0m0.022s ##第三次系统执行时间
以上执行效果我们可以看出 rsync 三次执行时间中后两次远远小与第一次
b) rsync 用法
rsync 文件 远程用户@远程主机 ip:远程主机目录
rsync 远程用户@远程主机 ip:远程主机目录 文件路径
rsync -r ##复制目录
-l ##复制链接
-p ##复制权限
-t ##复制时间戳
-o ##复制拥有者
-g ##复制拥有组
-D ##复制设备文件
实验环境配置
在 westos_node1 中
$sudo watch -n 1 ls -lR /root/Desktop
在 westos_linux 中
$sudo touch /root/Desktop/file{1..5}
$sudo chmod 777 /root/Desktop/*
$sudo useradd westos
$sudo chown westos /root/Desktop/*
$sudo ln -s /root/Desktop/file1 /root/Desktop/file
westos_linux 执行:
执行命令看效果:
rsync -r root@172.25.254.205:/root/Desktop /mnt ##同步目录本身其目录中的文件
rsync -r root@172.25.254.205:/root/Desktop/ /mnt ##只同步目录中的文件
rsync -rl root@172.25.254.205:/root/Desktop/ /mnt ##同步链接
rsync -rlp root@172.25.254.205:/root/Desktop/ /mnt ##同步权限
rsync -rlpog root@172.25.254.205:/root/Desktop/ /mnt ##同步用户组
rsync -rlpogt root@172.25.254.205:/root/Desktop/ /mnt ##同步时间
rsync -rD root@172.25.254.205:/dev/pts /mnt ##同步设备文件
3.利用文件归档压缩加快文件传输
为了加快文件的传输速度及效率,我们可以将文件进行归档压缩后再传输。
(1)文件归档
tar c ##创建
f ##指定文件名称
x ##解档
v ##现实过程
t ##查看
r ##向归档文件中添加文件
--get ##解档指定文件
--delete ##删除指定文件
-C ##指定解档路径
实验步骤:
$sudo tar cf etc.tar /etc/
$sudo tar tf etc.tar
$sudo tar rf etc.tar westos_rhel8
$sudo tar xf etc.tar
$sudo tar f etc.tar --get westos_rhel8
$sudo tar f etc.tar --delete westos_rhel8
$sudo tar xf etc.tar -C /root/Desktop
(2)文件的压缩
zip:
$sudo zip -r mnt.tar.zip mnt.tar #zip 格式压缩
$sudo unzip mnt.tar.zip #zip 格式解压缩
gzip:
$sudo gzip mnt.tar #gzip 格式压缩
$sudo gunzip mnt.tar.gz #gzip 格式解压缩
bzip2:
$sudo bzip2 mnt.tar #bzip2 格式压缩
$sudo bunzip2 etc.tar.bz2 #bzip2 格式解压缩
xz:
$sudo xz mnt.tar #xz 格式压缩
$sudo unxz mnt.tar.xz #xz 格式解压缩
(3)tar+压缩
gzip:
$sudo tar zcf etc.tar.gz /etc
$sudo tar zxf etc.tar.gz
bzip2:
$sudo tar jcf etc.tar.bz2 /etc
$sudo tar jxf etc.tar.bz2
xz:
$sudo tar Jcf etc.tar.xz /etc
$sudo tar Jxf etc.tar.xz