九、Linux系统中的文件传输
实验准备:两台可以通信的主机
systemctl disable firewalld
systemctl stop firewalld
9.1、scp命令
上传:scp 本地文件 远程主机用户@远程主机ip:远程主机目录的绝对路径
下载:scp 远程主用户@远程主机ip:远程主机文件的绝对路径 本地文件
scp -r dir root@172.25.0.200:/root/Desktop # -r表示复制目录
scp -q file root@172.25.0.200:/root/Desktop # -q表示传输文件时不显示进度
实验素材:
fake主机ip:172.25.0.100
fake-node1主机ip:172.25.0.200
例:从fake主机上传文件到fake_node1主机
(1)在fake用户中新建文件file,执行systemctl status sshd开启sshd服务,然后执行scp file root@172.25.0.200:/root/Desktop(从当前位置上传文件file到fake_node1主机的root用户)
(2)切换到fake_node1主机,发现文件file传输到桌面。
例:用fake-node1主机从fake主机下载图片aa到fake-node1主机的桌面
执行scp root@172.25.0.100:/root/Pictures/aa.png .
例:从fake用户上传目录dir到fake_node1
执行scp -r dir root@172.25.0.200:/root/Desktop
9.2、scp和rsync的区别
9.2.1、rsync和scp命令的对比
实验:
1、完成免密认证,步骤:
(1)在faketest主机中执行ssh-keygen生成非对称加密密钥。
(2)复制公钥给远程主机root执行ssh-copy-id -i /home/faketest/.ssh/id_rsa.pub root@172.25.0.100以便远程主机用户faketest可以免密登陆另一台主机。具体过程参照8.3.2和8.3.3。
2、建立一个大文件
(1)执行dd if=/dev/zero of=bigfile bs=1M count=1000 (从/dev/zero截取一个指定大小的文件,每份1M,共1000份,文件累计大小1000M)
(2)执行du -sh bigfile查看文件
(3)若想复制大文件三次,则每次执行比较麻烦,可以创建一个脚本
执行vim test.sh输入内容为
time scp bigfile -q root@172.25.0.100:/root/Desktop
time scp bigfile -q root@172.25.0.100:/root/Desktop
time scp bigfile -q root@172.25.0.100:/root/Desktop
(4)执行脚本sh test.sh,可以看到使用scp复制三次的原理是三次完全备份的过程。
(5)若把test.sh的内容scp换成rsync
time rsync -aCq bigfile -q root@172.25.0.100:/root/Desktop
time rsync -aCq bigfile -q root@172.25.0.100:/root/Desktop
time rsync -aCq bigfile -q root@172.25.0.100:/root/Desktop
a表示all,表示增量检测备份,q表示不显示内容。
可以看到rsync使用时间明显少于scp。
9.3、rsync命令的用法
rsync 文件 远程用户@远程主机ip:远程主机目录
rsync 远程用户@远程主机ip:远程主机目录 文件路径
rsync
-r # 复制目录
-l # 复制链接
-p # 复制权限
-t # 复制时间戳
-o # 复制拥有者
-g # 复制拥有组
-D # 复制设备文件
实验:
(1)在fake_node1主机中执行
467 mkdir dir
468 touch dir/file{1..5}
469 ln -s /root/Desktop/dir/file1 dir/test #建立链接
470 ls -l dir/
(2)在fake主机中开始监控:watch -n 1 ls -lR /mnt/
(3)在fake_node1主机中执行rsync -r dir root@172.25.0.100:/mnt/
(4)读取fake主机中的监控信息发现目录和文件均已传输至/mnt/但是链接没有送达。
(4)远程删文件,在fake_node1主机中执行
ssh root@172.25.0.100 “rm -fr /mnt/*”
(5)若执行rsync -r dir/ root@172.25.0.100:/mnt/表示只传输目录里的内容,目录本身不传输。
(6)若传输时候不想忽略链接,执行
rsync -lr dir/ root@172.25.0.100:/mnt/
(7)若在fake_node1更改文件权限,传输过去的文件并不会更改权限,若想附带权限传输,执行rsync -plr dir/ root@172.25.0.100:/mnt/
注:同理,若要复制时候附带拥有人加o,附带组加g,附带时间加t,附带设备文件加D。
9.4、文件归档命令的使用
tar cf etc.tar /etc/ #etc目录下文件归档
tar tf etc.tar #查看归档
tar Pcf aa.tar /etc/ #注意归档后文件的区别(加P保留根)
tar tf aa.tar
tar cvf etc.tar /etc/ #c表示创建,v表示显示过程,f表示指定文件名称
tar xf etc.tar #解档
例:如何把文件把文件加入归档文件
执行tar rf etc.tar file然后执行tar tf etc.tar查看发现file文件加入归档etc.tar
例:从etc.tar中解档指定文件
执行tar f etc.tar --get file
例:删除归档文件etc.tar中的指定文件file命令为:
tar f etc.tar --delete file
例:解档到指定路径
tar xf etc.tar -C /root/
9.5、文件压缩
Liunux中四种压缩文件类型:gz、bz2、zip、xz
9.5.1、zip格式
zip -r etc.tar.zip etc.tar #把etc.tar文件压缩成zip格式
压缩后执行du -sh etc.tar.zip查看压缩后文件大小
zip格式解压指令为
unzip etc.tar.zip
9.5.2、gz格式
gzip etc.tar #gz格式压缩
gunzip etc.tar #gz格式解压
9.5.3、bz2格式
bzip2 etc.tar
bunzip2 etc.tar.bz2
9.5.4、xz格式
xz etc.tar
unxz etc.tar.xz
9.5.5、打包压缩一步完成
tar zcf etc.tar.gz /etc/ #打包并压缩成gz格式
tar jcf etc.tar.bz2 /etc/ #打包并压缩成bz2格式
tar Jcf etc.tar.xz /etc/ #打包并压缩成xz格式
tar zxf etc.tar.gz #解压gz格式
tar jxf etc.tar.bz2 #解压bz2格式
tar Jxf etc.tar.xz #解压xz格式