為什么需要壓縮技術
我們都知道文件是以byte作為單位的,如果我們的文件僅僅在低位占一個1
0000 0001
這種情況我們完全可以壓縮一下,將高位的0全部抹掉即可。
如上所說是一種壓縮技術,還有一種就是將1111(此處省略96個)一共100個1,用類似于"100個1"的方式。
zip/unzip
命令選項
遞歸基礎壓縮
為了方便演示壓縮,我們在tmp下創建一個包含3個文件的zipDir
[root@localhost tmp]# mkdir zipDir
[root@localhost tmp]# cd zipDir
[root@localhost zipDir]# touch file1
[root@localhost zipDir]# touch file2
[root@localhost zipDir]# touch file3
使用最高級別9,將zipDir文件夾下所有文件或者文件夾通通壓縮到zipDir.zip中
zip -9r /tmp/zipDir.zip /tmp/zipDir/
排除指定文件壓縮
例如我們希望壓縮zipDir目錄時,不壓縮zipDir3
zip -9r /tmp/zipDirWithoutFile3.zip /tmp/zipDir -x "/tmp/zipDir/file3"
如下圖可以看到壓縮過程中,并沒有包括file3
刪除壓縮包中的文件
將zipDir.zip中的file3文件從壓縮包中刪除,命令如下所示,注意-d后面要制定和壓縮包中相同的文件名所在操作系統中的路徑
zip /tmp/zipDir.zip -d /tmp/zipDir/file3
補充文件到壓縮包
上文中,我們將file3中zipDir.zip中刪除,我們希望將其添加到壓縮包中,就可以使用下面這條命令
zip -u /tmp/zipDir.zip /tmp/zipDir/file3
這條指令同樣支持將文件夾下的指定內容添加到壓縮包中,命令如下
# 將file打頭的文件添加到壓縮包中
zip -u /tmp/zipDir.zip /tmp/zipDir/file*
解壓縮
-o:解壓時無腦覆蓋目標路徑文件
-x 解壓時若目標文件夾有該文件則不覆蓋
-d 指定目標解壓位置
unzip -o /tmp/zipDir.zip -x zipDir/file3 -d /tmp/unzipDir/
gzip/gunzip
選項
該命令只能對文件進行壓縮,若指定目錄也僅僅是對目錄下的文件進行壓縮。
遞歸壓縮文件
同樣我們為演示gzip增加測試文件夾
mkdir gzipDir;cd gzipDir;touch file1;touch file2;touch file3;
# 因為gzip無法直接壓縮文件夾所以需要先用zip壓縮一下文件夾zip -r /tmp/gzipDir.zip /tmp/gzipDir/;# gzip以最高級別壓縮比壓縮文件,并顯示壓縮過程gzip -9v /tmp/gzipDir.zip
顯示壓縮比
gzip -l /tmp/gzipDir.zip.gz
解壓縮到當前目錄
gzip -d /tmp/gzipDir.zip.gz
bzip2/bunzip2
命令選項
與gzip差不多,都是用于壓縮文件的,壓縮時會刪除文件的信息,但是用如下選項即可完成使用最高壓縮比,并且壓縮時不刪除源文件,顯示壓縮進度的完成壓縮
bzip2 -9vk /tmp/*
解壓縮同樣使用-d即可。
tar
選項
該指令僅僅是對文件或者文件夾做打包而已,對應選項如下
普通壓縮
創建示例文件夾和文件
mkdir tarDir;cd tarDir;touch file1;touch file2;touch file3;
顯示過程并新建文件的執行壓縮
tar -cvf /tmp/tardir.tar /tmp/tarDir/
調用gzip、bzip2壓縮
調用gzip壓縮,添加一個-z
即可
tar -zcvf tardir.tar.gz tardir.tar
調用bz2壓縮
tar -jcvf tardir.tar.bz2 tardir.tar
解壓縮
將上文的c改為x即可
例如上文壓縮原始壓縮文件tardir.tar,我們壓縮命令為
tar -xvf tardir.tar
gz結尾的tar文件,則用
tar -zxvf tardir.tar.gz
bz2結尾的tar文件則用
tar -jxvf tardir.tar.bz2
dd
常用于文件備份,將指定文件輸出到對應文件夾
備份示例
將/etc/inittab備份至/etc/inittab.bak
dd if=/etc/inittab of=/etc/inittab.bak
我們都知道操作系統存儲最基礎單位為塊。可以看到備份過程中,用了0+1的塊。說明使用了0個完整的塊+1個不到的塊完成文件備份。
cpio
選項
該命令也是用于文件備份和還原的
備份
將tarDir備份到tmp的backDir.cpio中
find /tmp/tarDir/ | cpio -ocvB >/tmp/backDir.cpio
恢復
為了演示還原,筆者將被壓縮的源文件刪除,使用cpio將直接備份的文件原原本本還原為原來路徑的原來文件,如下
cpio -icduv < /tmp/backDir.cpio
參考文獻
鳥哥的Linux私房菜
循序漸進Linux(第2版)