Linux文件壓縮

壓縮與解壓

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

前面提到的gzipxz只能對(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.gzetc.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)圖

Linux文件壓縮打包.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容