一、实验环境(rhel7.0版本)
主机环境:rhel7.0
各主机信息
主机名 | IP |
---|---|
server | 172.25.254.1 |
desktop | 172.25.254.2 |
二、使用scp进行文件或目录的远程传输
scp 缺点:速度慢,默认忽略文件属性
1、文件的传输
(1)文件的传输方式一——上传的方式
scp [-p] [-l 速率] file username@ip:/dir 以上传的方式进行复制文件(dir为绝对路径,file可以不为绝对路径)
选项与参数:
-p:同步权限
-l:可以限制传输的速率,单位为 Kbits/s,例如 [-l 800] 代表传输速率为 100Kbytes/s
【1】、不加-p参数
server虚拟机
desktop虚拟机
【2】、加-p参数
server虚拟机
desktop虚拟机
(2)文件的传输方式二——下载的方式
scp [-p] [-l 速率] username@ip:file dir 以下载的方式进行复制文件(dir为绝对路径,file也为绝对路径)
选项与参数:
-p:同步权限
-l:可以限制传输速率,单位为 Kbits/s,例如 [-l 800] 代表传输速率为 100Kbytes
测试方法同(1)
2、目录的传输(目录本身的权限,默认同步)
(1)目录的传输方式一——上传的方式
scp [-pr] [-l 速率] dir1 username@ip:/dir2 以上传的方式进行复制目录及其目录中的文件(dir1为绝对路径,dir2为绝对路径)
选项与参数:
-p:同步权限
-r:同步目录
-l:可以限制传输速率,单位为 Kbits/s,例如 [-l 800] 代表传输速率为 100Kbytes
【1】、不加-r参数
server虚拟机
【2】、加-r参数
server虚拟机
desktop虚拟机
【3】、加-p参数
server虚拟机
desktop虚拟机
(2)目录的传输方式二——下载的方式
scp [-pr] [-l 速率] username@ip:dir1 dir2 以下载的方式进行复制及其目录中的文件(dir1为绝对路径,dir2为绝对路径)
选项与参数:
-p:同步权限
-r:同步目录
-l:可以限制传输速率,单位为 Kbits/s,例如 [-l 800] 代表传输速率为 100Kbytes
测试方法同(1)
三、使用rsync进行文件或目录的远程传输
rsync 远程同步,优点:速度快;缺点:默认忽略文件属性,链接文件,设备文件
1、文件的传输
(1)文件的传输方式一——上传的方式
rsync 参数 file username@ip:/dir (dir为绝对路径,file可以不为绝对路径)
参数:
-p --perms:同步权限
-o --owner:同步拥有者
-g --group:同步所属组
-t --times:同步时间戳
-l --links:同步链接文件 链接文件的创建:ln -s /mnt/westos/file1 /mnt/westos/westos1(/mnt/westos/westos1文件指向/mnt/westos/file1文件)
-D --devices:同步设备文件(例如/dev/pts,该文件夹中的所有文件都是设备文件)
-a --archive:归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-v:查看模式,可以列出更多的信息,包括镜像的文件名等
-q:与 -v 相反,安静模式,略过正常信息,只显示错误信息
-u:仅更新(update),若目标文件较新,则保留新闻件不会覆盖
-I:忽略更新时间(mtime)的属性,文件比对上会比较快速
-z:在数据传输时,加上压缩的参数
-e:使用的协议,例如使用 ssh 通到,则 -e ssh
【1】、加-p参数
server虚拟机
desktop虚拟机
【2】、加-o参数
server虚拟机
desktop虚拟机
【3】、加-g参数
server虚拟机
desktop虚拟机
【4】、加-t参数
server虚拟机
desktop虚拟机
【5】、加-l参数
不加-l参数的情况
server虚拟机
desktop虚拟机
加-l参数的情况
server虚拟机
desktop虚拟机
【6】、加-D参数
不加-D参数的情况
server虚拟机
desktop虚拟机
加-D参数的情况
server虚拟机
desktop虚拟机
【7】、加-a参数
server虚拟机
desktop虚拟机
(2)文件的传输方式二——下载的方式
rsync 参数 username@ip:/dir dir (dir为绝对路径,dir也必须为绝对路径)
参数:
-p --perms:同步权限
-o --owner:同步拥有者
-g --group:同步所属组
-t --times:同步时间戳
-l --links:同步链接文件 链接文件的创建:ln -s /mnt/westos/file1 /mnt/westos/westos1(/mnt/westos/westos1文件指向/mnt/westos/file1文件)
-D --devices:同步设备文件(例如/dev/pts,该文件夹中的所有文件都是设备文件)
-a --archive:归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-v:查看模式,可以列出更多的信息,包括镜像的文件名等
-q:与 -v 相反,安静模式,略过正常信息,只显示错误信息
-u:仅更新(update),若目标文件较新,则保留新闻件不会覆盖
-I:忽略更新时间(mtime)的属性,文件比对上会比较快速
-z:在数据传输时,加上压缩的参数
-e:使用的协议,例如使用 ssh 通到,则 -e ssh
2、目录的传输(目录本身的权限,默认不同步,当加-p参数,同步目录中文件的权限时,目录本身的权限也就同步了)
(1)文件的传输方式一——上传的方式
rsync 参数 file username@ip:/dir (dir为绝对路径,file可以不为绝对路径)
参数:
-r --recursive:同步目录
-p --perms:同步权限
-o --owner:同步拥有者
-g --group:同步所属组
-t --times:同步时间戳
-l --links:同步链接文件 链接文件的创建:ln -s /mnt/westos/file1 /mnt/westos/westos1(/mnt/westos/westos1文件指向/mnt/westos/file1文件)
-D --devices:同步设备文件(例如/dev/pts,该文件夹中的所有文件都是设备文件)
-a --archive:归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-v:查看模式,可以列出更多的信息,包括镜像的文件名等
-q:与 -v 相反,安静模式,略过正常信息,只显示错误信息
-u:仅更新(update),若目标文件较新,则保留新闻件不会覆盖
-I:忽略更新时间(mtime)的属性,文件比对上会比较快速
-z:在数据传输时,加上压缩的参数
-e:使用的协议,例如使用 ssh 通到,则 -e ssh
【1】、 -r参数
不加-r参数的情况
server虚拟机
desktop虚拟机
加-r参数的情况
server虚拟机
desktop虚拟机
【2】、剩下参数的测试,同1中文件的传输中的测试
(2)文件的传输方式二——下载的方式
rsync 参数 username@ip:/dir1 dir2 (dir1为绝对路径,dir2也必须为绝对路径)
参数:
-r --recursive:同步目录
-p --perms:同步权限
-o --owner:同步拥有者
-g --group:同步所属组
-t --times:同步时间戳
-l --links:同步链接文件 链接文件的创建:ln -s /mnt/westos/file1 /mnt/westos/westos1(/mnt/westos/westos1文件指向/mnt/westos/file1文件)
-D --devices:同步设备文件(例如/dev/pts,该文件夹中的所有文件都是设备文件)
-a --archive:归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-v:查看模式,可以列出更多的信息,包括镜像的文件名等
-q:与 -v 相反,安静模式,略过正常信息,只显示错误信息
-u:仅更新(update),若目标文件较新,则保留新闻件不会覆盖
-I:忽略更新时间(mtime)的属性,文件比对上会比较快速
-z:在数据传输时,加上压缩的参数
-e:使用的协议,例如使用 ssh 通到,则 -e ssh
3、其他案例
【1】、将 /etc 的数据备份到 /tmp 下面:
[root@server ~]# rsync -av /etc/ /tmp/
...(前面省略)...
sent 29670756 bytes received 41864 bytes 19808413.33 bytes/sec
total size is 29522475 speedup is 0.99
# 第一次运行时会花比较长的时间,因为首次建立需要备份所有的文件。如果再次备份呢?
[root@server ~]# rsync -av /etc/ /tmp/
sending incremental file list
sent 65392 bytes received 331 bytes 131446.00 bytes/sec
total size is 29522475 speedup is 449.20
# 比较一下两次 rsync 的传输与接收数据量
# 传输的数据很少,因为再次比对,仅有差异的文件会被复制
【2】、利用 student 的身份登录 172.25.254.2 将用户主目录复制到本机 /tmp
[root@server ~]# rsync -av -e ssh student@172.25.254.2:~ /tmp
student@172.25.254.2's password:
...(前面省略)...
sent 64450 bytes received 342 bytes 43194.67 bytes/sec
total size is 38322284 speedup is 591.47
[root@server ~]# ll -d /tmp/student/
drwx------. 5 student student 4096 Jun 12 10:34 /tmp/student/
# 瞧,这样就做好备份了,很简单吧。
四、常见的压缩命令——gzip、bzip2、xz
下面列出几个常见的压缩文件扩展名:
- *.Z compress程序压缩的文件;
- *.zip zip程序压缩的文件;
- .gz gzip程序压缩的文件;
- .bz2 bzip2程序压缩的文件;
- .xz xz程序压缩的文件;
- .tar tar程序打包的文件,并没有压缩过;
- .tar.gz tar程序打包的文件,并且经过gzip的压缩;
- .tar.bz2 tar程序打包的文件,并且经过bzip2的压缩;
- .tar.xz tar程序打包的文件,并且经过xz的压缩;
1、gzip,zcat/zmore/zless/zgrep
gzip可以说是应用最广的压缩命令了,目前gzip可以解开compress、zip和gzip的软件所压缩的文件。至于gzip所建立的文件
为*.gz。让我们来看看这个命令的用法:
(1)gzip命令
gzip [-cdvt#] 文件名
选项与参数:
-c:将压缩的数据输出到屏幕上,可通过数据流重定向来处理;
-d:解压缩的参数;
-v:可以显示出原文件/压缩文件的压缩比等信息;
-t:可以用来检测一个压缩文件的一致性,看看文件有无错误;
-#:为数字的意思,代表压缩等级,-1最快,但是压缩比最差,-9最慢,但是压缩比最好,默认是-6
前提环境:将/etc/passwd文件拷贝到/root/Desktop目录下
[root@server1 Desktop]# cp /etc/passwd /root/Desktop/
[root@server1 Desktop]# ls
passwd
1、gzip passwd 压缩passwd这个文件
当使用gzip进行压缩时,在默认的状态下原本的文件会被压缩称为.gz后缀的文件,原文件也不再存在了。
2、gzip -d passwd.gz 解压缩passwd.gz这个压缩文件
当使用gzip -d进行解压缩时,会将原来的.gz文件删除,恢复到原本的passwd文件
3、gzip -v passwd 压缩passwd这个文件,并将压缩比在屏幕上进行显示
4、gzip -t passwd.gz 检测passwd.gz这个文件的正确性
检测结果没有任何输出时,代表该压缩文件是正确的。
5、gzip -9 -c passwd > passwd.gz 将passwd这个文件用最佳的压缩比压缩,并保留原本的文件
(2)zcat/zmore/zless命令
cat/more/less可以使用不同的方式来读取纯文本文件,那个zcat/zmore/zless则可以对应于cat/more/less的方式来读取纯文本
文件被压缩后的压缩文件。由于gzip命令主要想用来替换compress,所以不但compress的压缩文件可以使用gzip解开,同
时zcat这个命令可以同时读取compress与gzip的压缩文件。
1、zcat passwd.gz 读取passwd.gz这个压缩文件中的内容
(3)zgrep命令
如果你还想要从文字压缩文件当中找数据的话,可以通过zgrep来查找关键字,而不需要将压缩文件解开才以grep进行,这对查询备份中的文本文件数据相当有用。
1、zgrep -n student passwd.gz 从passwd.gz这个压缩文件中找到包含student关键字的行,并输出行号
2、bzip2,bzcat/bzmore/bzless/bzgrep
若说gzip是为了替换compress并提供更好的压缩比而成立的,那么bzip2则是为了替换gzip并提供更佳的压缩比而来。bzip2真是很不错的东西,这玩意的压缩比竟然比gzip还要好,至于bzip2的用法几乎与gzip相同,看看下面的用法吧!
(1)bzip2
bzip [-cdvt#kz] 文件名
选项与参数:
-c:将压缩的过程产生的数据输出倒屏幕上;
-d:解压缩的参数;
-v:可以显示出原文件/压缩文件的压缩比等信息;
-t:可以用来检测一个压缩文件的一致性,看看文件有无错误;
-#:与gzip同样的,都是计算压缩比的参数,-9最佳,-1最快;
-k:保留原始文件,而不会删除原始的文件;
-z:压缩的参数()默认值,可以不加;
1、bzip2 passwd 压缩passwd这个文件
当使用bzip2进行压缩时,在默认的状态下原本的文件会被压缩称为.bz2后缀的文件,原文件也不再存在了。
2、bzip2 -d passwd.bz2 解压缩passwd.bz2这个压缩文件
当使用bzip2 -d进行解压缩时,会将原来的.bz2文件删除,恢复到原本的passwd文件
3、bzip2 -v passwd 压缩passwd这个文件,并将压缩比在屏幕上进行显示
4、bzip2 -t passwd.bz2 检测passwd.bz2这个文件的正确性
检测结果没有任何输出时,代表该压缩文件是正确的。
5、bzip2 -9 -c passwd > passwd.bz2 将passwd这个文件用最佳的压缩比压缩,并保留原本的文件
6、bzip2 -k passwd 压缩passwd文件,但是保留原文件。这条命令的效果同上一条命令
(2)bzcat/bzmore/bzless
1、bzcat passwd.bz2 查看passwd.bz2这个压缩文件的内容
(3)bzgrep
1、bzgrep -n student passwd.bz2 从passwd.bz2这个压缩文件中找到student所在的行,并显示行号
看上面的范例,你会发现bzip2连选项与参数都跟gzip一模一样,只是扩展名由.gz变成.bz2而已。也可以发现bzip2的压缩率确实比gzip要好些,不过,对于大容量文件来说,bzip2压缩时间会花比较久,至少比gzip要久的多,这没办法,要由更多可用容量,就要花费相对应的时间。
3、xz,xzcat/xzmore/xzless/xzgrep
虽然bzip2已经具有很棒的压缩比,不过显然某些自由软件开发者还不满足,因此后来还推出了xz这个压缩比更高的软件。这个软件的用法也跟gzip/bzip2几乎一模一样。那我们就来看一看。
(1)xz
xz [-cdvt#lk] 文件名
选项与参数:
-c:将压缩的过程产生的数据输出倒屏幕上;
-d:就是解压缩;
-v:可以显示出原文件/压缩文件的压缩比等信息;
-t:测试压缩文件的完整性,看有没有错误;
-#:同样的,也有较佳的压缩比的意思
-l:列出压缩文件的相关信息;
-k:保留原本的文件不删除;
1、xz passwd 压缩passwd这个文件
当使用xz进行压缩时,在默认的状态下原本的文件会被压缩称为.xz后缀的文件,原文件也不再存在了。
2、xz -d passwd.xz 解压缩passwd.xz这个压缩文件
当使用xz -d进行解压缩时,会将原来的.xz文件删除,恢复到原本的passwd文件
3、xz -v passwd 压缩passwd这个文件,并将压缩比在屏幕上进行显示
4、xz -t passwd.xz 检测passwd.xz这个文件的正确性
检测结果没有任何输出时,代表该压缩文件是正确的。
5、xz -9 -c passwd > passwd.xz 将passwd这个文件用最佳的压缩比压缩,并保留原本的文件
6、xz -k passwd 压缩passwd文件,但是保留原文件。这条命令的效果同上一条命令
7、xz -l passwd.xz 查看passwd.xz这个压缩文件的详细信息
(2)xzcat/xzmore/xzless
1、xzcat passwd.xz 查看passwd.xz这个压缩文件的内容
(3)xzgrep
1、bxzgrep -n student passwd.xz 从passwd.xz这个压缩文件中找到student所在的行,并显示行号
xz这个压缩比真的好太多太多,不过,xz最大的问题是时间太久了。它的运算时间真的比gzip久很多。
所以,如果你不觉得时间是你的成本考虑,那么使用xz会比较好。如果时间是你的重要成本,那么gzip恐怕是比较合适的压缩软件。
五、打包命令——tar(其中的参数加不加-都可以)
前面提到的gzip、bzip2、xz命令大多仅能针对但以稳健来进行压缩,虽然gzip、bzip2、xz也能够针对目录来进行压缩,不过,这三个命令对目录的压缩指的是将目录内的所有文件【分别】进行压缩的操作。而不像在Windows的系统,可以使用WinRAR这一类的压缩文件来将好多数据包成一个文件的样式。
tar命令可以将多个目录或文件打包成一个大文件,同时还可以通过gzip、bzip2、xz的支持,将该文件同时进行压缩。
tar [-z|-j|-J] [-cv] [-f 待建立的文件名] filename... <==打包与压缩
tar [-z|-j|-J] [-tv] [-f 既有的tar文件名] <==查看文件名
tar [-z|-j|-J] [-xv] [-f 既有的tar文件名] [-C 目录] <==解压缩
选项与参数:
-c:建立打包文件,可搭配-v来查看过程中被打包的文件名(filename);
-t:查看打包文件的内容含有哪些文件名,重点在查看【文件名】;
-x:解包或解压缩功能,可以搭配-C(大写)在特定目录解压,特别留意的是,-c、-t、-x不可同时出现在一串命令行中;
-z:通过gzip的支持进行压缩/解压所L此时文件名最好为*.tar.gz;
-j:通过bzip2的支持进行压缩/解压所L此时文件名最好为*.tar.bz2;
-J:通过xz的支持进行压缩/解压所L此时文件名最好为*.tar.xz,特别流以,-z、-j、-J不可以同时出现在一串命令行中;
-v:在压缩/解压所的过程中,将正在处理的文件名显示出来,即显示过程;
-f filename:-f后面要立刻接要被处理的文件名,建议-f单独写一个选项。(比较不会忘记);
-C 目录:这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项;
-p(小写):保留备份数据的原本权限与属性,常用于备份(-c)重要的配置文件;
-P(大写):保留绝对路径,亦即允许备份数据中含有根目录存在之意;
--exclude=FILE:在压缩的过程中,不要将FILE打包
tar -r filename 归档文件名称(以.tar结尾的包) 添加文件到归档文件中
tar --get filename 归档文件名称(以.tar结尾的包) 解档归档文件中的指定文件
tar --delete filename 归档文件名称(以.tar结尾的包) 删除归档文件中的指定文件
1、单纯的打包命令tar
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包中的文件
从上面的数据中,我们可以发现一件有趣的事情,那就是每个文件名都没了根目录。这也就是上一个例子中出现的那个警告信息【tar:Removing leading '/' from member names】(删除了文件名开头的‘/’)所告知的情况。
那么为什么要去掉根目录?主要是为了安全。我们使用tar备份的数据可能会需要解压缩回来使用,在tar所记录的文件名(就是我们刚刚使用tar tf 看到的文件名)那就是解压缩后的时即文件名。如果拿掉了根目录,假设你将备份数据在/tmp中解开,那么解压缩的文件名就会变成【/tmp/etc/xxx】。如果没有去掉根目录,解压缩后的文件名就会是绝对路径,即解压缩后的数据一定会被放置倒/etc/xxx去,如此一来,你的原本的/etc下面的数据,就会被备份数据所覆盖。
4、tar tvf etc.tar 查看etc.tar包中的文件,并显示其中文件的详细信息
如果你想确定你就是需要备份根目录到tar的文件中,那可以用-P(大写)这个选项,请看下面的例子分析
5、tar rf etc.tar filename/dirname 将westos文件放入etc.tar包中(注意:相当于往包中复制了一份文件/目录,原来的文件/目录依然存在)
6、tar f etc.tar --get filename/dirname 从包etc.tar中解档出文件/目录(注意:相当于复制了一份文件/目录出来,包中的文件/目录依然存在)
7、tar f etc.tar --delete filename/dirname 从包etc.tar中删除文件或目录
8、tar xf etc.tar 解压包etc.tar到当前文件夹(原来的包依然存在)
9、tar xf etc.tar -C /mnt 解压包etc.tar到/mnt文件夹下(原来的包依然存在)
9、tar xvf etc.tar -C /mnt 解压包etc.tar到/mnt文件夹下,并显示过程
2、打包命令tar与压缩解压命令(gzip、bzip2、xz)的结合
zip命令 | gzip命令 | bzip2命令 | xz命令 |
zip -r xxx.tar.zip xxx.tar | gzip xxx.tar | bzip2 xxx.tar | xz xxx.tar |
unzip xxx.tar.zip | gunzip xxx.tar.gz | bunzip2 xxx.tar.bz2 | unxz xxx.tar.xz |
归档和压缩一步完成;解档和解压一步完成 | 归档和压缩一步完成; 解档和解压一步完成 | 归档和压缩一步完成;解档和解压一步完成 | |
tar zcf xxx.tar.gz /xxx | tar jcf xxx.tar.bz2 /xxx | tar Jcf xxx.tar.xz /xxx | |
tar zxf xxx.tar.gz | tar jxf xxx.tar.bz2 | tar Jxf xxx.tar.xz |
1、zip -r etc.tar.zip etc.tar 将包etc.tar通过zip的方式压缩为etc.tar.zip(需要注意的是:压缩之后,etc.tar包仍然存在,即会存在两个包——etc.tar包和etc.tar.zip压缩包)
2、unzip etc.tar.zip 解压包etc.tar.zip到当前目录(需要注意的是,解压之后,etc.tar.zip压缩包仍然存在,即会存在两个包——etc.tar.zip压缩包和etc.tar包)
3、gzip etc.tar 将包etc.tar通过gzip的方式压缩成etc.tar.gzip(需要注意的是:压缩之后,包etc.tar不会存在了,即存在一个包——etc.tar.gzip压缩包)
4、gunzip etc.tar.gz 将包etc.tar.gz通过gunzip的方式解压到当前目录(需要注意的是:解压之后,etc.tar.gz压缩包就不会存在了,即存在一个包——etc.tar)
5、bzip2 etc.tar 将包etc.tar通过bzip2的方式压缩成etc.tar.bz2(需要注意的是:压缩之后,包etc.tar不会存在了,即存在一个包——etc.tar.bz2压缩包)
6、bunzip2 etc.tar.bz2 将包etc.tar.bz2通过bunzip2的方式解压到当前文件夹(需要注意的是:解压之后,etc.tar.bz2压缩包就不会存在了,即存在一个包——etc.tar)
7、xz etc.tar 将包etc.tar通过xz的方式压缩成etc.tar.xz(需要注意的是:压缩之后,包etc.tar不会存在了,即存在一个包——etc.tar.xz压缩包)
8、unxz etc.tar.xz 将包etc.tar.xz通过unxz的方式解压到当前目录(需要注意的是:解压之后,etc.tar.xz压缩包就不会存在了,即存在一个包——etc.tar)
9、tar zcf etc.tar.gz /etc 将/etc目录中的所有文件压缩成etc.tar.gz
10、tar zxf etc.tar.gz 将etc.tar.gz解压到当前目录(需要注意的是:解压之后,原来的压缩包依然存在,即存在两个东西——etc目录和etc.tar.gz压缩包)
11、tar jcf etc.tar.bz2 /etc 将/etc目录中的所有文件压缩成etc.tar.bz2
12、tar jxf etc.tar.bz2 将etc.tar.bz2解压到当前目录(需要注意的是:解压之后,原来的压缩包依然存在,即存在两个东西——etc目录和etc.tar.bz2压缩包)
13、tar Jcf etc.tar.xz /etc 将/etc目录中的所有文件压缩成etc.tar.xz
14、tar Jxf etc.tar.xz 将etc.tar.xz解压到当前目录(需要注意的是:解压之后,原来的压缩包依然存在,即存在两个东西——etc目录和etc.tar.xz压缩包)
15、time tar Jcf etc.tar.xz /etc 显示压缩的时间,将/etc目录中的所有文件压缩成etc.tar.xz
多了time会显示程序运行的时间,看real就好了,花去了18.289s
仅解开单一文件的方法
刚刚我们上面解压缩都是将整个打包文件的内容全部解开,想象一个情况,如果我只想要解开打包文件内的其中一个文件而已,那该如何做?很简单,你只要使用-jtf找到你要的文件名,然后将该文件名解开即可,我们用下面的例子来说明一下:
[root@server1 Desktop]# ls
etc etc.tar etc.tar.bz2 etc.tar.gz etc.tar.xz etc.tar.zip file
[root@server1 Desktop]# rm -rf etc
[root@server1 Desktop]# ls
etc.tar etc.tar.bz2 etc.tar.gz etc.tar.xz etc.tar.zip file
1、先找到我们要的文件名,假设解开passwd文件。
[root@server1 Desktop]# tar Jtf etc.tar.xz | grep passwd
etc/passwd
etc/passwd-
etc/security/opasswd
etc/pam.d/passwd
2、将该文件解开
[root@server1 Desktop]# tar Jxf etc.tar.xz etc/passwd
[root@server1 Desktop]# ls
etc etc.tar etc.tar.bz2 etc.tar.gz etc.tar.xz etc.tar.zip file
[root@server1 Desktop]# ls etc
passwd
打包某目录,但不含该目录下的某些文件之做法
假设我们想要打包/etc /root这几个重要目录,但却不想打包/root/etc*开头的文件,因为该文件都是刚刚我们才建立的备份文件。而且假设这个新的打包文件要放置成为/root/system.tar.bz2,当然这个文件自己不要打包自己(因为这个文件放在/root下面),此时我们可以通过--exclude的帮忙,这个exclude就是不包含的意思,所以你可以这样做:
仅备份比某个时刻还要新的文件
某些情况下,你会想要备份新的文件而已,并不想要备份旧文件,此时,--new-mtime这个选项就很重要。其实有两个选项,一个是【--newer】,另一个是【--newer-mtime】,这两个选项有何不同。
- 当使用--newer时,表示后续的日期包含mtime和ctime;
- 而--newer-mtime则仅是mtime而已。
1、先由find找出比/etc/passwd文件还要新的文件
[root@server1 ~]# find /etc/ -newer /etc/passwd -type f
/etc/group
/etc/gshadow
/etc/shadow
/etc/sysconfig/network
/etc/tuned/active_profile
/etc/sudoers
#此时会显示出比/etc/passwd这个文件的mtime还要新的文件
[root@server1 ~]# ll /etc/passwd
-rw-r--r--. 1 root root 2441 May 17 19:52 /etc/passwd
2、好了,那么使用tar来进行打包吧!日期为上面看到的2019-05-17 19:52
[root@server1 ~]# tar jcf etc.newer.than.passwd --newer-mtime="2019-05-17 19:52"
tar: Removing leading `/' from member names
3、显示出文件即可
[root@server1 ~]# tar jtf etc.newer.than.passwd | grep -v '/$'
etc/group
etc/group-
etc/gshadow
etc/gshadow-
etc/passwd
etc/shadow
etc/sudoers
etc/sysconfig/network
etc/tuned/active_profile
基本名称:tarfile、tarball?
另外值的一提的是,tar打包出来的文件有没有进行压缩所得到的文件称呼不同。如果仅是打包而已,就是【tar -cv -f file.tar】而已,这个文件我们称呼为tarfile,如果还有进行压缩的支持,例如【tar -jcv -f file.tar】而已,我们就称呼为tarball。
特殊应用:利用管道命令与数据流
在tar的使用中,有一种方法最特殊,那就是通过标准输入输出的数据流重定向,以及管道命令的方式。将待处理的文件一边打包一边解压所到目标目录。下面来看一个例子:
[root@server1 ~]# ls
anaconda-ks.cfg etc.newer.than.passwd Pictures Videos
Desktop firstboot-screenshots Public
Documents initial-setup-ks.cfg system.tar.bz2
Downloads Music Templates
[root@server1 ~]# cd /mnt/
[root@server1 mnt]# tar jcf - /root/ | tar jxf -
tar: Removing leading `/' from member names
[root@server1 mnt]# ls root/
anaconda-ks.cfg etc.newer.than.passwd Pictures Videos
Desktop firstboot-screenshots Public
Documents initial-setup-ks.cfg system.tar.bz2
Downloads Music Templates
#这个操作有点像是cp -r /root /mnt,依旧是有其用途的。
#要注意的地方在于输出文件变成-而输入文件也变成-又有一个|存在
#这分别代表standard output、standard inout与管道命令。
#简单的想法中,你可以将-想成是内存中的一个设备(缓冲区)
在上面的例子中,我们想将/root下面的数据只解复制到目前所再的路径,也就是/mnt下面,但是又觉得cp -r有点麻烦,那么就直接以这个打包的方式来打包,其中,命令里面的-就表示这个被打包的文件,由于我们不想让中间文件存在,所以就以这个方式来进行复制的操作。
解压缩后的SELinux问题
如果因为某些缘故,你的系统必须要以备份的数据来恢复到原本的系统中,那么要特别注意恢复后,系统的SELinux问题,尤其是在系统文件上面,例如/etc下面的文件,在这里,你只要先知道SELinux的权限问题可能会让你的系统无法读写某些配置文件内容,导致影响到系统的正常使用。
这个问题很常见(明明使用单人模式去操作系统时,看起来一切正常,但就是无法顺利登录),大部分原因就是/etc/shadow这个密码文件的SELinux类型在还原时被更改了,导致系统的登录程序无法顺利的读取它,才造成无法登录的窘境。
那如果处理?简单的处理方式有这几个:
- 通过各种可行的恢复方式登录系统,然后修改/etc/selinux/config文件,将SELinux变成permissive模式,重新启动系统就正常了;
- 在第一次恢复系统后,不要立即重新启动,先使用 restoreconn -Rv /etc自动修复一下SELinux的类型即可
- 通过各种可行的恢复方式登录系统,建立/.autorelabel文件,重新启动后系统会自动修复SELinux的类型,并且又会再次重新启动之后就正常了。
六、查看文件或目录的大小
1、文件
(1)ll
(2)du -sh filename
2、目录
(1)ll
(2)du -sh dir