歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux基礎知識 >> Linux 文件壓縮與歸檔

Linux 文件壓縮與歸檔

日期:2017/3/2 17:13:20   编辑:Linux基礎知識

之前總是將linux 的文件打包壓縮命令混為一體,工作中我也很少的去壓縮和打包文件。應用場景也多是從網上下載一個軟件包,然後使用tar命令解壓一下,基本上沒有遇到什麼阻礙。

回頭看這兩年寫的文章,技術的含量不高,大多數是在進行知識的總結和思考。特別是這半年來,學習的動力雖然沒有減少,但是卻很少寫博客了。書讀了不少,linux的視屏看了不少,以前工作中或者書籍中難以理解的名詞和概念如今也迎刃而解了。學到的知識沒有及時的總結,可能隨著時間就慢慢的遺忘了。今後會及時的將所學的知識進行總結,貼到博客中。


一、壓縮

為什麼要壓縮?
以Apache網頁壓縮的gzip舉例,使用壓縮後,占用的帶寬資源更少,傳輸的速率更快。在磁盤上使用壓縮可以縮減文件的大小,使得同樣大小的磁盤可以儲存更多的信息。

壓縮的原理?
許多文件都是AscII 文本文件,文本文件中許多信息是重復的,比如一篇文章中多次出現apple 和banana 。那麼就可以使用0 代表apple,1代表banana。解壓的時候再替換過來,這樣子文件的大小能夠大大的縮減。壓縮有許多種算法,每種算法也可以指定壓縮比。壓縮比越高,壓縮時間越長,響應的解壓時間也要越長。因此不是說壓縮比越高越好。
linux 中常用的壓縮命令有,gzip、bzip2, xz。

壓縮命令

1.gzip
gzip 壓縮之後會刪除源文件,壓縮後的文件名後綴為.gz
gzip test.txt 壓縮文件
gzip -d test.txt 解壓文件
其中-d選項的意思是decompress(解壓)的意思。
2、bzip2
bzip2 壓縮之後的格式為bz2
bzip2 test.txt
bzip2 -kd test.txt
3、xz
xz 壓縮之後的格式為.xz
xz test.txt
xz -kd test.txt
4、zip 與unzip
zip test.txt.zip ./test.txt
unzip test.txt.zip

這些壓縮命令都有其他的選項,可以使用man 命令 來查看。這些命令同時也具有另外與之匹配的解壓命令,但為了簡化記憶,統一使用 command -d 來解壓文件,使用-k 可以保留源文件。

二、歸檔

什麼是tar ,man tar 之後很容易看到這個命令的縮寫由來。GNU ’tar‘ saves many files togerther into a single tape or disk archive, and can restore indeividual files from the archive.
tar 是tape 和 archive 的縮寫。tape 是膠帶捆綁。archive是歸檔。也就是說tar命令並不進行文檔的壓縮。那麼我們平時所使用的 tar 命令為什麼能夠實現壓縮和打包的功能呢?

tar 如何實現文件的壓縮功能?

tar 命令在工作的時候會調用之前提到的壓縮命令,當歸檔的時候可以指定使用某種壓縮算法,也可以不壓縮只打包。比如壓縮的時候,使用z 表示使用gzip壓縮,使用j 表示使用bzip2 壓縮。

tar 命令用法:

tar 
-c //create 創建歸檔文件
-f //file 操作的歸檔文件
-x //extrate 展開歸檔
打包文件與展開歸檔
tar -cf test.tar ./test1.txt ./test2.txt ./test3.txt //歸檔文件
tar -xf test.tar //展開歸檔
使用gzip 壓縮與解壓
tar -zcf test.tar.gz ./test1.txt ./test2.txt ./test3.txt
tar -zxf test.tar.gz
使用bzip2 壓縮與解壓
tar -jcf test.tar.gz ./test1.txt ./test2.txt ./test3.txt
tar -jxf test.tar.gz
使用xz壓縮與解壓
tar -Jcf test.tar.gz ./test1.txt ./test2.txt ./test3.txt
tar -Jxf test.tar.gz

Help Me 這麼多解壓命令怎麼記得住?

壓縮算法縮寫:
z -------> gzip
j -------> bzip2
J -------> xz

查看歸檔中的文件列表

tar -tf  test.tar.gz //查看壓縮文檔中文檔列表,而不必解壓。

三、實測壓縮效果

[root@roverliang test]# du -h
7.7M ./profiled/bin
7.8M ./profiled
7.8M .

//壓縮過後的文件大小。
[root@roverliang test]# ll -Ah
total 8.6M
-rw-r--r-- 1 root root 3.0M Nov 3 15:58 file.tar.bz2
-rw-r--r-- 1 root root 3.4M Nov 3 15:56 file.tar.gz
-rw-r--r-- 1 root root 2.3M Nov 3 15:58 file.tar.xz
drwxr-xr-x 3 root root 4.0K Nov 3 15:44 profiled

壓縮之前文件夾大小是7.8M ,壓縮後最小的僅有2.3M,最大的也僅僅是3.4M.
我們可以看下linux kernel 的官網,看下內核使用的是那種壓縮格式。

可以看到,linux 的內核也是使用了xz 的格式。

四、其他內容

還有一些選項,我認為是沒有必要的比如壓縮或者解壓的使用-v選項,除了滿屏幕飄過亂碼外,我覺得並沒有什麼作用。這些命令與linux的哲學思想不符合,linux的哲學思想是盡量減少與用戶的交互,這本質上也反映了李納斯的內斂性格。

文章中如果有不正確的地方,歡迎在評論區討論,共同學習一起提高。

Copyright © Linux教程網 All Rights Reserved