日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux学习笔记-文件压缩与解压缩

發(fā)布時間:2023/12/31 linux 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux学习笔记-文件压缩与解压缩 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

背景:文件壓縮技術(shù)

首先,我們的電腦都是以字節(jié)為單位進行計量(最小計量單位為bit)。假設(shè)我們要存儲數(shù)字“1”,那么計算機會存儲為“00000001”,壓縮就是把這些沒有用到的存儲空間“丟掉”。
若要使用這些被壓縮過的文件數(shù)據(jù),就必須把他還原成為壓縮時的模樣,這就是所謂的解壓縮
壓縮比: 壓縮后與壓縮的文件所占用的磁盤空間的大小之比。比如壓縮之前文件大小為10MB,壓縮后大小為2MB,那么其壓縮比為(10-2)/10=80%,因此壓縮比越接近于1越好。
很多www網(wǎng)站就是利用文件壓縮技術(shù)來進行數(shù)據(jù)的傳輸,好讓網(wǎng)站帶寬的利用率上升。

1.壓縮命令

壓縮文件的擴展名大多是:*.tar , *.tar.gz, *.tgz, *.gz, *.Z, *bz2, *.xz等。
那么問題來了,不是說Linux的擴展名沒啥用嗎?哦,原來Linux對應(yīng)的壓縮命令非常多,彼此之間可能無法互通壓縮/解壓縮,所以就得用這些擴展名區(qū)分開,以來幫助電腦前面的觀眾朋友進行區(qū)分。以下是常見的擴展名:

*.Z compres程序壓縮的文件 *.zip zip程序壓縮的文件 *.gz gzip程序壓縮的文件 *.bz2 bzip2程序壓縮的文件 *.xz xz程序壓縮的文件 *.tar tar程序打包的文件,并沒有壓縮過 *.tar.gz tar程序打包的文件,并且經(jīng)過gzip的壓縮 *.tar.bz2 tar程序打包的文件,并且經(jīng)過bzip2的壓縮 *.tar.xz tar程序打包的文件,并且經(jīng)過xz的壓縮

Linux上常見命令的就是gzip,bzip2以及最新的xz。tar其實是打包軟件,并沒有提供壓縮功能。就像windows中壓縮前需要把被壓縮的所有文件全部放在一個文件夾中。

1.1 gzip命令

gzip可以說是應(yīng)用最廣的壓縮命令了,目前gzip可以揭開compress、zip與gzip等軟件所壓縮的文件,gzip所創(chuàng)建的壓縮文件為*.gz,其語法為:

gzip [-cdtv#] 文件名 #壓縮 zcat 文件名.gz #查看文本內(nèi)容 選項與參數(shù): -c : 將壓縮的數(shù)據(jù)輸出到屏幕上,可通過數(shù)據(jù)流重定向來處理 -d : 解壓縮的參數(shù) #解壓縮 -t : 檢驗一個壓縮文件的一致性,看文件是否有誤 -v : 可以顯示壓縮比等信息 -# : #為數(shù)字的意思,代表壓縮等級,-1最快,但壓縮比最差,-9最慢,但壓縮比好,默認(rèn)是-6

看書的時候,我最開始很好奇他為啥用負數(shù)表示,哈哈,然后發(fā)現(xiàn)“-”只是一個符號,其實還是用的1-9來表示的。
采用gzip壓縮會默認(rèn)刪除源文件,若不想采用采用源文件見下例:
eg1:將/etc下面文件中services文件復(fù)制到/tmp下,并才以保留源文件的方式用最佳壓縮比壓縮

cp /etc/services /tmp #復(fù)制文件 cd /tmp gzip -9 -c services > services.gz #進行壓縮 gzip -d ./service* #解壓縮

等級9是最大的壓縮比,不過一般使用默認(rèn)的6。關(guān)鍵是后面的-c 與 > ,-c可以將原本要轉(zhuǎn)成壓縮文件的數(shù)據(jù)內(nèi)容,將它變成文字類型從屏幕輸出,然后>這個符號,將原本應(yīng)該由屏幕輸出的數(shù)據(jù),轉(zhuǎn)成輸出到文件而不是屏幕,所以就能夠建立出壓縮文件了。只是文件名要自己寫,所以還是要遵循gzip的壓縮文件名要求為佳。
cat/more/less可以使用不同的方式來讀取純文本文件,而zcat/zmore/zless可以讀取純文本文件被壓縮后的壓縮文件。找關(guān)鍵詞的話,也可以使用zgrep來查找。

1.2 bzip2命令

bzip2為了替換gzip以提供最佳的壓縮比。用法幾乎與gzip相同。詳見下:

bzip2 [-cdkzv#] 文件名 bzcat 文件名.bz2 #查看壓縮文件的內(nèi)容,不過只能是文本文件 選項與參數(shù): -c : 將壓縮的過程產(chǎn)生的數(shù)據(jù)輸出到屏幕上 -d : 解壓縮的參數(shù) -k : 保留原始文件,而不會刪除原始文件 -z : 壓縮的參數(shù),一般選擇默認(rèn),不加 -v : 可以顯示源文件/壓縮文件的壓縮比等信息; -# : 與gzip同樣,都是計算壓縮比的參數(shù),9最佳,1最快

eg2:將上例留下來的/tmp/services 文件以bzip2壓縮

bzip2 -v /tmp/services #就是這么簡單,甚至連參數(shù)都不用加 bzip2 -d /tmp/ser* #解壓縮

但是他能不能嵌套壓縮,我壓縮你,你壓縮我,于是我試了對生成的bz2文件進行g(shù)zip壓縮,我去,還真的可以,不過壓縮比低的可憐,只有0.1%, 算了,還是膨脹回來吧。

wei@wei:/tmp$ gzip -v ./ser* ./services.bz2: -0.1% -- replaced with ./services.bz2.gz

1.3 xz命令

雖然bzip2已經(jīng)很好了,可還是有好多人不滿足,于是就有了xz,具有個更更好的壓縮比,用戶也幾乎與gzip/bzip2相同,我們來瞅瞅她的用法:

xz [-dtlkc#] 文件名 xcat 文件名.xz 選項與參數(shù): -d : 解壓縮 -t : 測試文件的完整性,看看是否有錯誤 -l : 列出壓縮文件的相關(guān)信息 -k : 保留原本的文件不刪除 -c : 同樣的,把數(shù)據(jù)輸出在屏幕上 -# : 同樣的,最佳壓縮比

不過,壓縮比好是好,但是它慢。以鳥哥舉的栗子看,gz、bz2、xz去壓縮services文件分別使用了:0.019s、0.042s、0.261s,具體使用哪個壓縮命令,還是大家自己權(quán)衡。

2.打包命令:tar

tar可以將多個目錄或文件打包成一個大文件,同時還可以通過gzip,bzip2,xz對該文件進行壓縮。而且Windows也支持.tar.gz文件名的解壓縮。下面列幾個比較常用的命令參數(shù):

2.1tar的基本用法

tar [-z|-j|-J] [cv] [-f 待建立的新文件名] filename... #打包與壓縮 tar [-z|-j|-J] [tv] [-f 既有的tar文件名] #查看文件名 tar [-z|-j|-J] [xv] [-f 既有的tar文件名] [-C 目錄] #解壓縮 命令與參數(shù): -c : 建立打包文件,可搭配-v來查看過程中被打包的文件名 -t : 查看打包文件的內(nèi)容含有那些文件名,重點在產(chǎn)看【文件名】 -x : 解包或解壓縮的功能,可以搭配-C在特定目錄解壓,-c,-v.-x不可同時出現(xiàn) -z : 通過gzip進行壓縮/解壓縮:此時文件名最好為*.tar.gz -j : 通過bzip2進行壓縮/解壓縮:此時文件名最好為*.tar.bz2 -J : 通過xz進行壓縮/解壓縮:此時文件名最好為*.tar.xz -z,-j,-J不可同時出現(xiàn) -v : 在壓縮/解壓縮過程中,將正在處理的文件名顯示出來 -f filename : -f后面要立刻接要被處理的文件名 建議-f單獨寫一個選型 -C 目錄 : 解壓縮在特定目錄 -p : 保留備份數(shù)據(jù)的原本權(quán)限與屬性,常用于備份重要的配置文件 -P : 保留絕對路徑,即允許備份數(shù)據(jù)中含有根目錄存在 --exclude=FILE

看著挺復(fù)雜,其實也挺復(fù)雜,哈哈,假的。其實簡單用的話就下面三條命令:

  • 壓縮:tar -jcv -f filename.tar.bz2 要被壓縮的文件或目錄名稱
  • 查詢:tar -jtv -f filename.bz2
  • 解壓縮:tar -jxv -f filename.tar.bz2 -C 想要解壓縮的目錄

鳥哥說有事沒事備份一下/etc這個目錄是件好事,雖然我這種級別還不太理解,不過我們先來試試用tar來備份/etc`

#要在root權(quán)限下進行 root@wei:~# time tar -jpcv -f /root/etc.tar.bz2 /etc #time是為了顯示程序運行的時間 tar: 從成員名中刪除開頭的“/” <==警告信息 ....... #省略顯示信息 root@wei:~# tar -jtv -f /root/etc.tar.bz2 #查看文件的數(shù)據(jù)內(nèi)容

現(xiàn)在說一下為什么去掉開頭的“/”:
主要是為了安全。比如說解壓縮時,如果保留了“/”,就變成了絕對路徑,那么解壓后的文件/etc/xxx就會自動放置到根目錄“/”下去,這樣一來,原本/etc/下面的數(shù)據(jù),就會被備份數(shù)據(jù)所覆蓋。所以就去掉了開頭的“/”,解壓后就放在/tmp下(如果在/tmp下解壓的話)。
不過,如果你就是要解壓到根目錄下,就可以加上-P這個選項了。
壓縮完了,現(xiàn)在進行解壓縮:

tar -jxv -f /root/etc.tar.bz2 #解壓到當(dāng)前工作目錄下

若要指定目錄解壓,可以使用-C命令:

tar -jxv -f /root/etc.tar.bz2 -C /tmp #哦了

2.2 特殊用法

  • 解開單一文件

舉個例子,比如說要解開etc.tar.bz2中的“shadow”文件

root@wei:~# tar -jtv -f /root/etc.tar.bz2 | grep 'shadow' -rw-r----- root/shadow 859 2019-11-27 19:11 etc/gshadow -rw-r----- root/shadow 1381 2019-11-27 19:11 etc/shadow <=需要解壓的文件 -rw-r----- root/shadow 839 2019-11-27 19:11 etc/gshadow- -rw-r----- root/shadow 1381 2019-11-27 19:11 etc/shadow- root@wei:~# tar -jxv -f /root/etc.tar.bz2 etc/shadow <=解開這個文件 etc/shadow
  • 打包某目錄卻不包含某文件

比如我們想要打包/etc/ /root這幾個重要的目錄,但卻不想要打包/root/etc*開頭的文件,我們就可以找–exclude來幫忙。exclude:來啦來啦,催啥!

tar -jcv -f /root/system.tar.bz2 --exclude=/root/etc* \ <=換行輸入 > --exclude=/root/system.tar.bz2 /etc /root
  • 僅備份比某個時刻還要新的文件

我們要用到–newer-mtime選項
1.找到比/etc/passwd還要新的文件以及他的日期

find /etc -newer /etc/passwd root@wei:~# ll /etc/passwd -rw-r--r-- 1 root root 2648 11月 27 19:11 /etc/passwd

2.進行打包

root@wei:~# tar -jcv -f /root/etc.newer.than.passwd.tar.bz2 \ > --newer-mtime="2019/11/27" /etc/* <= 以上面看到的時間為準(zhǔn)

然后就完成了,比如說我上個月備份了完整的數(shù)據(jù),這個月我就只用備份比上次備份時間新的內(nèi)容就行了,就不用全部備份了。

另外,tar命令既可以打包壓縮,也可以只打包。我們僅打包的文件【tar -cv -f file.tar】的文件成為tarfile;如果還亞索,哦不,壓縮的支持,我們就稱呼為哈薩給,哈哈哈,跑題了。如果打包了也壓縮了。我們稱呼他為tarball。見到他知道是什么就可以了。

3.其他常用備份工具

dd

dd命令主要用于制作一個文件以及備份。因為dd可以讀取磁盤設(shè)備的內(nèi)容,然后將整個設(shè)備備份成一個文件。下面是一些比較簡單的用法:

dd if="input_file" of="output_file" bs="block_size" count="number" 選項與參數(shù): if : 就是input file,也可以是設(shè)備 of : 就是output file,也可以是設(shè)備 bs : 設(shè)置一個bolck大小,未指定的話是512k=Bytes(一個扇區(qū)大小) count : 多少個bs的意思

eg3:將/etc/passwd備份到/tmp/passwd.back中

root@wei:~# dd if=/etc/passwd of=/tmp/passwd.back 記錄了5+1 的讀入 #表示有5個完整的512Bytes 記錄了5+1 的寫出 2648 bytes (2.6 kB, 2.6 KiB) copied, 0.000384544 s, 6.9 MB/s 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的Linux学习笔记-文件压缩与解压缩的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。