Linux文件压缩

压缩与解压

gzip

gzip是linux上应用最广泛的压缩指令,它创建的压缩文件后缀名为.gz

用法:

gzip [选项] 文件名

常用选项:
  • -c: 打印压缩后到内容
  • -d: 解压缩
  • -v: 显示出压缩比等信息
  • -数字: 压缩等级,-1表示最快但是压缩比最差,-9表示最慢但是压缩比最好,默认为-6
演示

将 /etc/services 拷贝到当前目录,压缩并打印压缩比信息

[yousiku@localhost ~]$ cp /etc/services .
[yousiku@localhost ~]$ ls
services
[yousiku@localhost ~]$ gzip -v services 
services:    79.7% -- replaced with services.gz
[yousiku@localhost ~]$ ls
services.gz

可以看到,使用gzip会直接将原文件压缩为.gz文件。
若想要将.gz压缩文件解压,可以加上-d选项:

[yousiku@localhost ~]$ gzip -d services.gz 
[yousiku@localhost ~]$ ls
services

而在上一步中我们发现直接使用gzip指令压缩文件后原文件不会保留,若想要在压缩时保留原文件可以这样:

[yousiku@localhost ~]$ gzip -c services > services.gz
[yousiku@localhost ~]$ ls
services  services.gz

-c选项是打印压缩后的文件内容,而>符号表示将要打印的内容重定向到service.gz文件中,因此压缩后到内容就保存在了service.gz中

试试不同的压缩等级:

[yousiku@localhost ~]$ gzip -1vc services > service1.gz
services:    76.6%
[yousiku@localhost ~]$ gzip -9vc services > service9.gz
services:    79.8%

可以看到使用-9选项的压缩比更高(压缩比是指压缩后减少的文件大小比原文件大小),但是在压缩速度上要慢些

如果想要不将压缩文件解压直接查看文件内容,使用cat是不行的,这样会得到解压后的内容,显示为乱码。这时我们可以使用zcat命令就可以直接查看压缩文件原来的内容了:

[yousiku@localhost ~]$ zcat service1.gz

xz

xz与gzip相比拥有更高的压缩比,但是在压缩速度上会慢不少。通过xz压缩的文件名后缀为.xz

用法

xz [选项] 文件名

常用选项
  • -d: 解压缩
  • -v: 列出压缩比信息
  • -k: 保留原文件
  • -c: 打印压缩内容
  • -数字: 压缩等级,-1表示最快但是压缩比最差,-9表示最慢但是压缩比最好,默认为-6
演示

直接压缩并打印压缩比信息

[yousiku@localhost ~]$ xz -v services
services (1/1)
  100 %        97.3 KiB / 654.6 KiB = 0.149                                    
[yousiku@localhost ~]$ ls
service1.gz  service9.gz  services.xz 

services 被压缩成了services.xz,并且可以看到通过xz命令压缩文件的压缩比为1-0.149=85.1%,压缩比较gzip指令高不少,但是速度会慢很多

解压:

[yousiku@localhost ~]$ xz -d services.xz 

打包指令:tar

前面提到的gzipxz只能对单一的文件压缩,但在实际使用过程中我们常常需要对整个目录打包成一个大文件一起压缩,tar指令即可实现这样的功能,不仅于此,它还能在打包的同时将打包文件压缩成各种格式的压缩文件,包括.gz.xz

常用选项
  • -c: 创建打包文件
  • -t: 查看打包后的文件里有哪些文件名
  • -x: 解打包或解压缩
  • -z: 通过gzip压缩或解压缩,此时建议指定压缩后文件后缀为.tar.gz
  • -J: 通过xz压缩或解压缩,此时建议指定压缩后文件后缀为.tar.xz
  • -f: 要打包压缩生成或解压解包的文件名
  • -C: 在特定的目录解压缩
用法

tar [选项] -f [打包或压缩后到文件名] [要打包的目录]

演示

/etc打包到当前目录的etc.tar文件(由于打包/etc需要root权限,因此先切换到root账户):

[yousiku@localhost ~]$ su -
密码:
上一次登录:四 11月 29 22:44:31 CST 2018pts/0 上
[root@localhost ~]# tar -c -f ./etc.tar /etc
tar: 从成员名中删除开头的“/”
[root@localhost ~]# ls
anaconda-ks.cfg  etc.tar

此时生成的etc.tar文件并没有经过压缩

分别按gzip方式和xz方式打包压缩:

[root@localhost ~]# tar -zc -f ./etc.tar.gz /etc
tar: 从成员名中删除开头的“/”
[root@localhost ~]# tar -Jc -f ./etc.tar.xz /etc
tar: 从成员名中删除开头的“/”
[root@localhost ~]# ll
总用量 44000
-rw-------. 1 root root     1257 10月 20 07:01 anaconda-ks.cfg
-rw-r--r--. 1 root root 28313600 11月 29 22:50 etc.tar
-rw-r--r--. 1 root root  9787847 11月 29 22:59 etc.tar.gz
-rw-r--r--. 1 root root  6943872 11月 29 22:59 etc.tar.xz

可以看到,生成的文件中etc.tar由于没有经过压缩所以最大,而etc.tar.gzetc.tar.xz经过压缩后体积较etc.tar小很多

直接查看打包文件里面包含的文件名:

[root@localhost ~]# tar -t -f etc.tar.xz

解包出etc目录到当前目录:

[root@localhost ~]# tar -x -f etc.tar.gz
[root@localhost ~]# ls
anaconda-ks.cfg  etc  etc.tar  etc.tar.gz  etc.tar.xz

若想仅仅将打包文件中的其中一个文件解包出来可以用如下用法:
tar -x -f [打包文件] [待解包的文件]
如,将etc.tar.gz中的etc/shadow文件解包出来(这里先将上一步解包出的etc目录删除否则目录冲突):

[root@localhost ~]# rm -rf etc
[root@localhost ~]# tar -x -f etc.tar.gz etc/shadow
[root@localhost ~]# ls
anaconda-ks.cfg  etc  etc.tar  etc.tar.gz  etc.tar.xz
[root@localhost ~]# ls etc
shadow

这样解包出的etc目录下就只有shadow文件了

目前我们经常要从网上下载的软件包大都是后缀名为.tar.gz的形式,而如果用gzip解压的话得到的是.tar文件,这样就还需要用tar解包;但是使用tar -x命令可以一步到位直接将.tar.gz文件解压解包出来,可以说tar指令在文件压缩打包的用途最为广泛!

思维导图

Linux文件压缩打包.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354

推荐阅读更多精彩内容