文件壓縮
計算機使用byte單位來計量。實際上,計算機最小的計量單位是bit。1byte = 8 bit。如果記錄1這個數字,00000001,1會在最右邊占一個1個bit
其他7個bit會被填上0。其實在這個例子中那7個bit是“空的”。為了要滿足目前我們的操作系統數據的訪問,會將該數據轉為byte形態記錄了。而一些
聰明的設計師就利用一些復雜的計算方式,將這些沒有使用到的空間“丟”出來,讓文件占用的空間變小。這就是壓縮的技術。
另外一種壓縮技術也很有趣,它是將重復的數據進行統計記錄的,比如,如果你的數據為“111……”,共有100個1時,那么壓縮技術會記錄為“100個1”
而不是真的有100個1存在。這樣也能夠精簡文件記錄的內容。
簡單地說,你可以將它想象成,文件里面有相當多的“空間”存在,並不是完全填滿的,而“壓縮”的技術就是將這些“空間”填滿,讓整個文件占用量下降。
這些壓縮過的文件無法直接被操作系統所使用,因此,若要使用這些被壓縮過的文件數據,必須將它“還原”成未壓縮前的樣子,這就是所謂的“解壓縮0”。
壓縮前與壓縮后的文件所占用的磁盤空間大小,就被稱為“壓縮比”。
在Linux環境中,壓縮文件的擴展名大多是*.tar,*.tar.gz,*.tgz,*.gz,*.Z,*.bz2,為什么會有這樣的擴展名,不是說Linux的擴展名沒有什么作用嗎?
這是因為Linux的壓縮命令非常多,且不同的命令所用的壓縮技術並不相同,當然彼此之間可能就無法相互壓縮/解壓縮文件。所以,當你下載到某個壓縮文件
時,自然就要知道該文件是由哪種壓縮命令所制作出來了。
gzip,zcat
gzip是應用最廣泛的要命令了,gzip可以解開compress、zip與gzip等軟件所壓縮的文件。gzip新建的壓縮文件為*.gz的文件名。
當使用gzip壓縮時,默認狀態下原本的文件會被壓縮稱為.gz的文件名,原文件就不存在了。
gzip的壓縮已經優化過了,雖然gzip提供1~9的壓縮等級,不過使用默認的6就非常好用了。cat可以讀取純文本文件,那個zcat可以讀取純文本文件被壓縮
后的壓縮文件。
bzip2,bzcat
bzip2是為了取代gzip並提供更加的壓縮比而來的。bzip2是很不錯的東西,竟然比gzip還要好。
使用gzip擴展名自動創建為.gz。bzip2擴展名為.bz2。如果想要讀取壓縮文件的內容呢?是否一定要解壓縮?當然不需要。使用bzcat這個命令
來讀取內容即可。當你要解開一個壓縮文件時,這個文件的名稱為.bz,.bz2,.tbz,tbz2等,那么就可以嘗試使用bzip2來解壓縮。
打包命令
雖然gzip、bzip2也能夠針對目錄進行壓縮,不過這兩個命令對目錄的壓縮指的是將目錄內所有文件“分別”進行壓縮的操作。這種將多個文件或目錄包成一個大文件的命令
功能,我們可以稱呼它是一種“打包命令”。tar可以將多個目錄或文件打包成一個太大文件,同時還可以通過gzip/bzip2的支持,該文件同時進行壓縮。
tar
最簡單使用tar就只要記憶如下的內容即可:
- 壓縮: tar -jcv -f filename.tar.bz2要被壓縮的文件或目錄名稱
- 查詢: tar -jtv -f filename.tar.bz2
- 解壓縮: tar -jxv -f filename.tar.bz2 -C 預解壓縮的目錄
filename.tar.bz2是我們自己取的文件名,tar不會主動產生創建的文件名,要自定義。所以擴展名就很重要了,如果不加[-j]|[-z],文件名最好為.tar即可
如果是-j參數,代表有bzip2的支持,因此文件名最好取為*.tar.bz2,因為bzip2會產生bz2的擴展名。至於如果是加上了-z的gzip的支持,那文件名最好
取為*.tar.gz。
使用tar加入-j或者-z的參數備份/etc/目錄
我們知道bzip2也即-j這個參數來制作備份時,能夠得到比較好的壓縮比。"-p"這個參數的原因是為了保存原文件的權限與屬性。
查閱tar文件的數據內容(可查看文件名)
查看文件名:
加上-v這個參數時,詳細的文件權限/屬性都會被列出來。如果只是想知道文件名唯一,就將-v去掉。從上面的數據我們可以
發現一件很有趣的事情,那就是每個文件名都沒有了根目錄了。那為什么要刪掉目錄呢?主要是為了安全,我們使用tar備份的數據
可能會需要解壓縮回來使用,在tar所記錄的文件就是解壓縮后的實際文件名。如果去掉根目錄,假設你將備份數據在/tmp中解開,那
么解壓縮的文件名變成“/tmp/etc/xxx”。但如果沒有去掉根沐,解壓縮后的文件名就會是絕對路徑,即解壓縮后的數據一定會被放置到
/etc/xxx去。如此一來,你的原來的/etc/下面的數據就會被備份數據所覆蓋掉了。
如果你確定是需要保留根目錄到tar文件中(備份),那么可以使用-P(大寫這個參數)
將數據解壓縮
在當前目錄下進行解壓縮的操作:
指定解壓的目錄:
進解開單一文件:
打包目錄,但不包含該目錄下的某些文件
假設想打包/etc/和/root這幾個重要的目錄,但不想要打包/root/etc*開頭的文件,假設這個新的打包文件為/root/system.tar.bz2,
如果想要兩行輸入時,最后面加上反斜杠(\)並立刻按下[Enter],就能夠到第二行繼續輸入了。
僅備份比某個時刻還要新的文件
某些情況下想要備份新的文件,不想備份舊文件。此時--newer-mtime這個參數就很重要。其實這是兩個參數“--newer”表示后續
日期包含“mtime”與“ctime”,而"--newer-mtime"僅是mtime而已。
基本名稱
tar打包出來的文件有沒有進行壓縮得到的文件稱為不同。如果僅是打包而已,就是“tar -cv -f file.tar” 這個文件我們稱呼為tarfile。如果還進壓縮的支持
例如 “tar -jcv -f file.tar.bz2”時,我們稱呼為tarball。這只是一個基本稱呼。tar除了可以將數據打包成文件職位,還能夠將文件打包到特別的設備。