2018-08-09笔记

压缩打包

常见的压缩文件:
Windows:.zip .7z .rar
Linux:.zip, .gz, .bz2, .xz, .tar.gz, .tar.bz2, .tar.xz
为什么要压缩?
有时候对电脑磁盘上的文件或者文件夹做压缩,方便传输。压缩后空间会小一点,针对磁盘来说,会节省空间。对网络来说,压缩后对带宽要求会低一点,压缩可以有效地减小带宽。
Linux下的压缩文件不一定非要使用上述后缀名,但是便于使用和辨认,遵循这些约定。
==Linux不识别rar格式的压缩文件==

.gz 表示由gzip压缩工具压缩的文件。
.bz2 表示由bzip2压缩工具压缩的文件。
.tar 表示由tar打包程序打包的文件(tar没有压缩功能,只是把一个目录合并成一个文件)
.tar.gz 先打包,在由gzip压缩
.tar.bz2 先打包,在由bzip2压缩
.tar.xz 先打包,在由xz压缩

gzip压缩工具

格式

gzip [参数] filename

选项

-a或——ascii:使用ASCII文字模式;
-d或--decompress或----uncompress:解开压缩文件;
-f或——force:强行压缩文件。不理会文件名称或硬连接是否存在以及该文件是否为符号连接;
-h或——help:在线帮助;
-l或——list:列出压缩文件的相关信息;
-L或——license:显示版本与版权信息;
-n或--no-name:压缩文件时,不保存原来的文件名称及时间戳记;
-N或——name:压缩文件时,保存原来的文件名称及时间戳记;
-q或——quiet:不显示警告信息;
-r或——recursive:递归处理,将指定目录下的所有文件及子目录一并处理;
-S或<压缩字尾字符串>或----suffix<压缩字尾字符串>:更改压缩字尾字符串;
-t或——test:测试压缩文件是否正确无误;
-v或——verbose:显示指令执行过程;
-V或——version:显示版本信息;
-<压缩效率>:压缩效率是一个介于1~9的数值,预设值为“6”,指定愈大的数值,压缩效率就会愈高;
--best:此参数的效果和指定“-9”参数相同;
--fast:此参数的效果和指定“-1”参数相同。

示例

gzip -d是解压缩。
gzip -# filename     //#范围1-9,默认6
gzip 不能压缩目录
gzip filename 压缩文件,暂不支持压缩目录,压缩后源文件消失
gzip -d filename.gz 解压文件,解压后,源压缩文件消失
gunzip filename.gz 解压文件, 解压后,源压缩文件消失
gzip –c filename > /tmp/filename.gz指定压缩文件路径,并且源文件存在
gzip –d –c /tmp/filename.gz > /目录/filename 解压文件到那个路径下,并且源压缩文件存在。
gunzip –c /tmp/filename.gz > /目录/filename 解压文件到那个路径下,并且源压缩文件存在。
zcat 1.txt.gz 查看.gz文件
file /tmp/1.txt.gz 查看文件的属性
  • gzip 1.txt
    进入/tmp/下做实验,首先创建一个目录
[root@linux7-128 ~]# cd /tmp/
[root@linux7-128 tmp]# mkdir hgz

然后在创建一个比较大的文件,可以把/etc/下所有conf后缀的文件内部全部放到新文件下

(使用find命令先查找出/etc/下所有后缀为conf的文件)
[root@linux7-128 tmp]# find /etc/ -type f -name "*conf" 
/etc/resolv.conf
/etc/pki/ca-trust/ca-legacy.conf
/etc/yum/pluginconf.d/fastestmirror.conf
/etc/yum/pluginconf.d/langpacks.conf
/etc/yum/protected.d/systemd.conf
......
/etc/abrt/plugins/CCpp.conf
/etc/geoclue/geoclue.conf
/etc/ntp.conf
/etc/setroubleshoot/setroubleshoot.conf
(然后将这些文件的内容全部传输至1.txt中,注意此时进入到hgz目录中)
[root@linux7-128 hgz]# find /etc/ -type f -name "*conf" -exec cat {} >> 1.txt \;
(使用df -h查看文件大小,发现内存很小,多循环几次)
[root@linux7-128 hgz]# du -sh 1.txt 
652K    1.txt
[root@linux7-128 hgz]# find /etc/ -type f -name "*conf" -exec cat {} >> 1.txt \;
[root@linux7-128 hgz]# find /etc/ -type f -name "*conf" -exec cat {} >> 1.txt \;
[root@linux7-128 hgz]# find /etc/ -type f -name "*conf" -exec cat {} >> 1.txt \;
[root@linux7-128 hgz]# find /etc/ -type f -name "*conf" -exec cat {} >> 1.txt \;
[root@linux7-128 hgz]# find /etc/ -type f -name "*conf" -exec cat {} >> 1.txt \;
[root@linux7-128 hgz]# find /etc/ -type f -name "*conf" -exec cat {} >> 1.txt \;
[root@linux7-128 hgz]# du -sh 1.txt 
4.7M    1.txt
[root@linux7-128 hgz]# wc -l 1.txt 
132678 1.txt

这时候使用gzip压缩一下

[root@linux7-128 hgz]# gzip 1.txt 
[root@linux7-128 hgz]# ls
1.txt.gz
[root@linux7-128 hgz]# du -sh 1.txt.gz 
1.2M    1.txt.gz

经过压缩,文件名后缀变为了.gz,大小也缩小为1.2M。现在在解压一下,使用gzip -d

[root@linux7-128 hgz]# gzip -d 1.txt.gz 
[root@linux7-128 hgz]# ls
1.txt
[root@linux7-128 hgz]# du -sh 1.txt 
4.5M    1.txt
[root@linux7-128 hgz]# wc -l 1.txt 
132678 1.txt

解压完成后发现一个问题,文件大小变为了4.5M,而没有解压缩之前的文件大小是4.7M,他们的行数是一样的,所以不是少了内容。这是因为之前在追加内容时,文件大小的虚的,类似海绵里的水,经过解压缩后,此时的文件大小才是正常的大小。

  • gzip -(1-9)
    gzip有种用法是后面-数字1-9,表示压缩级别,默认级别是6。级别1最不严谨,9最严谨,同时也最耗费CPU资源。
[root@linux7-128 hgz]# gzip -1 1.txt 
[root@linux7-128 hgz]# du -sh 1.txt.gz 
1.4M    1.txt.gz

这里可以看到使用1级别压缩后,大小为1.4M,使用默认级别6时压缩大小为1.2M。我们平时压缩一般保持默认即可。

[root@linux7-128 hgz]# gzip -9 1.txt 
[root@linux7-128 hgz]# du -sh 1.txt.gz 
1.2M    1.txt.gz

从上面可以看出,使用9级别压缩的大小和默认6级别大小是一样的,这说明当文件压缩到一定程度时,会取一个适中的值,不会再继续往小压缩。

  • gunzip
    gzip的另一种解压命令
[root@linux7-128 hgz]# gunzip 1.txt.gz 
[root@linux7-128 hgz]# ls
1.txt
  • 如何查看压缩文件,zcat
    cat命令是不能查看压缩文件的,这时候文件以及成了一个二进制的文件。
    这时候可以使用zcat,实际上这个命令就是解压后在查看
    [root@linux7-128 hgz]# zcat 1.txt.gz
    文件内容过多不在此多叙述。
    也可以使用file命令查看压缩文件信息
[root@linux7-128 hgz]# file 1.txt.gz 
1.txt.gz: gzip compressed data, was "1.txt", from Unix, last modified: Thu May 24 20:52:19 2018, max compression
  • 压缩文件时保留原文件
[root@linux7-128 hgz]# gzip -c 1.txt > /tmp/1.txt.gz
[root@linux7-128 hgz]# ls
1.txt
[root@linux7-128 hgz]# ls /tmp/1.txt.gz 
/tmp/1.txt.gz
[root@linux7-128 hgz]# file !$
file /tmp/1.txt.gz
/tmp/1.txt.gz: gzip compressed data, was "1.txt", from Unix, last modified: Thu May 24 20:52:19 2018
  • 解压文件到其他地方
[root@linux7-128 hgz]# gzip -d -c /tmp/1.txt.gz > 2.txt
[root@linux7-128 hgz]# ls
1.txt  2.txt
[root@linux7-128 hgz]# wc -l *.txt
 132678 1.txt
 132678 2.txt
 265356 总用量
[root@linux7-128 hgz]# du -sh *.txt
4.5M    1.txt
4.5M    2.txt

这是新解压的文件和原文件大小行数都是相同的
- gzip不能解压目录

递归的压缩目录

gzip -rv test6
这样,所有test下面的文件都变成了*.gz,目录依然存在只是目录里面的文件相应变成了*.gz.这就是压缩,和打包不同。因为是对目录操作,所以需要加上-r选项,这样也可以对子目录进行递归了。

递归地解压目录

gzip -dr test6
  • 查找/etc/下后缀为.conf的文件,并将它的内容追加到文件1.txt中,并且压缩它,然后再解压。
[root@linux-151 d6z]# find /etc/ -type f -name "*.conf" -exec cat {} 
>>1.txt \;
[root@linux-151 d6z]# du -sh 1.txt
4.0M 1.txt      //这里要注意一下,这个大小不太准确,这里多次追加会看到文件,du -sh 1.txt查看的文件数值不同,但在多次查看,文件大小会恢复正常。(跳转数值较大比,是因为这个文件本身存在很多空隙,最后在压缩并解压后,会发现大小会有不同)
[root@linux-151 d6z]# gzip 1.txt
[root@linux-151 d6z]# du -sh 1.txt.gz664K1.txt.gz 
[root@linux-151 d6z]# gzip -d 1.txt.gz
[root@linux-151 d6z]# du -sh 1.txt2.5M1.txt 
[root@linux-151 d6z]# gzip 1.txt
[root@linux-151 d6z]# du -sh 1.txt.gz664K1.txt.gz 
[root@linux-151 d6z]# gunzip  1.txt.gz
[root@linux-151 d6z]# du -sh 1.txt
2.5M 1.txt
  • 压缩文件1.txt,并且将压缩文件放到/tmp/下
[root@linux-151 d6z]# gzip -c 1.txt > /tmp/1.txt.gz
[root@linux-151 d6z]# ls
1.txt 
[root@linux-151 d6z]# ls /tmp/1.txt.gz
/tmp/1.txt.gz 
[root@linux-151 d6z]# du -sh /tmp/1.txt.gz
664K /tmp/1.txt.gz
  • 解压文件1.txt.gz ,存放到当前目录下,命名为2.txt
[root@linux-151 d6z]# gzip -d -c /tmp/1.txt.gz > ./2.txt
[root@linux-151 d6z]# ls
1.txt  2.txt 
[root@linux-151 d6z]# wc -l 1.txt 2.txt   
64790 1.txt   64790 2.txt  129580 总用量 
[root@linux-151 d6z]# du -sh 1.txt 2.txt
2.5M 1.txt 2.5M 2.txt 
[root@linux-151 d6z]# ls /tmp/1.txt.gz
/tmp/1.txt.gz
  • 查看压缩文件1.txt.gz的内容,因为内容比较多,这里就不粘贴出来了。

[root@linux-151 d6z]# zcat /tmp/1.txt.gz
- file /tmp/1.txt.gz 查看属性

[root@linux-151 d6z]# file /tmp/1.txt.gz
/tmp/1.txt.gz: gzip compressed data, was "1.txt", from Unix, last modified: Thu Nov  9 20:33:33 2018   
/tmp/1.txt.gz 压缩数据是1.txt,基于unix平台,最后修改时间是2018416日星期一

bzip2压缩工具

bzip命令的格式:bzip2 [-dz] filename,压缩文件时加不加-z都一样,-d 解压缩。
bzip比gzip压缩更小,所耗费的CPU资源也最大(压缩的文件也是最小的)

安装:yum install -y bzip2

选项

-c或——stdout:将压缩与解压缩的结果送到标准输出;
-d或——decompress:执行解压缩;
-f或-force:bzip2在压缩或解压缩时,若输出文件与现有文件同名,预设不会覆盖现有文件。若要覆盖。请使用此参数;
-h或——help:在线帮助;
-k或——keep:bzip2在压缩或解压缩后,会删除原始文件。若要保留原始文件,请使用此参数;
-s或——small:降低程序执行时内存的使用量;
-t或——test:测试.bz2压缩文件的完整性;
-v或——verbose:压缩或解压缩文件时,显示详细的信息;
-z或——compress:强制执行压缩;
-V或——version:显示版本信息;
--repetitive-best:若文件中有重复出现的资料时,可利用此参数提高压缩效果;
--repetitive-fast:若文件中有重复出现的资料时,可利用此参数加快执行效果。

示例

bzip2 1.txt / bzip2 -z 1.txt //压缩文件
bzip2 -d 1.txt.bz2 / bunzip2 1.txt.bz2 //解压文件
bzip -# 1.txt //#范围1-9,默认9
不能压缩目录
bzcat 1.txt.bz2 //查看压缩文件
bzip2 -c 1.txt > /root/1.txt.bz2 //指定压缩文件路径,并且源文件存在
bzip2 -c -d /root/1.txt.bz2 > /tmp/1.txt.new2 //解压文件到指定路径下,并且源压缩文件存在
File 1.txt.bz2 查看文件属性
  • 压缩解压

压缩

[root@linux7-128 hgz]# bzip2 1.txt 
[root@linux7-128 hgz]# ls
1.txt.bz2  2.txt
[root@linux7-128 hgz]# du -sh 1.txt.bz2 
872K    1.txt.bz2

之前使用gzip压缩是,1.txt被压缩到1.2M,使用bzip2时,被压缩到了872K。
解压

[root@linux7-128 hgz]# bzip2 -d 1.txt.bz2
或者
[root@linux7-128 hgz]# bunzip2  1.txt.bz2
  • bzip2 -(1-9)

用法和gzip相同,默认级别是9

[root@linux7-128 hgz]# bzip2 -9 1.txt 
[root@linux7-128 hgz]# du -sh 1.txt.bz2 
872K    1.txt.bz2
  • 压缩文件时保留原文件
[root@linux7-128 hgz]# bzip2 -c 1.txt > /tmp/1.txt.bz
[root@linux7-128 hgz]# ls
1.txt  2.txt
[root@linux7-128 hgz]# ls /tmp/1.txt.bz
/tmp/1.txt.bz
[root@linux7-128 hgz]# file !$
file /tmp/1.txt.bz
/tmp/1.txt.bz: bzip2 compressed data, block size = 900k
(注意这里会显示块大小)
  • 解压文件到其他地方
[root@linux7-128 hgz]# bzip2 -d -c /tmp/1.txt.bz > 3.txt
[root@linux7-128 hgz]# ls
1.txt  2.txt  3.txt
[root@linux7-128 hgz]# du -sh *.txt
4.5M    1.txt
4.5M    2.txt
4.5M    3.txt
  • 将1.txt.bz重命名为1.txt
[root@linux7-128 hgz]# ls
1.txt.bz2  2.txt  3.txt
[root@linux7-128 hgz]# mv 1.txt.bz2  1.txt
[root@linux7-128 hgz]# ls
1.txt  2.txt  3.txt
(使用less查看时会提示这可能是一个压缩文件,是否要继续查看)
[root@linux7-128 hgz]# less 1.txt 
"1.txt" may be a binary file.  See it anyway? 
(使用file查看文件类型,看到1.txt实际是一个bzip2压缩的文件,2.txt是文本文件)
[root@linux7-128 hgz]# file 1.txt 
1.txt: bzip2 compressed data, block size = 900k
[root@linux7-128 hgz]# file 2.txt 
2.txt: C source, ASCII text
(最后别忘了把1.txt改回1.txt.bz2)
[root@linux7-128 hgz]# mv 1.txt 1.txt.bz2
  • bzcat 查看压缩文件

可被压缩的以使用bzcat查看被压缩的.bz2文件
[root@linux7-128 hgz]# bzcat 1.txt.bz2

  • 查看文件1.txt.bz2的属性。
[root@linux-151 d6z]# file /tmp/1.txt.bz2
/tmp/1.txt.bz2: bzip2 compressed data, block size = 900k  
//bzip2压缩数据,大小为900k

xz压缩工具

和前两个相比,用法类似,不常用,但是在常用的tar包里会用到。它的压缩效率要比gzip和bzip2还要狠。
xz命令格式:xz[-zd] filename 压缩文件加不加-z都可以,-d解压缩。
xz压缩文件比bzip2更小,所耗费的CPU资源也最大(压缩的文件也是最小的)

示例

xz 1.txt / xz -z 1.txt //压缩文件
xz -d 1.txt.xz / unxz 1.txt.xz //解压缩文件
xz -# 1.txt //#范围1-9,默认9
不能压缩目录
xzcat 1.txt.xz //查看压缩文件内容
xz -c 1.txt > /root/1.txt.xz //指定压缩文件路径,并且源文件存在
xz -d -c /root/1.txt.xz > 1.txt.new3 //解压文件到指定路径下,并且源压缩文件存在
file 1.txt.xz查看文件属性
  • 压缩解压
[root@linux7-128 hgz]# du -sh 1.txt.xz 
148K    1.txt.xz

压缩之后只有148K

[root@linux7-128 hgz]# xz -d 1.txt.xz 
[root@linux7-128 hgz]# ls
1.txt  2.txt  3.txt
  • xz -(1-9)

和之前一样,默认级别为6
- 压缩文件时保留原文件

[root@linux7-128 hgz]# xz -c 1.txt > /tmp/1.txt.xz
[root@linux7-128 hgz]# ls
1.txt  2.txt  3.txt
[root@linux7-128 hgz]# ls /tmp/1.txt.xz
/tmp/1.txt.xz
  • 解压文件到其他地方
[root@linux7-128 hgz]# xz -d -c /tmp/1.txt.xz > 4.txt
[root@linux7-128 hgz]# ls
1.txt  2.txt  3.txt  4.txt
  • xzcat 查看压缩文件

[root@linux7-128 hgz]# xzcat 1.txt.xz

  • 压缩文件1.txt
root@linux-151 d6z]# xz 1.txt
[root@linux-151 d6z]# ls
1.txt.xz  2.txt  3.txt
  • 解压文件1.txt.xz
[root@linux-151 d6z]# xz -d 1.txt.xz 
[root@linux-151 d6z]# ls
1.txt  2.txt  3.txt
  • 压缩文件1.txt,并且指定路径,源文件存在
[root@linux-151 d6z]# xz -c 1.txt > /tmp/1.txt.xz
[root@linux-151 d6z]# ls
1.txt  2.txt  3.txt 
[root@linux-151 d6z]# ls /tmp/1.txt.xz
/tmp/1.txt.xz
  • 解压文件1.txt.xz,并且指定路径重名命为4.txt,源文件存在。
[root@linux-151 d6z]# xz -d -c /tmp/1.txt.xz > ./4.txt
[root@linux-151 d6z]# ls
1.txt  2.txt  3.txt  4.txt 
[root@linux-151 d6z]# ls /tmp/1.txt.xz
/tmp/1.txt.xz
  • file 1.txz.xz
[root@linux-151 d6z]# file /tmp/1.txt.xz
/tmp/1.txt.xz: XZ compressed data  //xz压缩数据。
  • 1.txt.xz<1.txt.bz2<1.txt.gz 说明xz压缩更严谨,但是所耗费cpu资源最大。
[root@linux-151 d6z]# du -sh /tmp/1.txt.gz /tmp/1.txt.bz2 /tmp/1.txt.xz
664K /tmp/1.txt.gz
260K /tmp/1.txt.bz
260K /tmp/1.txt.xz

zip压缩工具

前面几个命令都不支持压缩目录,zip支持。
默认不支持解压Windows下的rar文件,需要安装一个工具。
安装:yum install -y zip

zip 1.txt.zip 1.txt    //压缩文件
zip -r 123.zip 123/   //压缩目录
unzip 1.txt.zip //解压
unzip 123.zip -d /root/456/ //解压文件,并指定解压到那个目录下
不能查看压缩文件的内容,只能查看内容列表
unzip -l 123.zip //查看压缩文件的内容列表
zip压缩文件后,源文件不消失

压缩文件

基本用法:zip [参数] [打包后的文件名] [打包的目录路径]
- 压缩解压

压缩1.txt为1.txt.zip

[root@linux7-128 hgz]# zip 1.txt.zip 1.txt 
  adding: 1.txt (deflated 74%)
[root@linux7-128 hgz]# ls
1.txt  1.txt.zip  2.txt  3.txt  4.txt
[root@linux7-128 hgz]# du -sh 1.txt.zip 
1.2M    1.txt.zip

注意:不同的文件适用于不用的压缩命令,不是绝对的认为xz是压缩最狠的。

压缩目录 zip -r

首先新建一个目录,并把1.txt和2.txt文件放进去

[root@linux7-128 hgz]# mkdir 123
[root@linux7-128 hgz]# cp 1.txt 123/
[root@linux7-128 hgz]# cp 2.txt 123/
[root@linux7-128 hgz]# tree
.
├── 123
│   ├── 1.txt
│   └── 2.txt
├── 1.txt
├── 1.txt.zip
├── 2.txt
├── 3.txt
└── 4.txt

1 directory, 7 files
[root@linux7-128 hgz]# du -sh 123
9.0M    123

压缩3.txt和123到123.zip

[root@linux7-128 hgz]# zip -r 123.zip 3.txt 123
  adding: 3.txt (deflated 74%)
  adding: 123/ (stored 0%)
  adding: 123/1.txt (deflated 74%)
  adding: 123/2.txt (deflated 74%)
[root@linux7-128 hgz]# du -sh 123.zip 
3.6M    123.zip

使用zip压缩,原来的文件依旧保存,不删除。

解压 unzip

安装:yum install -y unzip
解压123.zip

[root@linux7-128 hgz]# unzip 123.zip 
Archive:  123.zip
replace 3.txt? [y]es, [n]o, [A]ll, [N]one, [r]ename: A
  inflating: 3.txt                   
  inflating: 123/1.txt               
  inflating: 123/2.txt 

因为压缩的时候并没有删除源文件,所以在解压缩的时候会提示,是不是要覆盖,是不是要替换,是不是要重命名,根据自己情况选择

语法

unzip [-cflptuvz][-agCjLMnoqsVX][-P <密码>][.zip文件][文件][-d <目录>][-x <文件>] 或 unzip [-Z]

参数

-c 将解压缩的结果显示到屏幕上,并对字符做适当的转换。
-f 更新现有的文件。
-l 显示压缩文件内所包含的文件。
-p 与-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换。
-t 检查压缩文件是否正确。
-u 与-f参数类似,但是除了更新现有的文件外,也会将压缩文件中的其他文件解压缩到目录中。
-v 执行是时显示详细的信息。
-z 仅显示压缩文件的备注文字。
-a 对文本文件进行必要的字符转换。
-b 不要对文本文件进行字符转换。
-C 压缩文件中的文件名称区分大小写。
-j 不处理压缩文件中原有的目录路径。
-L 将压缩文件中的全部文件名改为小写。
-M 将输出结果送到more程序处理。
-n 解压缩时不要覆盖原有的文件。
-o 不必先询问用户,unzip执行后覆盖原有文件。
-P<密码> 使用zip的密码选项。
-q 执行时不显示任何信息。
-s 将文件名中的空白字符转换为底线字符。
-V 保留VMS的文件版本信息。
-X 解压缩时同时回存文件原来的UID/GID[.zip文件] 指定.zip压缩文件。
[文件] 指定要处理.zip压缩文件中的哪些文件。
-d<目录> 指定文件解压缩后所要存储的目录。
-x<文件> 指定不要处理.zip压缩文件中的哪些文件。
-Z unzip -Z等于执行zipinfo指令。

实例

解压到其他目录

[root@linux7-128 hgz]# mkdir test
[root@linux7-128 hgz]# unzip 123.zip -d test/
Archive:  123.zip
  inflating: test/3.txt              
   creating: test/123/
  inflating: test/123/1.txt          
  inflating: test/123/2.txt          
[root@linux7-128 hgz]# ls test/
123  3.txt

注意。压缩前是目录,解压后也必须是目录,不能更改。

查看压缩文件

zip压缩是不能查看文件内容的,只能查看目录

[root@linux7-128 hgz]# unzip -l 123.zip 
Archive:  123.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
  4665871  05-24-2018 21:58   3.txt
        0  05-24-2018 22:36   123/
  4665871  05-24-2018 22:36   123/1.txt
  4665871  05-24-2018 22:36   123/2.txt
---------                     -------
 13997613                     4 files

tar打包

tar是用来建立,还原备份文件的工具程序,它可以加入,解开备份文件内的文件。
tar本身是一个打包工具,可以把目录打包成一个文件,它把所有的文件整合成一个大文件,方便复制或者移动。

格式

tar [-zjxcvfpP] filename.tar

参数

-z表示同时使用gzip压缩
-j表示同时用bzip压缩
-J表示同时用xz压缩
-c表示建立一个tar包或者压缩文件包
-x表示解包或者解压
-v表示可视化
-f后面跟文件名(-f filename,表示压缩后的文件名为filename)注意:如果多个参数组合的情况下,-f要写在最后面。
-t表示查看tar包里的文件
--exclude filename 表示在打包或压缩时,不要将某个文件不包含在里面。
打包或者解包,源文件都存在。
打包后产生的文件与打包前的文件在同一目录下。

特别注意,在参数的下达中, c/x/t/r/u 仅能存在一个!不可同时存在!因为不可能同时压缩与解压缩。

-c:建立一个压缩文件的参数指令(create 的意思);    
-x:解开一个压缩文件的参数指令!    
-t:查看 tarfile 里面的文件!    
-r:向压缩归档文件末尾追加文件    
-u:更新原压缩包中的文件  

(这五个参数是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用,但一次只能用其中一个)

示例

  • 打包一个目录 tar -cvf
[root@linux7-128 hgz]# ls
123  123.zip  1.txt  1.txt.zip  2.txt  3.txt  4.txt  new3.txt  test
[root@linux7-128 hgz]# tar -cvf 123.tar 123/
123/
123/1.txt
123/2.txt
[root@linux7-128 hgz]# ls
123  123.tar  123.zip  1.txt  1.txt.zip  2.txt  3.txt  4.txt  new3.txt  test
[root@linux7-128 hgz]# du -sh 123.tar 
9.0M    123.tar
[root@linux7-128 hgz]# du -sh 123
9.0M    123

使用-cvf 表示创建、可视化、指定目录名字
通过查看大小可以发小,tar并不一定会改变目录大小
再一次打包,不使用可视化

[root@linux7-128 hgz]# tar -cf 123.tar 123/
[root@linux7-128 hgz]# ls
123  123.tar  123.zip  1.txt  1.txt.zip  2.txt  3.txt  4.txt  new3.txt  test

看到它不会有任何提示,直接覆盖原有的123.tar
tar不仅可以打包目录,也可以打包文件,还可以打包目录加文件

[root@linux7-128 hgz]# ls
123  123.tar  123.zip  1.txt  1.txt.zip  2.txt  3.txt  4.txt  new3.txt  test
[root@linux7-128 hgz]# tar -cvf 123.tar 123 1.txt 2.txt
123/
123/1.txt
123/2.txt
1.txt
2.txt
[root@linux7-128 hgz]# ls
123  123.tar  123.zip  1.txt  1.txt.zip  2.txt  3.txt  4.txt  new3.txt  test
  • 解压包 tar -xvf
[root@linux7-128 hgz]# tar -xvf 123.tar 
123/
123/1.txt
123/2.txt

解压时也会直接覆盖原先的目录或者文件

  • 查看包里的目录 tar -tf
[root@linux7-128 hgz]# tar -tf 123.tar 
123/
123/1.txt
123/2.txt
1.txt
2.txt
  • 过滤指定文件 –exclude

首先将123/目录下在增加些内容,增加完内容如下

[root@linux7-128 hgz]# tree 123/
123/
├── 1
│   ├── 3.txt
│   └── 4.txt
├── 1.txt
└── 2.txt

1 directory, 4 files

然后打包时过滤掉3.txt

[root@linux7-128 hgz]# tar -cvf 123.tar --exclude 3.txt 123/
123/
123/1.txt
123/2.txt
123/1/
123/1/4.txt

或者过滤掉所有的.txt文件

[root@linux7-128 hgz]# tar -cvf 123.tar --exclude "*.txt" 123/ 3.txt 4.txt
123/
123/1/

打包并压缩

打包的时候同时用gzip压缩tar -czvf

[root@linux7-128 hgz]# tar -czvf 123.tar.gz 123 3.txt 4.txt
123/
123/1.txt
123/2.txt
123/1/
123/1/3.txt
123/1/4.txt
3.txt
4.txt
[root@linux7-128 hgz]# ls
123  123.tar  123.tar.gz  123.zip  1.txt  1.txt.zip  2.txt  3.txt  4.txt  new3.txt  test
[root@linux7-128 hgz]# du -sh 123.tar.gz 
7.1M    123.tar.gz
[root@linux7-128 hgz]# du -sh  123 3.txt 4.txt
18M 123
4.5M    3.txt
4.5M    4.txt

解压 tar -zxvf

[root@linux7-128 hgz]# tar -zxvf 123.tar.gz
123/
123/1/
123/1/3.txt
123/1/4.txt
123/1.txt
123/2.txt
3.txt
4.txt

打包的时候同时用bzip2压缩 tar -cjvf

[root@linux7-128 hgz]# tar -cjvf 123.tar.bz2 123 3.txt 4.txt
123/
123/1.txt
123/2.txt
123/1/
123/1/3.txt
123/1/4.txt
3.txt
4.txt
[root@linux7-128 hgz]# ls
123  123.tar  123.tar.bz2  123.tar.gz  123.zip  1.txt  1.txt.zip  2.txt  3.txt  4.txt  new3.txt  test
[root@linux7-128 hgz]# du -sh 123.tar.bz2 
5.2M    123.tar.bz2

压缩后大小为5.2M,比使用gzip压缩的7.1M要小。
解压 tar -jxvf

[root@linux7-128 hgz]# tar -jxvf 123.tar.bz2 
123/
123/1.txt
123/2.txt
123/1/
123/1/3.txt
123/1/4.txt
3.txt
4.txt

打包的时候同时用xz压缩 tar -cJvf

[root@linux7-128 hgz]# tar -cJvf 123.tar.xz 123 3.txt 4.txt
123/
123/1.txt
123/2.txt
123/1/
123/1/3.txt
123/1/4.txt
3.txt
4.txt
[root@linux7-128 hgz]# du -sh 123.tar.xz 
152K    123.tar.xz

压缩后大小仅为152K,比使用gzip和bzip2的压缩度高很多。

解压 tar -Jxvf

[root@linux7-128 hgz]# tar -Jxvf 123.tar.xz 
123/
123/1.txt
123/2.txt
123/1/
123/1/3.txt
123/1/4.txt
3.txt
4.txt
  • 使用tar -tf 查看
[root@linux7-128 hgz]# tar -tf 123.tar.gz
123/
123/1.txt
123/2.txt
123/1/
123/1/3.txt
123/1/4.txt
3.txt
4.txt
[root@linux7-128 hgz]# tar -tf 123.tar.bz2 
123/
123/1.txt
123/2.txt
123/1/
123/1/3.txt
123/1/4.txt
3.txt
4.txt
[root@linux7-128 hgz]# tar -tf 123.tar.xz 
123/
123/1.txt
123/2.txt
123/1/
123/1/3.txt
123/1/4.txt
3.txt
4.txt

拓展知识

  1. 使用tar打包通过网络拷贝数据,将本机 文件传输到另一个主机上
    tar cvf - test| ssh 10.0.1.11 "cd /copy1/; tar xvf -"
    /首先将要拷贝的目录打包,”-” 代表标准输出,然后再ssh 到目标主机 ,运行相应的命令。其中tar xvf - 意思是,将前面的标准输出内容作为解包的对象。

总结:其实就是想拷贝的目录先打包,然后将打包好的文件拷贝到目标主机,最后在目标主机上解包。只不过,我们用一条命令实现了边打包边解包的过程。

将本机的123文件拷贝到192.168.220.129上/tmp/htr下
本机

[root@linux7-128 hgz]# tar cvf - 123 | ssh 192.168.220.129 "cd /tmp/htr/; tar vxf -"
123/
123/1/
123/1/3.txt
123/
123/1/
123/1/3.txt
123/1/4.txt
123/1/4.txt
123/1.txt
123/1.txt
123/2.txt
123/2.txt

目标主机

[root@linux7-129 htr]# ls
[root@linux7-129 htr]# ls
123

一定要注意目标主机路径填写正确,否则会失败

[root@linux7-128 hgz]# tar cvf - 123 | ssh 192.168.220.129 "cd /tmp/htar/; tar vxf -"
123/
123/1/
123/1/3.txt
bash:0:cd: /tmp/htar/: 没有那个文件或目录
123/
123/1/
123/1/3.txt
123/1/4.txt
123/1/4.txt
123/1.txt
123/1.txt
123/2.txt
123/2.txt
  1. 解压到指定的目录 -C
[root@linux7-128 hgz]# tar -zxvf 123.tar.gz -C /tmp/
123/
123/1/
123/1/3.txt
123/1/4.txt
123/1.txt
123/2.txt
3.txt
4.txt
[root@linux7-128 hgz]# ls /tmp/
123              huhu.txt
  1. 大于4G的zip文件的解压

解决办法如下:
wget -c http://packages.sw.be/p7zip/p7zip-9.13-1.el5.rf.i386.rpm
wget -c http://packages.sw.be/p7zip/p7zip-plugins-9.13-1.el5.rf.i386.rpm
下载完后安装:
rpm -ivh p7zip-9.13-1.el5.rf.i386.rpm
rpm -ivh p7zip-plugins-9.13-1.el5.rf.i386.rpm

解压命令:
7z x 123.zip

猜你喜欢

转载自blog.csdn.net/u013946328/article/details/80486004
今日推荐