程序员 google Ubuntu Firefox 开源 java Android 微软 Windows wordpress nginx 编程 Python shell apache centos 云计算 mysql php linux

Linux基礎知識之壓縮命令

在現代計算機體系中,任何操作都是建立在對數據的處理上,所以存儲是一個十分重要的組成部分。但是不管技術發展成什麽樣,存儲總是會有上限,尤其是對於我們這些普通用戶來說,我們是不可能在每一次缺少存儲空間的時候就進行擴容。

   隨著計算機系統的發展,人們開發出了壓縮這個東西。那麽壓縮是什麽呢?簡單來說,就是對一些有規律的數據進行規律化處理,來使其占用的空間變少。比如有一個文本文件,其內部內容是十個字母“a”,十個字母“b”,十個字母“c”,然後又是十個字母“a”...,就這樣重復了100遍,那麽此時的文本文件的長度就是“(10+10+10)*100=3000”個字符,此時,如果我們使用最簡單的壓縮算法,使用一個變量“x”來代替10個“a”,使用變量“y”來代替10個“b”,使用變量“z”來代替10個“c”,在寫入文本的時候就可以這麽寫:先寫x、y、z分別代表的含義,然後再重復x、y、z這三個變量100遍,此時就能夠生成一個大小為“10+10+10+3*100=330”個字符的文件,當然這個大小是一個近似值。此時我們可以看到相對於原先的“3000”個字符,現在的“330”個字符縮小了近10倍。這就叫壓縮過程,產生的文件叫做壓縮文件,原先的文件叫做源文件,源文件和壓縮文件的大小的比值叫做壓縮比。

   在這裏我舉的例子只是一個最簡單的壓縮過程,而且這個情況也很少出現,但是不管什麽文件都能夠找出類似的這種規律,所以相對來說純文本文件的壓縮比較大,而像視頻和圖像這種規律很難找的文件壓縮比較小。要實現對文件的壓縮,僅僅靠知道原理是遠遠不夠的,所以這就需要用到別人已經寫好的算法來實現壓縮這個功能。在Linux系統中幾種能夠實現壓縮功能的工具如下所示:

壓縮工具:compress,相對的解壓縮工具:uncompress,壓縮後產生的文件的擴展名後綴:.Z

壓縮工具:gzip,相對的解壓縮工具:gunzip,壓縮後產生的文件的擴展名後綴:.gz

壓縮工具:bzip2,相對的解壓縮工具:bunzip2,壓縮後產生的文件的擴展名後綴:.bz2

壓縮工具:xz,相對的解壓縮工具:unxz,壓縮後產生的文件的擴展名後綴:.xz

壓縮工具:zip,相對的解壓縮工具:unzip,壓縮後產生的文件的擴展名後綴:.zip

其中壓縮工具:xz是目前壓縮比最高的工具

下面對以上提到的壓縮工具進行詳細的講解:

 在往下看之前,我們可以通過“dd”命令來創建一個大小為“30M”的文本文件

1

2

3

4

5

6

7

8

[root@localhost gzip]# dd if=/dev/zero of=test bs=30M count=1

记录了1+0 的读入

记录了1+0 的写出

31457280字节(31 MB)已复制,0.0490481 秒,641 MB/秒

[root@localhost gzip]ls -hl

总用量 30M

-rw-r--r--. 1 root root 30M 6月   7 16:45 test

[root@localhost gzip]#

 

然后使用cp命令做出三个相同内容,不同名称的文件:

1

2

3

4

5

6

[root@localhost 20170607yasuo]# ls -hl

总用量 90M

-rw-r--r--. 1 root root 30M 6月   7 16:52 testbzip

-rw-r--r--. 1 root root 30M 6月   7 16:51 testgzip

-rw-r--r--. 1 root root 30M 6月   7 16:52 testxz

[root@localhost 20170607yasuo]#

 

 

 有了這三個文件,就可以分別使用以下命令進行壓縮(compress是一個相當古老的 unix 檔案壓縮指令,所以這裏不再介紹):

gzip:

gzip, gunzip, zcat - compress or expand files

常用選項:

-d:解壓縮(同gunzip)

-#:以指定的壓縮比進行壓縮,1-9,9為最高級;默認6

-c:將壓縮結果輸出到標準輸出,不會對原文件進行壓縮;

gzip -c /PATH/TO/file > /PATH/TO/COMPRESS_FILE.gz

 

举例:

1

2

3

4

5

6

7

[root@localhost 20170607yasuo]# gzip testgzip 

[root@localhost 20170607yasuo]# ls -hl

总用量 61M

-rw-r--r--. 1 root root 30M 6月   7 16:52 testbzip

-rw-r--r--. 1 root root 30K 6月   7 16:51 testgzip.gz

-rw-r--r--. 1 root root 30M 6月   7 16:52 testxz

[root@localhost 20170607yasuo]#

在這個例子中,我們可以看到原來的“testgzip”文件占用30M的大小,現在只占30K的大小

註意:在進行壓縮的時候,如果不對命令進行特殊的指定,則會刪除源文件,如果想留下源文件則需要使用“-c”選項

 

bzip2:

bzip2, bunzip2 - a block-sorting file compressor, v1.0.4

  bzcat - decompresses files to stdout

  常用選項:

   -d:解壓縮(同bunzip2)

   -#:指定壓縮比進行壓縮,1-9,默認為6

   -k:保留原文件不刪除,創建新的壓縮文件;

 

  举例:

1

2

3

4

5

6

7

[root@localhost 20170607yasuo]# bzip2 testbzip 

[root@localhost 20170607yasuo]# ls -hl

总用量 31M

-rw-r--r--. 1 root root  50 6月   7 16:52 testbzip.bz2

-rw-r--r--. 1 root root 30K 6月   7 16:51 testgzip.gz

-rw-r--r--. 1 root root 30M 6月   7 16:52 testxz

[root@localhost 20170607yasuo]#

 

xz:

xz, unxz, xzcat - Compress or decompress .xz files

常用選項:

-d:解壓縮(同unxz)

   -#:指定壓縮比進行壓縮,1-9,默認為6

   -k:保留原文件不刪除,創建新的壓縮文件;

 

  举例:

1

2

3

4

5

6

7

[root@localhost 20170607yasuo]# xz testxz 

[root@localhost 20170607yasuo]# ls -hl

总用量 44K

-rw-r--r--. 1 root root   50 6月   7 16:52 testbzip.bz2

-rw-r--r--. 1 root root  30K 6月   7 16:51 testgzip.gz

-rw-r--r--. 1 root root 4.7K 6月   7 16:52 testxz.xz

[root@localhost 20170607yasuo]#

 

 

   比較上面的三種壓縮後的文件大小,可以發現“xz”這個命令的壓縮比最大,但是消耗時間也最長,所以在日常使用中,我們要根據自己的需要來選擇適合的壓縮命令

延伸阅读

评论