壓縮文件的用途與技術
由于 1 byte = 8 bits
,所以每個byte
當中會有8
個空格,而每個空格可以是0,1
。
其實文件里面有相當多的『空間』存在,并不是完全填滿的,而『壓縮』的技術就是將這些『空間』填滿,以讓整個文件占用的容量下降。
『壓縮過的文件]并無法直接被操作系統所使用的,因此,若要使用這些被壓縮過的文件數據,則必須解壓縮』將他『還原』回來未壓縮前的模樣。
壓縮比等于壓縮后與壓縮的文件所占用的磁盤空間大小的比值。
Linux 系統常見的壓縮指令
常見的幾個壓縮拓展名:
gzip,zcat/zmore/zless/zgrep
gzip 可以解開:compress,zip 與 gzip 等軟件所壓縮的文件。gzip 所建立的壓縮文件為 *.gz。
gzip [-cdtc#] 檔名
可以使用 zcat 讀取壓縮文件
zcat 檔名
cat/more/less
可以使用不同的方式來讀取純文本檔;
zcat/zmore/zless
則可以對應于 cat/more/less
的方式來讀取純文本檔被壓縮后的壓縮文件;
由于 gzip這個壓縮指令主要想要用來取代compress 的,所以不但 compress 的壓縮文件案可以使用gzip 來解開,同時 zcat這個指令可以同時讀取compress 與gzip 的壓縮文件。
egrep可以用來搜尋關鍵詞:從文字壓縮文件當中找數據
bzip2,bzcat/bzmore/bzless/bzgrep
bzip2 [-cdkzv#] 檔名
bzcat 檔名.bz2
bzip2 壓縮時間比 gzip 久,壓縮率高。
xz,xzcat/xzmore/xzless/xzgrep
xz [-dtlkc#] 檔名
xcat 檔名.xz
它可以將 gzip壓縮比的21% 進一步優化到 15%。時間久。。。。
打包指令:tar
打包與壓縮:
tar [-zl-jl-I] [cv] [-f 待建立的新檔名] filename...
查看檔名:
tar [-zl-jl-I] [tv] [-f 已有檔名]
解壓縮:
tar [-zl-jl-I] [xv] [-f 已有檔名] [-C 目錄]
僅解開單一文件:使用 -jtv 找到要的檔名,將該檔名解開
tar -jtv -f /root/etc.tar.bz2|gep '要的文檔名'
## 找到后,解開
tar -jxv -f 壓縮包.tar.baz2 待解開的文檔名
打包某目錄,但不含某些文件:使用 --exclude
tar -jcv -f /root/system.tar.bz2 --exclude=/root/etc*
僅備份比某個時刻新的文件:使用 --newer-mtime
tar -jcv -f /root/etc.newer.then.paswd.tar.bz2 --newer-mtime="2015/06/17" /etc/*
tar 打包出來的文件有沒有進行壓縮所得到文件稱呼不同:
如果僅是打包而已,就是[tar -cv -f file.tar
]而已,這個文件我們稱呼為 tarfile
;
如果還有進行壓縮的支持,例如[tar-jcv -f file.tar.bz2
]時,稱呼為 tarball
。
在 tar 的使用中,有一種方式最特殊,那就是透過標準輸入輸出的數據流重導向(standard input/standard output),以及管線命令(pipe)的方式,將待處理的文件一邊打包一邊解壓縮到目標目錄去。
tar -cvf - /etc | tar -xvf -
#這個動作有點像是cp -r /etc /tmp
#要注意的地方在于輸出檔變成-而輸入檔也變成-,又有一個Ⅰ存在~
#一這分別代表standard output , standard input與管線命令
#簡單的想法中,可以將 – 想成是在內存中的一個裝置(緩沖區)。
XFS 文件系統的備份與還原
xfsdump 除了可以進行文件系統的完整備份外,還可以進行累積備份。
累積備份:在第一次使用xfsdump
進行完整備份后,等過一段時間的文件系統自然運作后,再進行第二次xfsdump
時,就可以選擇累積備份了,此時新備份的數據只會記錄與第一次完整備份所有差異的文件。
第一份備份一定是完整備份,完整備份在 xfsdump 當中被定義為 level 0
。第二次備份時,被定義為 level1
,比較過后,備份有變化的文件。。。
xfsdump 限制:
1.xfsdump 不支援沒有掛載的文件系統備份,所以只能備份已掛載的;
2.xfsdump 必須使用root的權限才能操作(涉及文件系統的關系);
3.xfsdump 只能備份XFS 文件系統;
4.xfsdump 備份下來的數據文件或儲存媒體)只能讓 xfsrestore 解析
5.xfsdump 是透過文件系統的UUID來分辨各個備份檔的,因此不能備份兩個具有相同UUID 的文件系統
xfsdump [-L S_label] [-M M_label] [-1 #] [-f 備份檔] 待備份資料
特別注意,xfsdump 預設僅支持文件系統的備份,并不支持特定目錄的備份
所以不能用 xfsdump去 備份/etc,因為 /etc 從來就不是一個獨立的文件系統。
xfsrestore文件系統還原
xfsrestore -I
xfsrestore [-f 備份檔] [-L S_label] [-s] 待復原目錄
xfsrestore [-f 備份文件] -r 待復原目錄
xfsrestore [-f 備份文件] -i 待復原目錄
光盤寫入工具
文本模式的刻錄行為:
1.先將所需要備份的數據建置成為一個映像檔(iso),利用 mkisofs 指令來處理;
2.將該映像文件刻錄至光盤或 DVD 當中,利用 cdrecord 指令來處理。
mkisofs:建立映像檔
mkisofs [-o 映像檔] [-Jrv] [-V vol] [-m file] 待備份文件... -graft-point isodir=systemdir ...
光盤的格式一般稱為 iso9660
,這種格式一般僅支持舊版的 DOS 檔名,亦即檔名只能以8.3(文件名8個字符,擴展名3個字符)的方式存在。
如果加上 -r
的選項之后,那么文件信息能夠被記錄的比較完整,可包括 UID/GID 與權限等等。
一般預設的情況下,所有要被加到映像檔中的文件都會被放置到映象文件中的根目錄,如此一來可能會造成刻錄后的文件分類不易的情況。所以,可以使用-graft-point
這個選項,當你使用這個選項之后,可以定義位于映像文件中的目錄。
可透過wodim
來寫入CD或DVD 刻錄機
其他常見的壓縮與備份工具
dd
dd
可以讀取磁盤裝置的內容(幾乎是直接讀取扇區"sector"),然后將整個裝置備份成一個文件。
dd if="input_file" of="output_file" bs="block size" count="number"
默認 dd
是一個一個扇區去讀/寫的,而且即使沒有用到的扇區也會倍寫入備份檔中。因此這個文件會變得跟原本的磁盤一模一樣大。
dd 可備份完整的 partition 或 disk ,因為 dd 可讀取磁盤的 sector 表面數據。
cpio
cpio
可以備份任何東西,包括裝置設備文件
cpio -ovcB > [file|device] <=備份
cpio -ivcdu < [file|device] <=還原
cpio -ivct < [file|device] <=察看
cipo 必須要搭配類似 find 指令來讀入欲備份的文件名數據
《鳥哥的Linux私房菜-基礎篇》學習筆記