linux系统中的文件传输

文件传输

1.scp

从本地上传到远程:

1)上传目录:
scp -r ./dir @172.25.254.195:/root
linux系统中的文件传输_第1张图片

远程下载:

2)上传文件
从远程服务器复制到本地服务器:
scp -r [email protected]:/home/Desktop/file /root
      黄色标注可选,即如果是目录拷贝要加“-r”参数。
      从远程复制到本地的scp命令与上面的命令雷同,只要将从本地复制到远程的命令后面2个参数互换顺序就行了。

2.rsync

rsync的概述

rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了——remote sync。rsync是Linux系统下的文件同步和数据传输工具,它采用“rsync”算法,可以将一个客户机和远程文件服务器之间的文件同步,也可以在本地系统中将数据从一个分区备份到另一个分区上。如果rsync在备份过程中出现了数据传输中断,恢复后可以继续传输不一致的部分。rsync可以执行完整备份或增量备份。它的主要特点有:

1.可以镜像保存整个目录树和文件系统;

2.可以很容易做到==保持原来文件的权限、时间、软硬链接;==无须特殊权限即可安装;

3.可以增量同步数据,文件传输效率高,因而同步时间短;

4.可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接;

5.支持匿名传输,以方便进行网站镜象等;

6.加密传输数据,保证了数据的安全性;

常用参数
-r,       --recursive 对子目录以递归模式处理
-p,       --perms 保持文件权限
-o,       --owner 保持文件属主信息
-g,       --group 保持文件属组信息
-t,       --times 保持文件时间信息
-l,       --links 保留软链结
-D,       --devices 保持设备文件信息

对上述命令进行测试
首先建立环境
linux系统中的文件传输_第2张图片

在node1中执行
[root@node1 mnt]# rsync -r /mnt/[email protected]/mnt/
在node2中 ll 命令查询结果
linux系统中的文件传输_第3张图片

在node1中执行
[root@node1 mnt]# rsync -rp /mnt/[email protected]/mnt/
在node2中 ll 命令查询结果
linux系统中的文件传输_第4张图片
在node1中执行
[root@node1 mnt]# rsync -rpo /mnt/[email protected]/mnt/
在node2中 ll 命令查询结果
linux系统中的文件传输_第5张图片
在node1中执行
[root@node1 mnt]# rsync -rpog /mnt/[email protected]/mnt/
在node2中 ll 命令查询结果
linux系统中的文件传输_第6张图片
在node1中执行
[root@node1 mnt]# rsync -rpogt /mnt/[email protected]/mnt/
在node2中 ll 命令查询结果
linux系统中的文件传输_第7张图片
在node1中执行
[root@node1 mnt]# rsync -rpogtl /mnt/[email protected]/mnt/
在node2中 ll 命令查询结果
linux系统中的文件传输_第8张图片
在node1中执行
[root@node1 mnt]# rsync -rD/dev/pts [email protected]/mnt/
在node2中 ll 命令查询结果
linux系统中的文件传输_第9张图片

3.文件的压缩与解压

文件压缩技术

原理:目前我们使用的计算机系统中都是使用所谓的 bytes 单位来计量的!不过,事实上,计算机最小的计量单位应该是 bits 才对啊。此外,我们也知道 1 byte = 8 bits 。但是如果今天我们只是记忆一个数字,亦即是 1 这个数字呢?他会如何记录?假设一个 byte 可以看成这个的模样:由于 1 byte = 8 bits ,所以每个 byte 当中会有 8 个空格,而每个空格可以是 0, 1 ,这里仅是做为一个约略的介绍。由于我们记录数字是 1 ,考虑计算机所谓的二进制喔,如此一来, 1 会在最右边占据 1 个 bit ,而其他的 7 个 bits 将会自动的被填上 0 啰!你看看,其实在这样的例子中,那 7 个 bits 应该是『空的』才对!不过,为了要满足目前我们的操作系统数据的存取,所以就会将该数据转为 byte 的型态来记录了!而一些聪明的计算机工程师就利用一些复杂的计算方式,将这些没有使用到的空间『丢』出来,以让文件占用的空间变小!这就是压缩的技术啦!另外一种压缩技术也很有趣,他是将重复的数据进行统计记录的。举例来说,如果你的数据为『111…』共有 100 个 1 时, 那么压缩技术会记录为『100 个 1』而不是真的有 100 个 1 的位存在!这样也能够精简文件记录的容量呢!

3.1 Linux 系统常见的压缩指令

虽然 Linux 文件的属性基本上是与文件名没有绝对关系的, 但是为了帮助我们,所以适当的扩展名还是必要的!
例如:
*.Z       compress 程序压缩的文件;
*.zip       zip 程序压缩的文件;
*.gz       gzip 程序压缩的文件;
*.bz2       bzip2 程序压缩的文件;
*.xz       xz 程序压缩的文件;
*.tar       tar 程序打包的数据,并没有压缩过;
*.tar.gz       tar 程序打包的文件,其中并且经过 gzip 的压缩
*.tar.bz2       tar 程序打包的文件,其中并且经过 bzip2 的压缩
*.tar.xz       tar 程序打包的文件,其中并且经过 xz 的压缩

3.2gzip, zcat/zmore/zless/zgrep

gzip [-cdtv#] 文件
zcat 文件.gz
选项与参数:
-c :将压缩的数据输出到屏幕上,可透过数据流重导向来处理;
-d :解压缩的参数;
-t :可以用来检验一个压缩文件的一致性~看看文件有无错误;
-v :可以显示出原文件/压缩文件案的压缩比等信息;
-# :# 为数字的意思,代表压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!预设是 -6

这里我们先介绍gzip压缩单个文件,后面了解tar之后再打包压缩文件夹

示例:先复制 /etc/ 下的最大的文件,然后复制到 /mnt/ 下,再用gzip压缩,然后再读取,解压
在这里插入图片描述
用 ls -ldSR /etc/* 找出最大文件 /etc/services
linux系统中的文件传输_第10张图片
在这里插入图片描述
这里的
656       /etc/services
136       /mnt/services.gz
代表 /etc/serservices    为656M       /mnt/services.gz   为136M

查看打包内容可以用       zcat services.gz      查看,由于内容太多没截图

linux系统中的文件传输_第11张图片
gzip -d services.gz       -d 会将原本的 .gz 删除,回复到原本的 services 文件。

也可以使用 gunzip 命令来解压
linux系统中的文件传输_第12张图片

可以用zgrep -n 来查找压缩文件中的关键字
linux系统中的文件传输_第13张图片

3.3bzip2, bzcat/bzmore/bzless/bzgrep

bzip2 [-cdkzv#] 文件
bzcat 文件.bz2

3.4xz, xzcat/xzmore/xzless/xzgrep

xz [-dtlkc#] 文件
xcat 文件.xz

注意:

bzip2和xz中比gzip多了一个参数
-k      :保留源文件,而不会删除原始的文件
在这三个压缩命令中xz压缩率最高
不考虑时间,选择xz
考虑时间,选择gzip

4.打包指令:tar

以下摘自 鸟哥的linux私房菜

[dmtsai@study ~]$ tar [-z|-j|-J] [cv] [-f 待建立的新檔名] filename... <==打包与压缩
[dmtsai@study ~]$ tar [-z|-j|-J] [tv] [-f 既有的 tar 檔名] <==察看檔名
[dmtsai@study ~]$ tar [-z|-j|-J] [xv] [-f 既有的 tar 檔名] [-C 目录] <==解压缩
选项与参数:
-c :建立打包文件,可搭配 -v 来察看过程中被打包的档名(filename)
-t :察看打包文件的内容含有哪些档名,重点在察看『档名』就是了;
-x :解打包或解压缩的功能,可以搭配 -C (大写) 在特定目录解开
特别留意的是, -c, -t, -x 不可同时出现在一串指令列中。
-z :透过 gzip的支持进行压缩/解压缩:此时档名最好为 *.tar.gz
-j :透过 bzip2 的支持进行压缩/解压缩:此时档名最好为 *.tar.bz2
-J :透过 xz的支持进行压缩/解压缩:此时档名最好为 *.tar.xz
特别留意, -z, -j, -J 不可以同时出现在一串指令列中
-v :在压缩/解压缩的过程中,将正在处理的文件名显示出来!
-f filename:-f 后面要立刻接要被处理的档名!建议 -f 单独写一个选项啰!(比较不会忘记)
-C 目录:这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。
其他后续练习会使用到的选项介绍:
-p(小写) :保留备份数据的原本权限与属性,常用于备份(-c)重要的配置文件
-P(大写) :保留绝对路径,亦即允许备份数据中含有根目录存在之意;
--exclude=FILE:在压缩的过程中,不要将 FILE 打包!

–get :解档指定文件
–delete :删除归档中的指定文件
其实最简单的使用 tar 就只要记忆底下的方式即可:
 压 缩:tar -jcv -f filename.tar.bz2       要被压缩的文件或目录名称
 查 询:tar -jtv -f filename.tar.bz2
 解压缩:tar -jxv -f filename.tar.bz2 -C       欲解压缩的目录

tar [-z|-j|-J] [cv] [-f 待建立的新檔名] filename… <==打包与压缩
linux系统中的文件传输_第14张图片

tar [-z|-j|-J] [tv] [-f 既有的 tar 檔名] <==察看檔名
linux系统中的文件传输_第15张图片

使用 tar 加入 -z, -j 或 -J 的参数备份 /etc/ 目录

linux系统中的文件传输_第16张图片
。。。中间内容省略。。。
linux系统中的文件传输_第17张图片

注意 这一条『tar: Removing leading ‘/’ from member names(移除了档名开头的 `/’ )』 的警告信息

real 说明程序花了 0m1.153s
-v使中间的文件名显示到了屏幕上
同样的我们可以使用
time tar -jpc -f /root/etc.tar.bz2 /etc
time tar -Jpc -f /root/etc.tar.xz /etc
来压缩etc文件
linux系统中的文件传输_第18张图片
用file命令查看文件的格式,后缀
linux系统中的文件传输_第19张图片
压缩文件大小以及压缩效率

查阅 tar 文件的数据内容 (可察看檔名),与备份文件名有否根目录的意义

linux系统中的文件传输_第20张图片

以下摘自 鸟哥的linux私房菜

如果加上 -v 这个选项时,详细的文件权限/属性都会被列出来!如果只是想要知道檔名而已, 那么就将 -v 拿掉即可。从上面的数据我们可以发现一件很有趣的事情,那就是每个文件名都没了根目录了!这也是上一个练习中出现的那个警告讯息『tar: Removing leading '/' from member names(移除了档名开头的 `/' )』所告知的情况!那为什么要拿掉根目录呢?主要是为了安全!我们使用 tar 备份的数据可能会需要解压缩回来使用, 在 tar 所记录的文件名 (就是我们刚刚使用 tar -jtvf 所察看到的檔名) 那就是解压缩后的实际档名。 如果拿掉了根目录,假设你将备份数据在 /tmp 解开,那么解压缩的档名就会变成『/tmp/etc/xxx』。但『如果没有拿掉根目录,解压缩后的档名就会是绝对路径, 亦即解压缩后的数据一定会被放置到 /etc/xxx 去!』如此一来,你的原本的 /etc/ 底下的数据, 就会被备份数据所覆盖过去了!
你会说:『既然是备份数据,那么还原回来也没有什么问题吧?』想象一个状况,你备份的资料是两年前的旧版 CentOS 6.x, 你只是想要了解一下过去的备份内容究竟有哪些数据而已,结果一解开该文件,却发现你目前新版的 CentOS 7.x 底下的 /etc 被旧版的备份数据覆盖了!此时你该如何是好?大概除了哭哭你也不能做啥事吧?所以啰,当然是拿掉根目录比较安全一些的。
如果你确定你就是需要备份根目录到 tar 的文件中,那可以使用 -P (大写) 这个选项,
请看底下的例子分析:范例:将文件名中的(根)目录也备份下来,并察看一下备份档的内容档名
[root@study ~]# tar -jpPcv -f /root/etc.and.root.tar.bz2 /etc
[root@study ~]# tar -jtf /root/etc.and.root.tar.bz2
/etc/locale.conf
/etc/hostname
/etc/aliases.db
#这次查阅文件名不含 -v 选项,所以仅有文件名而已!没有详细属性/权限等参数。
有发现不同点了吧?如果加上 -P 选项,那么文件名内的根目录就会存在喔!不过,鸟哥个人建议,
还是不要加上 -P 这个选项来备份! 毕竟很多时候,我们备份是为了要未来追踪问题用的,倒不一
定需要还原回原本的系统中! 所以拿掉根目录后,备份数据的应用会比较有弹性!也比较安全呢!

将备份的数据解压缩,并考虑特定目录的解压缩动作 (-C 选项的应用)

tar -jxv -f /root/etc.tar.bz2 -C /tmp       -C将文件解压到/tmp 下

仅解开单一文件的方法

tar -jxv -f /root/etc.tar.bz2 etc/shadow      tar -jxv -f 打包檔.tar.bz2 待解开档名 需要准确找到解档名

打包某目录,但不含该目录下的某些文件之作法

tar -jcv -f /root/system.tar.bz2 --exclude=/root/etc*–exclude=/root/system.tar.bz2 /etc /root      --exclude 就是不包含的意思

仅备份比某个时刻还要新的文件

1.先由 find 找出比 /etc/passwd 还要新的文件
[root@study ~]# find /etc -newer /etc/passwd
…(过程省略)…
此时会显示出比 /etc/passwd 这个文件的 mtime 还要新的档名,
这个结果在每部主机都不相同!您先自行查阅自己的主机即可,不会跟鸟哥一样!
[root@study ~]# ll /etc/passwd
-rw-r–r--. 1 root root 2092
Jun 17 00:20 /etc/passwd
2. 好了,那么使用 tar 来进行打包吧!日期为上面看到的 2015/06/17
[root@study ~]# tar -jcv -f /root/etc.newer.then.passwd.tar.bz2 --newer-mtime=“2015/06/17” /etc/*
tar: Option --newer-mtime: Treating date ‘2015/06/17’ as 2015-06-17 00:00:00
tar: Removing leading `/’ from member names
/etc/abrt/
…(中间省略)…
/etc/alsa/
/etc/yum.repos.d/
…(中间省略)…
tar: /etc/yum.repos.d/CentOS-fasttrack.repo: file is unchanged; not dumped
最后行显示的是『没有被备份的』,亦即 not dumped 的意思!
3. 显示出文件即可
[root@study ~]# tar -jtv -f /root/etc.newer.then.passwd.tar.bz2 | grep -v ‘/$’
透过这个指令可以呼叫出 tar.bz2 内的结尾非 / 的檔名!就是我们要的啦!

你可能感兴趣的:(linux系统中的文件传输)