Linux 中系统的文件传输
实验环境
需要两台主机并且保证这两台主机可以通信,并且要关闭被连接主机的火墙。
关闭火墙可以用到以下命令:
systemctl disable --now firewalld
systemctl stop firewalld
1. scp
在日常的工作中,我们对于服务器的维护最基本的就是怎么将本地文件传输到远程主机,怎么将远程主机文件传输到本地。
scp 本地文件 远程主机用户@远程主机ip:远程主机目录的绝对路径 (把本地文件复制到远程主机)
scp 远程主机用户@远程主机ip:远程主机目录的绝对路径 本地文件 (把远程文件复制到本地)
1.1 把本地文件复制到远程主机实验步骤(上传):
- 在当前主机上用 touch 命令和 mkdir 命令分别建立文件和目录;建立 file1 文件和 westosdir 目录,并且在目录中建立 westosdir {1…5} 的5个文件。
- 测试
1) 把本地文件复制到远程主机
输入命令 scp file1 root@192.168.122.111:/root/Desktop, 即可把当前主机中的 file1 文件复制到远程111 主机的桌面上。
如图所示,远程111 主机之前桌面上没有东西,在传输之后可以看到远程主机桌面上的file1 文件。
2) 把本地目录复制到远程主机
输入命令 scp -r westosdir root@192.168.122.111:/root/Desktop,即可把当前主机上的 westosdir 目录复制到远程111号主机中,其中参数 -r 表示复制目录。
如图所示,远程 111 主机之前桌面上没有目录,在传输之后可以看到远程主机桌面上的 westosdir 文件。
3) 传输文件时不显示传输速度
在上传目录和文件的时候,我们可以看到传输速度,如果当前操作不想看到传输进度;可以在执行命令的时候加上 -q 的参数。输入 scp -qr westosdir root@192.168.122.111:/root/Desktop 。
如图所示,先删除远程主机中的 westosdir 目录,在传输的时候加上参数 -q 在传输的时候就不再显示传输进度。
1.2 把远程主机文件复制到本地实验步骤(下载):
- 除了将本地文件复制到远程主机之外,还可以将远程主机中的文件复制到当前主机。在这个过程中,在远程主机上先删除桌面上的所有文件,再建立 linuxfie1 以方便看到其实验结果。
- 测试
输入命令 scp root@192.168.122.111:/root/Desktop/linuxfie1 . 表示将远程111 主机桌面上的linuxfie1 文件复制到当前。
如图所示,当前主机位置之前没有 linuxfile1 文件,在执行命令之后,当前主机的 linuxfile1 文件。
1.3 time 命令
在系统中执行一个命令时,我们往往不知道这个命令的执行用了多长时间,可以在要执行的命令前加上 time 命令, 便可以知道执行这个命令用来多长的时间。
如输入命令 time cp westosdir linuxdir 把 westosdir 复制到 linuxdir 并且显示复制的时间。
2. rsync
在做这个实验之前我们先和远程主机之间做好免密认证
ssh-keygen ## 生成密钥
ssh-copy-id -i /root/.ssh/id_rsa.pub. root@192.168.122.111 将公钥给予111主机。
2.1 rsync和scp的对比
rsync 是增量备份,scp 是完全备份。
实验步骤:
- 创建比较大的文件
由于当前系统中暂无新建立的比较大的文件,因此用命令 dd if=/dev/zero of=AAAfile bs=1M count=500 创建一个比较大的文件,此命令的意思是从 /dev/zero 文件中切割文件并存储在 AAAfile 的文件中,每次切割1M ,切割500次。
用命令 du -sh AAAfile 查看 AAAfile 文件的大小为511M。
-
创建测试 scp 的脚本
time scp -q AAAfile root@192.168.122.111:/root/Desktop
time scp -q AAAfile root@192.168.122.111:/root/Desktop
time scp -q AAAfile root@192.168.122.111:/root/Desktop
表示将 AAAfile 这个文件复制到111主机的桌面上,复制了三次,并且显示每次复制的时间。
执行命令 sh text.sh
从图片中可以看到三次复制基本上没有什么比较大的时间差异; -
创建测试 rsync 的传输时间
time rsync -aCq AAAfile root@192.168.122.111:/root/Desktop
time rsync -aCq AAAfile root@192.168.122.111:/root/Desktop
time rsync -aCq AAAfile root@192.168.122.111:/root/Desktop
表示将 AAAfile 这个文件复制到111主机的桌面上,复制了三次,并且显示每次复制的时间。
执行命令 sh text.sh
如图所示,3次复制中只有第一次执行时间比较长和scp 的时间差不多,而后面的两次时间大大降低,这是因为 rsync 执行的是增量备份,后面两次只是系统检测111主机中有无该文件的时间,并不是复制的时间。
2.2 rsync 命令的用法
- rsync 和 scp 一样,也可以上传和下载
- rsync 文件 远程用户@远程主机ip:远程主机目录
- rsync 远程用户@远程主机ip:远程主机目录 文件路径
命令 | 意义 |
---|---|
rsync -r | 复制目录 |
rsync -l | 复制链接 |
rsync -p | 复制权限 |
rsync -t | 复制时间戳 |
rsync -o | 复制拥有者 |
rsync -g | 复制拥有组 |
rsync -D | 复制设备文件 |
做这个实验的时候,为了方便观察实验效果,在连接远程主机中输入命令 watch -n 1 ls -lR /mnt 开一个监控。
实验步骤:
建立实验所需的文件和目录,建立一个 westosdir 的目录,在这个目录中建立 file1 - file5 共五个文件。并给其中的一个文件做上链接,此处是用命令 ln -s /hoom/westos/Desktop/westosdir/file1 westosdir/test ,时将 file1 文件链接到 test 上。如图所示,为操作过程。
1)在当前主机中输入命令 rsync -r westosdir/ root@192.168.122.111: /mnt/ ,表示将当前主机上的 westosdir 目录中的文件复制到远程111主机的 /mnt/ 目录中,不复制目录本身;
2)在当前主机中输入命令 rsync -r westosdir/ root@192.168.122.111: /mnt/ ,表示将当前主机上的 westosdir 目录及目录中的文件复制到远程111主机的 /mnt/ 目录中;
3)在当前主机中输入命令 rsync -lr westosdir root@192.168.122.111: /mnt/ 表示将当前主机上的 westosdir 目录及其目录中的链接复制到远程111主机的 /mnt/ 目录中;
4)输入命令 chmod 777 westosdir /* 表示将目录中的文件的权限修改为 777;在当前主机中输入命令 rsync -plr westosdir root@192.168.122.111: /mnt/ 表示将当前主机上的 westosdir 目录和目录中的链接和权限复制到远程111主机的 /mnt/ 目录中;
5)在当前主机中输入命令 rsync -poglr westosdir root@192.168.122.111: /mnt/ 表示将当前主机上的 westosdir 目录及其目录中的链接权限和所有人和所有组都复制到远程111主机的 /mnt/ 目录中;
6)在当前主机中输入命令 rsync -poglrt westosdir root@192.168.122.111: /mnt/ 表示将当前主机上的 westosdir 目录的链接、权限、所有人、所有组和建立时间都复制到远程111主机的 /mnt/ 目录中;
7)在当前主机中输入命令 rsync -poglrtD /dev/pts/ root@192.168.122.111: /mnt/ 表示将当前主机上的 /dev/pts/ 目录的链接、权限、所有人、所有组、建立时间和设备文件都复制到远程111主机的 /mnt/ 目录中;
3. 文件的归档压缩
3.1 文件归档
tar
参数 | 含义 |
---|---|
c | 创建 |
f | 指定文件名称 |
x | 解档 |
v | 显示过程 |
t | 查看 |
r | 向归档文件中添加文件 |
- -get | 解档指定文件 |
- -delete | 删除指定文件 |
C | 指定解档路径 |
P | don’t remove “/” |
实验步骤:
1)输入命令 tar cf etc.tar /etc/ ,表示 /etc/ 下的文件归档到创建的etc.tar 文档中去;
2)输入命令 tar cvf etc.tar /etc/ ,表示 /etc/ 下的文件归档到创建的etc.tar 文档中去,并将这个过程显示出来;
3)输入命令 tar tf etc.tar ,表示指定名称为 etc.tar 的文件查看该文件;
4)输入命令 tar xf etc.tar ,表示将指定的名称 etc.tar 的文件解档;
5)新建一个文件名称为 file123123 的文件,输入命令 tar rf etc.tar file123123 ,表示将新建的 file123123 文件添加到 etc.tar 的文档中;
6)输入命令 tar f etc.tar --delete file123123 ,表示将归档文档中的 file123123 文件删除;
7)输入命令 tar xf etc.tar -C /root/ ,表示将归档的文档解档到指定的目录 /root/ 目录中;
3.2 文件的压缩
文档压缩的格式有 gz 、bzip2(bz2)、 zip、 xz、 rar,但是 rar 是在闭源中才会有的,在linux 中没有。
1) zip 格式的压缩和解压缩
- zip -r etc.tar.zip etc.tar #zip格式压缩
- unzip etc.tar.zip #zip格式解压缩
如图所示,压缩之前的文档大小为 28M ,压缩之后的文档大小为6.8M;
unzip 在解压缩的时候,压缩文件不能存在,要是存在解压的时候会报错;unzip 解压之后之前的压缩包还存在;
2) gzip 格式的压缩和解压缩
- gzip etc.tar #gzip格式压缩
- gunzip etc.tar.gz #gzip格式解压缩
用gz 压缩之后的文件大小也为 6.8M; gunzip 解压的之后,压缩包就成了解压后的文件;
3 ) bzip2 格式的压缩和解压缩
- bzip2 etc.tar #bzip2格式压缩
- bunzip2 etc.tar.bz2 #bzip2格式解压缩
用bzip2 压缩后的文件大小为5.2M ;用 bunzip2 解压之后,压缩包就成了解压后的文件;
4)xz 格式的压缩和解压缩
- xz mnt.tar #xz格式压缩
- unxz mnt.tar.xz #xz格式解压缩
用xz 压缩后的文件大小为4.5 M ;用 unxz 解压之后,压缩包就成了解压后的文件;
3.3 tar+压缩
打包压缩一步完成
1) gzip 格式的打包压缩和解压缩
tar zcf etc.tar.gz /etc
tar zxf etc.tar.gz
2) bzip2 格式的打包压缩和解压缩
tar jcf etc.tar.bz2 /etc
tar jxf etc.tar.bz2
3)xz 格式的打包压缩和解压缩
tar Jcf etc.tar.xz /etc
tar Jxf etc.tar.xz
三种格式的打包压缩过程操作如下:
三种压缩格式的解压缩操作如下:
注:用打包压缩的形式将文件打包,除了用相应的打包解压的方式解压,还可以用上述相应格式的解压方式解压;两者不同之处在于,打包解压不会丢失原有的压缩包,而对应的解压方式是将压缩包解压为文件,压缩包就没有了。