運維日記013 - Linux下的壓縮工具

運維日記013 - Linux下的壓縮工具

在Windows下很多人已經習慣了用winzip或者winrar進行文件的打包壓縮,而在Linux下打包和壓縮通常是分開進行的。Linux下有專門的打包工具和壓縮工具,壓縮工具通常只能處理一個文件,而如果要處理多個文件通常要先用打包工具打包成一個文件然後再用壓縮工具處理。關於打包工具tar,我們在《運維日記012》中已經探討過了,這裏我們專門說一下Linux下的壓縮工具。

compress

Compress應該是資格很老的壓縮工具了,你看到一些以.Z爲後綴的壓縮文件就是用compress壓縮的。GNU開發的gzip壓縮工具具備更高的壓縮比,同時gzip也能解壓compress壓縮的.Z文件,所以後來compress就被gzip取代了。只有在一些非常古老的UNIX系統上還會使用compress,而目前主流的Linux發行版也許默認都不會安裝這個軟件。對於compress,你只需要知道有它,知道.Z文件是怎麼來的即可。

gzip

gzip應該算是Linux裏應用最廣的壓縮命令,有時候你還會看到gunzip這個命令,其實gunzip就是指向gzip的鏈接。在默認狀態下,gzip壓縮後會刪除原始文件,並生成.gz爲後綴的壓縮文件。如:

$ cp /etc/hostname /tmp
$ gzip /tmp/hostname

這時我們可以看到/tmp/hostname文件不見了,而生成一個hostname.gz的文件。我們還可以用-v參數來顯示一些詳細信息,諸如文件的壓縮比等信息:

$ gzip -v /tmp/hostname 
/tmp/hostname: -11.8% -- replaced with /tmp/hostname.gz

-t參數可以用來檢驗壓縮文件是否有損壞:

$ gzip -tv hostname.gz 
hostname.gz:  OK

我們還可以用-#(#爲1~9之間的數字)來指定壓縮等級。1壓縮速度最快,但壓縮比最差;9最慢,但壓縮比最高。默認壓縮等級爲6。

$ cp /etc/fstab /tmp
$ gzip -9v fstab
fstab:  40.0% -- replaced with fstab.gz

可以用-d參數對.gz文件進行解壓:

$ cd /tmp
$ gzip -d fstab.gz

同樣解壓完成後,壓縮文件會被刪除。我們能不能在壓縮或者解壓的時候,不刪除源文件呢?可以的,使用-c參數。-c參數原本的作用是將處理後的數據輸出到屏幕上,可以結合重定向來實現這一功能:

$ gzip -cv fstab > fstab.gz
fstab:  40.0%

$ ls -l fstab*
-rw-r--r-- 1 sailor-m sailor-m 477  920 10:44 fstab
-rw-r--r-- 1 sailor-m sailor-m 310  920 11:04 fstab.gz

$ gzip -dcv fstab.gz > fstab2
fstab.gz:  40.0%

$ s -l fstab*
-rw-r--r-- 1 sailor-m sailor-m 477  920 10:44 fstab
-rw-r--r-- 1 sailor-m sailor-m 477  920 11:06 fstab2
-rw-r--r-- 1 sailor-m sailor-m 310  920 11:04 fstab.gz

如果是純文本文件壓縮後生成的.gz文件,無需解壓可以之間使用zcat命令查看,如:

$ zcat /tmp/fstab.gz
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/dev/mapper/pdc_baiibafi1 /               ext4    errors=remount-ro 0       1
/dev/mapper/pdc_baiibafi3 /home           ext4    defaults        0       2

bzip2

GNU後來開發了bzip2這個壓縮比更高的壓縮工具。Bzip2的常用用法與gzip基本相同。前面我們介紹的gzip的幾個參數-c-v-d-#的含義和用法與bzip2完全相同。這裏我再介紹個-k參數,表示保留(keep)原文件而不刪除(否則默認情況下跟gzip一樣,bzip2處理完後會刪除原始文件)。如:

$ cp /etc/passwd /tmp
$ cd /tmp
$ bzip2 -kv passwd
 passwd:   2.422:1,  3.303 bits/byte, 58.72% saved, 1979 in, 817 out.

$ ls -lh passwd*
-rw-r--r-- 1 sailor-m sailor-m 2.0K  920 15:43 passwd
-rw-r--r-- 1 sailor-m sailor-m  817  920 15:43 passwd.bz2

當然如同gzip一樣,我們可以使用-c參數和重定向實現同樣目的:

$ bzip2 -cv passwd > passwd2.bz2

這兩種方式的區別在於前一種方式生成的壓縮文件的文件名爲原文件名加上.bz2後綴,而後一種方式可以直接指定你想要的文件名,甚至可以不要.bz2後綴(當然不推薦你這樣做)。這個-k參數在gzip中也是有的,功能和用法一樣。

bzip2命令還有一個-z參數,它跟-d參數對應,用於顯式指定壓縮,默認情況下可缺省。而gzip沒有這個參數。

如果是純文本文件用bzip2壓縮後,可以用bzcat命令直接查看而無需先解壓:

$ bzcat passwd.bz2
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章