压缩打包
常见的压缩文件:
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平台,最后修改时间是2018年4月16日星期一
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
拓展知识
- 使用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
- 解压到指定的目录 -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
- 大于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