1 打包(歸檔)和壓縮(包含二者的區(qū)別)
歸檔
,也稱為打包,指的是一個(gè)文件或目錄的集合,而這個(gè)集合被存儲(chǔ)在一個(gè)文件中。歸檔文件沒有經(jīng)過壓縮,因此,它占用的空間是其中所有文件和目錄的總和。
通常,歸檔會(huì)和系統(tǒng)(數(shù)據(jù))備份聯(lián)系在一起,不過,有關(guān)數(shù)據(jù)備份的內(nèi)容,之后進(jìn)行說明。
和歸檔文件類似,壓縮文件也是一個(gè)文件和目錄的集合,且這個(gè)集合也被存儲(chǔ)在一個(gè)文件中,但它們的不同之處在于,壓縮文件采用了不同的存儲(chǔ)方式,使其占用的磁盤空間比集合中所有文集大小的總和要小。壓縮
是指利用算法將文件進(jìn)行處理,已達(dá)到保留最大文件信息,而讓文件體積變小的目的。其基本原理為,通過查找文件內(nèi)的重復(fù)字節(jié),建立一個(gè)相同字節(jié)的詞典文件,并用一個(gè)代碼表示。比如說,在壓縮文件中,有不止一處出現(xiàn)了“Linux系統(tǒng)”,那么,在壓縮文件時(shí),這個(gè)詞就會(huì)用一個(gè)代碼表示并寫入詞典文件,這樣就可以實(shí)現(xiàn)縮小文件體積的目的。
由于計(jì)算機(jī)處理的信息是以二進(jìn)制的形式表示的,因此,壓縮文文件就是把二進(jìn)制信息中相同的字符串以特殊字符標(biāo)記,只要通過合理的數(shù)學(xué)計(jì)算,文件的體積就能夠被大大壓縮。把一個(gè)或多個(gè)文件用壓縮軟件進(jìn)行壓縮,形成一個(gè)壓縮文件包,既可以節(jié)省存儲(chǔ)空間,又可以方便在網(wǎng)絡(luò)傳送。
如果能夠理解文件壓縮的基本原理,那么很容易就能想到,對(duì)文件進(jìn)行壓縮,很有可能損壞文件的內(nèi)容,因此。壓縮又分為有損壓縮
和無損壓縮
。無損壓縮很好理解,指的是壓縮數(shù)據(jù)必須準(zhǔn)確無誤;有損壓縮指的是即使丟失個(gè)別的數(shù)據(jù),對(duì)文件也不會(huì)造成太大的影響。有損壓縮廣泛應(yīng)用于動(dòng)畫、聲音和圖像文件中,典型代表就是影碟文件格式mpeg、音樂文件格式mp3以及圖像文件格式j(luò)pg。
采用壓縮工具對(duì)文件進(jìn)行壓縮,生成的文件稱為壓縮包
,該文件的體積通常只有原文件的一半甚至更小。需要注意的是,壓縮包中的數(shù)據(jù)無法直接使用,使用前需要利用壓縮工具將文件數(shù)據(jù)還原,此過程又稱為解壓縮
Linux下,常用歸檔命令有2個(gè),分別是tar
和dd
(相對(duì)而言,tar的使用更為廣泛);常用的壓縮命令有很多,比如gzip
、zip
、bzip2
等。
注意,tar命令也可以作為壓縮命令,也很常用。
2 Linux tar命令
在Linux系統(tǒng)中,最常用的歸檔(打包)命令就是tar
,該命令可以使許多文件一起保存到一個(gè)單獨(dú)的磁帶或磁盤中進(jìn)行歸檔。不僅如此,該命令還可以從歸檔文件中還原所需文件,也就是打包的反過程,稱為解打包。
使用tar命令歸檔的包通常稱為tar包(tar包文件都是以“.tar”結(jié)尾的)。
2.1 tar命令執(zhí)行打包操作
tar命令的基本格式為:
[chen@localhost~]$ tar [選項(xiàng)] 源文件或目錄
選項(xiàng) | 作用 |
---|---|
-c | 將多個(gè)文件或目錄進(jìn)行打包 |
-A | 追加tar文件到歸檔文件 |
-f 包名 | 指定包的文件名。包的擴(kuò)展名是用來給管理員識(shí)別格式的,所以一定要使用正確的擴(kuò)展名 |
-v | 顯示打包文件過程 |
【例1】打包多個(gè)文件
將/home/chen/my/
目錄下的文件target1
,target2
,target3
打包 并命名為bao.tar
且放到/home/chen/my/
目錄下
[chen@localhost my] tar -cvf bao.tar target1 target2 target3
【例2】打包目錄
將/home/chen/my/
目錄打包并命名bao.tar
且放在/home/chen/My/
目錄下
[~]$ tar -cvf /home/chen/My/bao.tar /home/chen/my/
【例3】打包并壓縮目錄
在例2的基礎(chǔ)上將/home/chen/My/bao.tar
文件壓縮。
壓縮命令不能直接壓縮目錄,必須先使用
tar
命令將目錄打包,才能使用gzip命令
或bzip2
命令對(duì)打包文件進(jìn)行壓縮
[~]$ tar -cvf /home/chen/My/bao.tar /home/chen/my/
[~]$ gzip /home/chen/My/bap.tar
2.2 tar命令執(zhí)行解打包操作
tar命令的基本格式如下:
[chen@localhost~]$ tar [選項(xiàng)] tar包
選項(xiàng) | 作用 |
---|---|
-x | 對(duì)tar包做解打包操作 |
-t | 只查看tar包中有哪些文件或目錄 |
-f | 指定要解壓的tar包的包名(這是最后一個(gè)參數(shù)) |
-C 目錄 | 指定解打包位置 |
-v | 顯示解打包的具體過程 |
【例1】解打包/home/chen/my/bao.tar
文件到當(dāng)前目錄/home/chen/my/
下。
[~]$ tar -xvf /home/chen/my/bao.tar
【例2】解打包/home/chen/my/bao.tar
文件到其它目錄/home/chen/My/
下。
[~]$ tar -xvf /home/chen/my/bao.tar -C /home/chen/My/
【例3】 查看/home/chen/my/bao.tar
文件的內(nèi)容
[~]$ tar -tvf /home/chen/my/bao.tar
2.3 tar命令執(zhí)行 打包壓縮(解包解壓)操作
你可能會(huì)覺得Linux實(shí)在太不智能了,一個(gè)打包壓縮,居然還要先打包成.tyar
格式,再壓縮成.tar.gz
或.tar.bz2
格式。其實(shí),tar
命令是可以同時(shí)打包壓縮的,前面的講解之所以打包和壓縮分開,是為了讓大家了解在Linux中打包和壓縮的不同。
tar命令的基本格式如下:
[chen@localhost~]$ tar [選項(xiàng)] 壓縮包 源文件或目錄
選項(xiàng) 作用 | |
---|---|
-z | 壓縮和解壓縮.tar.gz 格式 |
-j | 壓縮和解壓縮.tar.bz2 格式 |
【例1】壓縮與解壓縮 .tar.gz
格式
將/home/chen/my/target1
文件壓縮為bao.tar.gz
并放入/home/chen/
目錄下
[~]$ tar -zcvf /home/chen/bao.tar.gz /home/chen/my/target1
2.4 兩種常見問題
【問題1】
tar命令打包壓縮時(shí)報(bào)錯(cuò):tar:Removing leading ‘/’ from member names
問題原因:因?yàn)槭褂玫氖墙^對(duì)路徑/home/chen/my/*.txt
,而不是相對(duì)路徑。而tar命令默認(rèn)是采用相對(duì)路徑進(jìn)行壓縮打包的。
一般不推薦使用絕對(duì)路徑,原因之一是可能會(huì)導(dǎo)致tar炸彈攻擊
解決方案:打包壓縮時(shí)使用相對(duì)路徑./my/*.txt
【問題2】
解壓時(shí)發(fā)現(xiàn)連同路徑都一起打包進(jìn)去
解決方案:最好在打包時(shí),進(jìn)入要打包的文件目錄,減少目錄層級(jí)。(要打印/home/chen/my/*.txt
文件,最好是先進(jìn)入到/home/chen/my
目錄)
3 Linux zip/unzip 命令
zip命令的基本格式如下:
[chen@localhost ~]$ zip [選項(xiàng)] 壓縮包名 源文件名
unzip命令的基本格式如下:
[chen@loaclhost ~]$ unzip [選項(xiàng)] 壓縮包名
選項(xiàng) | 作用 |
---|---|
-r | 遞歸壓縮目錄,及目錄下內(nèi)容全部壓縮 |
-m | 將文件壓縮后刪除原始文件 |
-v | 顯示詳細(xì)的壓縮過程信息 |
-d 目錄名 | 將壓縮文件解壓到指定目錄下 |
【例1】壓縮/home/chen/my/*.txt
文件到/home/chen/My1/
目錄下,并取名為bao.zip
解壓縮/home/chen/My1/bao.zip
文件到/home/chen/My2/
目錄下文章來源:http://www.zghlxwxcb.cn/news/detail-502417.html
[chen@localhost ~]$ cd my # 進(jìn)入到壓縮文件的上層目錄中
[chen@localhost my]$ zip /home/chen/My1/bao.zip *.txt
[chen@localhost my]$ cd ../My1
[chen@localhost My1]$ unzip -d /home/chen/My2 bao.zip
【例2】壓縮/home/chen/my/
目錄到/home/chen/My1/
目錄下,并取名為bao1.zip
解壓縮/home/chen/My1/bao1.zip
文件到/home/chen/My2/
目錄下文章來源地址http://www.zghlxwxcb.cn/news/detail-502417.html
[chen@localhost ~]$ zip -r /home/chen/My1/bao1.zip my
[chen@localhost ~] cd My1
[chen@localhost My1]$ unzip -d /home/chen/My2 bao1.zip
到了這里,關(guān)于Linux打包(歸檔)和壓縮的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!