Linux学习笔记-文件压缩与解压缩
背景:文件壓縮技術
首先,我們的電腦都是以字節為單位進行計量(最小計量單位為bit)。假設我們要存儲數字“1”,那么計算機會存儲為“00000001”,壓縮就是把這些沒有用到的存儲空間“丟掉”。
若要使用這些被壓縮過的文件數據,就必須把他還原成為壓縮時的模樣,這就是所謂的解壓縮
壓縮比: 壓縮后與壓縮的文件所占用的磁盤空間的大小之比。比如壓縮之前文件大小為10MB,壓縮后大小為2MB,那么其壓縮比為(10-2)/10=80%,因此壓縮比越接近于1越好。
很多www網站就是利用文件壓縮技術來進行數據的傳輸,好讓網站帶寬的利用率上升。
1.壓縮命令
壓縮文件的擴展名大多是:*.tar , *.tar.gz, *.tgz, *.gz, *.Z, *bz2, *.xz等。
那么問題來了,不是說Linux的擴展名沒啥用嗎?哦,原來Linux對應的壓縮命令非常多,彼此之間可能無法互通壓縮/解壓縮,所以就得用這些擴展名區分開,以來幫助電腦前面的觀眾朋友進行區分。以下是常見的擴展名:
Linux上常見命令的就是gzip,bzip2以及最新的xz。tar其實是打包軟件,并沒有提供壓縮功能。就像windows中壓縮前需要把被壓縮的所有文件全部放在一個文件夾中。
1.1 gzip命令
gzip可以說是應用最廣的壓縮命令了,目前gzip可以揭開compress、zip與gzip等軟件所壓縮的文件,gzip所創建的壓縮文件為*.gz,其語法為:
gzip [-cdtv#] 文件名 #壓縮 zcat 文件名.gz #查看文本內容 選項與參數: -c : 將壓縮的數據輸出到屏幕上,可通過數據流重定向來處理 -d : 解壓縮的參數 #解壓縮 -t : 檢驗一個壓縮文件的一致性,看文件是否有誤 -v : 可以顯示壓縮比等信息 -# : #為數字的意思,代表壓縮等級,-1最快,但壓縮比最差,-9最慢,但壓縮比好,默認是-6看書的時候,我最開始很好奇他為啥用負數表示,哈哈,然后發現“-”只是一個符號,其實還是用的1-9來表示的。
采用gzip壓縮會默認刪除源文件,若不想采用采用源文件見下例:
eg1:將/etc下面文件中services文件復制到/tmp下,并才以保留源文件的方式用最佳壓縮比壓縮
等級9是最大的壓縮比,不過一般使用默認的6。關鍵是后面的-c 與 > ,-c可以將原本要轉成壓縮文件的數據內容,將它變成文字類型從屏幕輸出,然后>這個符號,將原本應該由屏幕輸出的數據,轉成輸出到文件而不是屏幕,所以就能夠建立出壓縮文件了。只是文件名要自己寫,所以還是要遵循gzip的壓縮文件名要求為佳。
cat/more/less可以使用不同的方式來讀取純文本文件,而zcat/zmore/zless可以讀取純文本文件被壓縮后的壓縮文件。找關鍵詞的話,也可以使用zgrep來查找。
1.2 bzip2命令
bzip2為了替換gzip以提供最佳的壓縮比。用法幾乎與gzip相同。詳見下:
bzip2 [-cdkzv#] 文件名 bzcat 文件名.bz2 #查看壓縮文件的內容,不過只能是文本文件 選項與參數: -c : 將壓縮的過程產生的數據輸出到屏幕上 -d : 解壓縮的參數 -k : 保留原始文件,而不會刪除原始文件 -z : 壓縮的參數,一般選擇默認,不加 -v : 可以顯示源文件/壓縮文件的壓縮比等信息; -# : 與gzip同樣,都是計算壓縮比的參數,9最佳,1最快eg2:將上例留下來的/tmp/services 文件以bzip2壓縮
bzip2 -v /tmp/services #就是這么簡單,甚至連參數都不用加 bzip2 -d /tmp/ser* #解壓縮但是他能不能嵌套壓縮,我壓縮你,你壓縮我,于是我試了對生成的bz2文件進行gzip壓縮,我去,還真的可以,不過壓縮比低的可憐,只有0.1%, 算了,還是膨脹回來吧。
wei@wei:/tmp$ gzip -v ./ser* ./services.bz2: -0.1% -- replaced with ./services.bz2.gz1.3 xz命令
雖然bzip2已經很好了,可還是有好多人不滿足,于是就有了xz,具有個更更好的壓縮比,用戶也幾乎與gzip/bzip2相同,我們來瞅瞅她的用法:
xz [-dtlkc#] 文件名 xcat 文件名.xz 選項與參數: -d : 解壓縮 -t : 測試文件的完整性,看看是否有錯誤 -l : 列出壓縮文件的相關信息 -k : 保留原本的文件不刪除 -c : 同樣的,把數據輸出在屏幕上 -# : 同樣的,最佳壓縮比不過,壓縮比好是好,但是它慢。以鳥哥舉的栗子看,gz、bz2、xz去壓縮services文件分別使用了:0.019s、0.042s、0.261s,具體使用哪個壓縮命令,還是大家自己權衡。
2.打包命令:tar
tar可以將多個目錄或文件打包成一個大文件,同時還可以通過gzip,bzip2,xz對該文件進行壓縮。而且Windows也支持.tar.gz文件名的解壓縮。下面列幾個比較常用的命令參數:
2.1tar的基本用法
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在特定目錄解壓,-c,-v.-x不可同時出現 -z : 通過gzip進行壓縮/解壓縮:此時文件名最好為*.tar.gz -j : 通過bzip2進行壓縮/解壓縮:此時文件名最好為*.tar.bz2 -J : 通過xz進行壓縮/解壓縮:此時文件名最好為*.tar.xz -z,-j,-J不可同時出現 -v : 在壓縮/解壓縮過程中,將正在處理的文件名顯示出來 -f filename : -f后面要立刻接要被處理的文件名 建議-f單獨寫一個選型 -C 目錄 : 解壓縮在特定目錄 -p : 保留備份數據的原本權限與屬性,常用于備份重要的配置文件 -P : 保留絕對路徑,即允許備份數據中含有根目錄存在 --exclude=FILE看著挺復雜,其實也挺復雜,哈哈,假的。其實簡單用的話就下面三條命令:
- 壓縮:tar -jcv -f filename.tar.bz2 要被壓縮的文件或目錄名稱
- 查詢:tar -jtv -f filename.bz2
- 解壓縮:tar -jxv -f filename.tar.bz2 -C 想要解壓縮的目錄
鳥哥說有事沒事備份一下/etc這個目錄是件好事,雖然我這種級別還不太理解,不過我們先來試試用tar來備份/etc`
#要在root權限下進行 root@wei:~# time tar -jpcv -f /root/etc.tar.bz2 /etc #time是為了顯示程序運行的時間 tar: 從成員名中刪除開頭的“/” <==警告信息 ....... #省略顯示信息 root@wei:~# tar -jtv -f /root/etc.tar.bz2 #查看文件的數據內容現在說一下為什么去掉開頭的“/”:
主要是為了安全。比如說解壓縮時,如果保留了“/”,就變成了絕對路徑,那么解壓后的文件/etc/xxx就會自動放置到根目錄“/”下去,這樣一來,原本/etc/下面的數據,就會被備份數據所覆蓋。所以就去掉了開頭的“/”,解壓后就放在/tmp下(如果在/tmp下解壓的話)。
不過,如果你就是要解壓到根目錄下,就可以加上-P這個選項了。
壓縮完了,現在進行解壓縮:
若要指定目錄解壓,可以使用-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還要新的文件以及他的日期
2.進行打包
root@wei:~# tar -jcv -f /root/etc.newer.than.passwd.tar.bz2 \ > --newer-mtime="2019/11/27" /etc/* <= 以上面看到的時間為準然后就完成了,比如說我上個月備份了完整的數據,這個月我就只用備份比上次備份時間新的內容就行了,就不用全部備份了。
另外,tar命令既可以打包壓縮,也可以只打包。我們僅打包的文件【tar -cv -f file.tar】的文件成為tarfile;如果還亞索,哦不,壓縮的支持,我們就稱呼為哈薩給,哈哈哈,跑題了。如果打包了也壓縮了。我們稱呼他為tarball。見到他知道是什么就可以了。
3.其他常用備份工具
dd
dd命令主要用于制作一個文件以及備份。因為dd可以讀取磁盤設備的內容,然后將整個設備備份成一個文件。下面是一些比較簡單的用法:
dd if="input_file" of="output_file" bs="block_size" count="number" 選項與參數: if : 就是input file,也可以是設備 of : 就是output file,也可以是設備 bs : 設置一個bolck大小,未指定的話是512k=Bytes(一個扇區大小) 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 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Linux学习笔记-文件压缩与解压缩的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 造梦西游3珍珠商店有什么东西
- 下一篇: 上单中单打野adc辅助是什么意思 汉典上