壓縮與解壓
gzip
gzip是linux上應(yīng)用最廣泛的壓縮指令,它創(chuàng)建的壓縮文件后綴名為.gz
用法:
gzip [選項(xiàng)] 文件名
常用選項(xiàng):
- -c: 打印壓縮后到內(nèi)容
- -d: 解壓縮
- -v: 顯示出壓縮比等信息
- -數(shù)字: 壓縮等級(jí),-1表示最快但是壓縮比最差,-9表示最慢但是壓縮比最好,默認(rèn)為-6
演示
將 /etc/services 拷貝到當(dāng)前目錄,壓縮并打印壓縮比信息
[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會(huì)直接將原文件壓縮為.gz文件。
若想要將.gz壓縮文件解壓,可以加上-d選項(xiàng):
[yousiku@localhost ~]$ gzip -d services.gz
[yousiku@localhost ~]$ ls
services
而在上一步中我們發(fā)現(xiàn)直接使用gzip指令壓縮文件后原文件不會(huì)保留,若想要在壓縮時(shí)保留原文件可以這樣:
[yousiku@localhost ~]$ gzip -c services > services.gz
[yousiku@localhost ~]$ ls
services services.gz
加-c選項(xiàng)是打印壓縮后的文件內(nèi)容,而>符號(hào)表示將要打印的內(nèi)容重定向到service.gz文件中,因此壓縮后到內(nèi)容就保存在了service.gz中
試試不同的壓縮等級(jí):
[yousiku@localhost ~]$ gzip -1vc services > service1.gz
services: 76.6%
[yousiku@localhost ~]$ gzip -9vc services > service9.gz
services: 79.8%
可以看到使用-9選項(xiàng)的壓縮比更高(壓縮比是指壓縮后減少的文件大小比原文件大小),但是在壓縮速度上要慢些
如果想要不將壓縮文件解壓直接查看文件內(nèi)容,使用cat是不行的,這樣會(huì)得到解壓后的內(nèi)容,顯示為亂碼。這時(shí)我們可以使用zcat命令就可以直接查看壓縮文件原來的內(nèi)容了:
[yousiku@localhost ~]$ zcat service1.gz
xz
xz與gzip相比擁有更高的壓縮比,但是在壓縮速度上會(huì)慢不少。通過xz壓縮的文件名后綴為.xz
用法
xz [選項(xiàng)] 文件名
常用選項(xiàng)
- -d: 解壓縮
- -v: 列出壓縮比信息
- -k: 保留原文件
- -c: 打印壓縮內(nèi)容
- -數(shù)字: 壓縮等級(jí),-1表示最快但是壓縮比最差,-9表示最慢但是壓縮比最好,默認(rèn)為-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指令高不少,但是速度會(huì)慢很多
解壓:
[yousiku@localhost ~]$ xz -d services.xz
打包指令:tar
前面提到的gzip和xz只能對(duì)單一的文件壓縮,但在實(shí)際使用過程中我們常常需要對(duì)整個(gè)目錄打包成一個(gè)大文件一起壓縮,tar指令即可實(shí)現(xiàn)這樣的功能,不僅于此,它還能在打包的同時(shí)將打包文件壓縮成各種格式的壓縮文件,包括.gz與.xz
常用選項(xiàng)
- -c: 創(chuàng)建打包文件
- -t: 查看打包后的文件里有哪些文件名
- -x: 解打包或解壓縮
- -z: 通過
gzip壓縮或解壓縮,此時(shí)建議指定壓縮后文件后綴為.tar.gz - -J: 通過
xz壓縮或解壓縮,此時(shí)建議指定壓縮后文件后綴為.tar.xz - -f: 要打包壓縮生成或解壓解包的文件名
- -C: 在特定的目錄解壓縮
用法
tar [選項(xiàng)] -f [打包或壓縮后到文件名] [要打包的目錄]
演示
將/etc打包到當(dāng)前目錄的etc.tar文件(由于打包/etc需要root權(quán)限,因此先切換到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
此時(shí)生成的etc.tar文件并沒有經(jīng)過壓縮
分別按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由于沒有經(jīng)過壓縮所以最大,而etc.tar.gz和etc.tar.xz經(jīng)過壓縮后體積較etc.tar小很多
直接查看打包文件里面包含的文件名:
[root@localhost ~]# tar -t -f etc.tar.xz
解包出etc目錄到當(dāng)前目錄:
[root@localhost ~]# tar -x -f etc.tar.gz
[root@localhost ~]# ls
anaconda-ks.cfg etc etc.tar etc.tar.gz etc.tar.xz
若想僅僅將打包文件中的其中一個(gè)文件解包出來可以用如下用法:
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文件了
目前我們經(jīng)常要從網(wǎng)上下載的軟件包大都是后綴名為.tar.gz的形式,而如果用gzip解壓的話得到的是.tar文件,這樣就還需要用tar解包;但是使用tar -x命令可以一步到位直接將.tar.gz文件解壓解包出來,可以說tar指令在文件壓縮打包的用途最為廣泛!
思維導(dǎo)圖
