压缩命令_Linux环境下文件压缩打包命令详解
你好,我是goldsunC
讓我們一起進步吧!
前言
我們知道,在面向對象的程序設計中,一切皆對象。而在Linux操作系統中,一切皆文件,因此我們總會跟文件打交道。
Linux文件系統很龐大復雜,不過有很多時候,在我們需要將文件分享給其他人的時候,經常會用到文件壓縮,因為如果文件太大的話在分享給其他人時就需要傳輸更多的數據。下載一個幾十M的壓縮包和下載幾百M的源文件,估計大家都會選擇前者吧。或者有時候我們需要對文件進行備份,源文件數據量太大會占用更多磁盤空間,也需要壓縮。例如以上的情況,我們經常會用到文件壓縮和解壓這一操作。
用慣了Windows的我們可能覺得這是一個很簡單的事情,有很多軟件能輕松實現文件壓縮和解壓,比如鄙人最喜歡的Bandzip,非常輕量級的一個小壓縮軟件,使用它只需要簡單的點幾下就能輕松實現文件壓縮和解壓的操作,簡直不要太方便。但是用Linux的話,如果我們用shell來操作,可就沒法簡單點幾下就完成任務了。我們需要掌握一些簡單的壓縮知識以及命令操作。
什么是文件壓縮
目前我們使用的計算機系統中都是使用所謂的字節單位(byte)來計量。而事實上,bit才是計算機最小的計量單位,而1Byte=8bit,如果我們只需要記憶一個數字1,那系統會如何記錄?是的,它會這么記錄:
00000001
因為一個字節等于八個比特,每個比特值為0或1,如果記錄一個數字1,它會在最右邊占據1個位,而其它的7個位則會被自動地填上0。其實那7個位應該是空的才對。不過,計算機為了要滿足我們的操作系統數據的讀寫,所以就會將該數據轉為字節的形式來記錄。
而一些聰明的計算機工程師就是利用一些復雜的計算方式,將這些沒有用到的空間丟出來,以讓文件占用的空間變小,這就是壓縮的技術。
還有一種壓縮技術,它是將重復的數據進行統計記錄。例如,如果某個數據為[111111······]共有100個1時,那么壓縮技術會記錄為[100個1]而不是真的有100個1的位存在。這樣也能給精簡文件記錄的容量。
壓縮技術簡單來講,就是將文件中的一些沒有用到的空間填滿,讓空間利用率更高而已。但是既然你壓縮了文件,那么我們的操作系統當然無法之間讀取他們,因此,如果想要使用這些被壓縮過的文件,就必須將它還原為未壓縮前的狀態,這也就是解壓縮。
壓縮文件最大的好處就是讓文件的容量變小,以至于你可以在相同的空間存放更多的文件,或者在網絡傳輸時傳輸的更快。
Linux常見壓縮指令
在Linux環境中,壓縮文件的擴展名大多是:.tar、.tar.gz、.tgz、.gz、.Z、.bz2、.xz。
如果你有一些Linux基礎,我們知道在Linux中文件的擴展名并沒有什么實際的作用,那為什么會有這樣的擴展名呢?
這是因為Linux支持的壓縮命令非常多,且不同的命令所使用的壓縮技術并不相同,因此彼此之間就可能無法互通壓縮/解壓縮文件。所以使用擴展名以讓你知道該文件是使用了哪種壓縮命令壓縮的,好用來對照著解壓縮。雖然Linux文件的屬性和文件名沒有絕對關系,但是清晰的文件名可以用來幫我們人類這小腦袋來辨別。
*.Z????????????compress程序壓縮的文件;*.zip????????zip程序壓縮的文件;
*.gz????????gzip程序壓縮的文件;
*.bz2????????bzip2程序壓縮的文件;
*.xz????????xz程序壓縮的文件;
*.tar????????tar程序打包的文件,沒有被壓縮;
*.tar.gz????tar程序打包的文件,經過gzip的壓縮;
*.tar.bz2????tar程序打包的文件,經過bzip2的壓縮;
*.tar.xz????tar程序打包的文件,經過xz的壓縮;
Linux上常見的壓縮命令是gzip、bzip2和xz,而compress實際上已經被gzip替換了。其中zip命令其實早就有了,主要是為了支持Windows常見的zip壓縮包。
gzip是由GNU計劃所開發出來的壓縮命令,bzip2及xz是GNU后來開發出的壓縮比更好的壓縮命令。不過不管哪個命令,通常僅能針對一個文件來壓縮和解壓縮,如此以來,每次壓縮與解壓縮都要一大堆文件豈不煩人,這個時候,打包,tar就顯得非常重要。
tar可以將很多個文件打包成為一個文件,就算是目錄也不在話下,不過單純的tar并沒有壓縮功能,僅僅能夠打包而已,后來在GNU計劃中,將整個tar與壓縮的功能結合在了一起,如此就能更方便的進行壓縮與打包了。
gizp
gzip幾乎是應用最廣的壓縮命令了,它所建立的壓縮文件擴展名為.gz。該命令基本語法如下:
gzip [-cdtv#] filename
其各選項參數簡介如下:
-c:將解壓縮的數據輸出到屏幕上,可通過數據流重定向來處理;
-d:解壓縮的參數;
-t:可以用來檢驗一個壓縮文件的一致性,看看文件是否有錯誤;
-v:可以顯示出原文件和壓縮文件的壓縮比等信息;
-#:#為數字的意思,代表壓縮等級,其取值在[1-9],其中1最快,壓縮比最差,9最慢,壓縮比最好,默認情況下是6;
如下圖所示,在我的Templates目錄下有一個文件services,如果我想要將其壓縮,我可以這么做:
從圖中可以看到,gzip -v services即可將該文件壓縮,同時壓縮之后壓縮文件的擴展名加上了.gz,而加上了-v參數使得打印出了文件的壓縮比等信息,可以看到文件被壓縮了將近80%,這個效果已經很不錯了。
需要注意的是,當使用gzip進行壓縮時,壓縮之后源文件就不再存在了。此外,使用gzip壓縮的文件在Windows系統中可以被WinRAR、7zip、Bandzip等這些軟件解壓縮,很好用。
而當我們把文件壓縮之后,一般情況下會把文件先解壓縮再訪問,而實際上,我們可以使用zcat、zmore、zless、zgrep等命令來之間讀取壓縮文件。是不是很熟悉?只是在我們的常用命令前加了z而已。
如圖所示使用zmore讀取一頁services.gz文件:
另外,實際上我們可以在壓縮文件的時候不刪除源文件,如例:
gzip -c services > services.gz
這樣的話壓縮文件之后源文件還在,同時生成了壓縮文件。其重點在于-c和>的使用,-c可以將原本要轉成壓縮文件的數據內容變成文字類型在屏幕上輸出,然后我們可以通過>這個符號,將原本應該從屏幕輸出的數據,轉成輸出到文件還不是屏幕,所以就能夠建立出一個新的壓縮文件。
bzip2和xz
學會了gzip,其實bzip2和xz差不多也就會了,這兩個用法和gzip差不多,主要是為了提供更好的壓縮比而誕生的。
bzip2命令基本語法如下:
bzip2 [-cdkzv#] filename
其各選項參數簡介如下:
-c:將壓縮過程產生的數據輸出到屏幕上;
-d:解壓縮的參數;
-k:保留原始文件,而不刪除原始文件;
-z:壓縮的參數(默認值,可不加);
-v:可以顯示出原文件和壓縮文件的壓縮比等信息;
-#:與gzip同樣,為壓縮比參數;
xz命令基本語法如下:
xz [-dtlkc#] filename
-d:解壓縮;
-t:可以用來檢驗一個壓縮文件的一致性,看看文件是否有錯誤;
-l:列出壓縮文件的相關信息;
-k:保留原始文件,而不刪除原始文件;
-c:將壓縮過程產生的數據輸出到屏幕上;
總的來說,gzip->bzip2->xz是一個壓縮比越來越好,但是執行時間越來越長的變化。如果你在意時間成本,可以使用gzip,如果想壓縮的更好,使用xz,至于bzip2,則比較折中。
打包指令
tar
前面談到的壓縮指令大多都只能對單一文件進行壓縮,雖然gzip、bzip2、xz也能夠對目錄進行壓縮,不過它們對目錄的壓縮是指將目錄內的所有文件分別進行壓縮的操作。而不像在Windows系統,可以通過軟件直接將許多數據包成一個文件的樣式。
在Linux下,則有專門的打包指令:tar。
這個指令不僅僅可以對文件進行打包,同時可以通過壓縮指令的支持,將文件同時進行壓縮。
tar命令基本語法如下:
打包與壓縮:tar [-z|-j-J] [cv] [-f 待建立的新文件名] filename
查看文件名:tar [-z|-j-J] [tv] [-f 既有的tar文件名]
解壓縮:tar [-z|-j|-J] [xv] [-f 既有的tar文件名] [-C 目錄]
各選項參數簡介如下:
-c:建立打包文件,可搭配-v來查看過程中被打包的文件名;
-t:查看打包文件的內容含有哪些文件名,重點是查看文件名;
-x:解包或解壓縮功能,可搭配-C在特點目錄解壓,默認在當前目錄;
-z:通過gzip支持進行壓縮和解壓縮,文件名最好是*.tar.gz;
-j:通過bzip2的支持進行壓縮和解壓縮,文件名最好是*.tar.bz2;
-J:通過xz的支持進行壓縮和解壓縮,文件名最好是*.tar.xz;
-v:在壓縮或解壓縮過程中,將正在處理的文件名顯示出來;
-f:參數后加要被處理的文件名;
-C 目錄:指定目錄解壓;
-p:保留備份數據的原本權限與屬性,常用于備份重要的配置文件。
-P:保留絕對路徑,即運行備份數據中包含根目錄。
--exclude=FILE:在壓縮過程中,不要打包FILE。
tar命令的參數比較多,也說明了其能實現的操作比較多。
其中的-c,-t,-x三個參數不能同時出現,因為它們分別代表打包壓縮、查看文件名、解壓縮之意。
其中的-z,-j,-J三個參數也不能同時出現,因為它們分別代表用哪一種壓縮命令進行支持。
打包指令使用方法也比較簡單,只需要明白各個參數的意義使用時加以選擇即可,不過比較重要的是字體加粗的三個參數。
其中-p指保留數據的原本權限與屬性,這個比較好理解,Linux本就是一個權限非常嚴格的系統,畢竟是一個多人多任務的系統,權限的管理非常重要,不明白的同學可自行學習。保留原本權限與屬性可以使得打包后的文件與原來的文件更加一模一樣。
-P指數據中包含/根目錄,也就是說默認情況下是不包含根目錄的。為什么要去掉根目錄?主要是為了安全。因為我們使用tar備份的數據有可能會解壓縮回來使用,如果去掉了根目錄,解壓縮后的文件就會在當前文件夾產生,而如果包含了根目錄,解壓縮后的文件會可能會覆蓋原本文件下的數據。
舉個例子,你打包了/etc/下的所有文件進行備份,如果去掉了根目錄/,那么如果你解壓時在的是Templates文件夾,那么文件目錄就變成了Templates/etc/,而如果沒有去掉根目錄,他就會覆蓋你原本來的/etc。也就是備份數據就會把當前系統文件覆蓋。這時候你可能會想,既然是備份,不就是為了恢復那個狀態嗎,直接覆蓋了不是更好?不過萬一你那個備份的數據版本比較舊呢?你只是打開查看一下一些內容而已,結果備份數據直接把你當前數據覆蓋了,你如何是好?
--exclude==FILE的意思是在打包的時候不包含指定的文件,例如一個文件下有四個文件,你想打包其中的三個,你只需要在打包的時候使用此參數指定那個文件即可。
???end???
走在路上
goldsunC
總結
以上是生活随笔為你收集整理的压缩命令_Linux环境下文件压缩打包命令详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 汉字乱码_别欺负我读书少,这些真的不是乱
- 下一篇: 对齐方式有那些_Excel基础:开始菜单