gzip(1) 是GNU的壓縮程序。它只對單個文件進行壓縮。基本用法以下:
$ gzip filename
程序執行之後,文件名會變成filename.gz,並且通常狀況下大小會比原文件要小。注意,程序並不新建一個新的文件filename.gz, 而是將filename變成filename.gz。通常來講,文本文件壓縮率會比較高。而那些jpeg圖像,mp3等相似文件的壓縮率就沒有那麼好了,由於它們原本就已經被壓縮過了的。這個基本用法考慮了壓縮時間和壓縮後文件尺寸的平衡問題(譯者注:若是要使壓縮後的文件更小,就須要用到更多的時間)。要獲得最小文件大小(最大壓縮),可使用以下用法:
$ gzip -9 filename
這樣就能夠獲得gzip可以壓縮的最小文件尺寸,可是須要更長的壓縮時間。上面的數字越小,壓縮就越快,相反壓縮率也就越小。
將gzip壓縮的文件解壓縮,有兩個命令可使用,但實際上它們是同一個程序。只要壓縮文件的後綴名被gzip程序認到,它就能夠解壓縮。後綴名能夠是:.gz, -gz, .z, -z, .Z 和 –Z。可使用的第一個命令是:
$ gunzip filename.gz
使用上面的命令後,filename.gz會被解壓縮並去掉後綴名.gz變成filename。gunzip 其實是gzip程序的一部分,它跟gzip –d 這個命令有等同效果。可是咱們使用的時候,常用gunzip, 由於這個用法彷佛更酷些。: ^ )算法
15.2 bzip2
bzip2(1)是 Slackware Linux裏面壓縮程序的另外一個選擇。它的壓縮算法不一樣於gzip。與gzip 相比有其優勢,也有一些缺點。bzip2的主要優勢在於它壓縮後文件的尺寸,對於相同文件,bzip2 壓縮後的尺寸幾乎老是小於gzip的壓縮結果。有些時候,這個差距會至關大。這個優勢對於使用小貓下載文件的用戶來講表現得尤其突出。須要提醒的是,當在一些公共ftp 服務器上下載文件時,在.gz和.bz2文件中儘可能選擇.bz2文件是一種基本的網絡禮節,由於這樣能夠減小服務器的負擔以給更多人服務。
bzip2的缺點在於,它佔用的CPU的使用率會比gzip更多。這就是說,壓縮同一個文件,bzip2要比gzip使用更長的時間,佔用更多的CPU資源。因此,當你在二者之中考慮選用哪一種壓縮程序的時候,須要衡量的是速度和壓縮後的文件尺寸哪一個對你來講更重要些。服務器
bzip2的使用方法和gzip是同樣的,因此咱們再也不花時間討論了。像gunzip同樣,bunzip2的效果等同於bzip2 –d。與gzip最大的不一樣是bzip2使用後綴名.bz2.
$ bzip2 filename
$ bunzip2 filename.bz2
$ gunzip -9 filename網絡
15.3 tar
tar(1)是一個GNU的磁帶歸檔程序。它能夠將幾個文件或者目錄打包壓縮成一個文件。這個特色讓咱們能夠壓縮整個目錄樹,而單使用gzip和 bzip2是沒法作到的。tar有不少命令行參數,你能夠在手冊頁找到它們。在這一節裏,咱們只是討論一下那些常常用到的tar的用法。工具
tar 最經常使用的用法是將咱們從網站或者ftp上下載的文件解壓縮而後在解包。a.tar.gz是咱們常常看到的文件名格式,這就是咱們一般說的 "tarball",它是先把一些文件用tar打包,而後在用gzip壓縮。你也有可能會看到名爲a.tar.Z的文件,這也是一樣的作法,可是你通常只會在比較老的Unix 系統裏面遇到。
另外,你也會在另一些地方看到如a.tar.bz2這樣文件。Kernel源文件就是用這種格式發佈的,爲的是可讓文件更小,便於下載。你可能已經猜到,它就是先將一些文件用tar打包,而後再用bzip2壓縮。網站
咱們能夠將上述格式的文件用tar加一些命令行參數進行解包。-z參數表示在首先運行gunzip將文件解壓縮。將一個tarball解包的最經常使用的用法是:
$ tar -xvzf filename.tar.gz
這裏有很多的參數,那麼它們各自有什麼意思呢?
-x表示提取文件。這是一個很是重要的參數,由於它告訴tar對輸入的文件具體怎麼處理。在這裏,咱們要將打包的文件分離還原成打包前的狀態。
-v表示詳述。加入這個參數讓程序將解包出來的每個文件列出來。若是以爲列出來太煩了,你徹底能夠把這個參數去掉來關閉這個功能。相反,若是你須要每一個解包文件更詳細的信息,則可使用-vv參數。
-z是告訴tar先運行gunzip將文件解壓縮。
-f是告訴tar在命令行輸入的下一個串字符是須要處理的文件。加密
上面這個命令也能夠用一些其餘形式的寫法。在比較老的系統裏面因爲缺乏新版本的GNU tar程序,你可能會看到它是寫成這樣的:
$ gunzip filename.tar.gz | tar -xvf -
這行命令先把文件解壓縮,而後把解壓的文件對輸出到tar程序。gzip能夠把其處理完的數據輸到標準輸出。這裏就是把gzip解壓縮的文件做爲標準輸出,而後由管道把文件送到tar程序進行解包。最後的 "-"表示處理標準輸入。它將解包後的文件寫入磁盤。spa
還有一種寫法是將第一種命令格式的短劃線去掉,像這樣:
$ tar xvzf filename.tar.gz操作系統
你也可能會碰到bzip2壓縮的打包文件。在Slackware Linux所帶的tar程序版本能夠像gzip壓縮的打包文件同樣,只是要把參數-z用-j代替:
$ tar -xvjf filename.tar.bz2命令行
這裏須要注意的是,tar會把解包的文件放到當前目錄。因此若是要把一個放在/tmp目錄文件解壓縮到你的家目錄的話,這裏有一些作法可供選擇:
選擇一,把文件拷貝到家目錄,而後解包
選擇二,指定須要解包文件的路徑
選擇三,用-C 參數指定解包後存放文件的路徑rest
$ cd $HOME
$ cp /tmp/filename.tar.gz
$ tar -xvzf filename.tar.gz
$ cd $HOME
$ tar -xvzf /tmp/finename.tar.gz
$ cd /
$ tar -xvzf /tmp/filename.tar.gz -C $HOME
上面全部的命令都是等效的。每一種作法都是把文件解包到你的家目錄,源文件則留在原來的地方。
上面講了那麼多用tar解包的命令,如今讓咱們來看看tar是如何來打包的吧。
在大多數狀況下,只須要用參數"-c"代替參數"-x"就能夠了:
$ tar -cvzf filename.tar.gz .
在這行命令裏面,參數-c是告訴tar來創建一個打包文件;而參數-z是將打包的文件經過gzip程序進行壓縮。filename.tar.gz 是你將要創建的文件名。(譯者添加:命令行最後的"."是告訴tar將當前目錄下的全部文件/文件夾打包)
參數"-f"不是必需的,可是一般來講加上會是一個好主意。若是不加,tar會將數據寫到標準輸出,這就須要管道將tar輸出到另一個程序,像這樣:
$ tar -cv filename.tar . | gpg --encrypt
這行命令把當前目錄下的全部文件打包創建一個沒有被壓縮的tar歸檔文件,經過管道輸出到gpg程序進行加密,讓不知道密鑰的人沒法讀到文件內容。
15.4 zip
最後,討論一下處理zip文件的兩個程序。zip文件在Windows世界裏面是極爲經常使用的,因此Linux也有相應的程序來處理它們。zip文件的壓縮程序叫作zip(1),解壓縮程序叫作unzip(1).
$ zip foo *
這行命令會創建一個包涵當前目錄全部文件的的zip文件 foo.zip。zip會自動將
.zip後綴名加上,因此咱們不須要在命令中加上。你也能夠加上一個參數-r使zip將當前目錄下的全部文件夾目錄也加在zip文件中:
$ zip -r foo *
解壓縮文件很簡單,像這樣:
$ unzip foo.zip
這樣會解壓縮foo.zip裏面的全部文件和文件夾
zip程序還有一些高級應用參數,包括創建自解壓包,壓縮是保留源文件,調節壓縮文件的尺寸等等,在這裏就不一一贅述了。若是想了解更多,請查看手冊頁。
dump
一、dump是Linux系統提供的備份和恢復工具,各類版本都提供(不提供日誌文件)。
二、dump 執行文件系統增量備份的存儲操做,能夠備份到磁帶、磁盤或一個磁盤文件。
指定文件備份
整個文件系統備份或增量備份
一個肯定日期後改變的文件備份
上次備份後改變的文件備份
三、命令格式:
dump level unbdsf blkg-factor density size device-name file_system
level:備份級別,0~9
b::因子
u:更新dumpdates文件(/etc/dumpdates)
n:當dump完成時通知操做系統成員組的成員
d和s:備份卷的大小
f:指定的備份設備
w和W:空運行獲得須要備份的文件系統的信息
restore
一、用於檢查dump程序建立的轉儲以恢復新文件或整個文件系統
二、命令格式:
restore [-ctrox] vbsfy blocking-factor file-number device-name
c:所有恢復
t:用於顯示卷的內容表
r:指明卷的整個內容應該被恢復到當前工做目錄
o:覆蓋原來的文件
x:提取恢復的文件名和路徑名
i:容許交互式恢復
dump和restore的缺點
一、運行dump時,文件系統必須是不活躍的。
二、dump有時不能處理打開的文件和其餘問題。
cpio
一、經過拷貝的方式實現文件或文件系統的備份與恢復
cpio –o 建立一個備份
cpio –i 從備份中恢復
cpio –p 把一個文件從一個文件系統拷貝到另外一個文件系統
cpio恢復
一、操做
全恢復、部分恢復
恢復到當前目錄仍是文件系統
用模式匹配進行恢復
交互式恢復
讀取文件內容表
tar
一、備份:tar cvfb [pattern]
二、恢復:tar mopxvf device pattern
dd
一、將文件或原始數據以拷貝方式進行備份。
二、經過管道,實現數據流操做,在傳輸中把拷貝內容從一種格式轉化爲另外一種格式。
三、藉助管道能完成標準輸入到標準輸入,實現數據流從一個命令到另外一個命令,從一個系統到另外一個系統。
tar、cpio、dd
tar、cpio與dump的區別
一、dump在每一個卷的開頭位置寫入一個內容表,用restore恢復時,該索引會被讀取,在該索引表上能夠運行cd、ls命令查看、選擇要恢復的文件。
二、dump支持遠程設備的備份,cpio不支持。
三、tar和cpio能夠經過文件系統來訪問文件而與文件系統無關。