Linux 下一堆各式各樣的壓縮文件名:.gz、.tar.gz、tgz、bz2、.Z、.tar 等眾多的壓縮文件名,此外 Windows 下的 .zip、.rar 也可以在 Linux 下使用。
一、基本概念
1.打包
打包是指將多個文件或者目錄放在一起,形成一個總的包,便於保存和傳輸,但是大小是沒有變化的。
2.壓縮
壓縮是指將一個或者多個大文件或者目錄通過壓縮算法使文件的體積變小以達到壓縮的目的,可以節省存儲空間,在壓縮的時候通常是先打包再壓縮。
3.tar命令
- tar命令參數前面加”-"與不加“-”的執行結果沒啥區別
- 區別在於linux風格,加“-”屬於System V風格,不加“-”屬於BSD風格,所以在使用tar命令的時候它的參數加不加“-”結果是一樣的
# tar 命令常用參數
-z 是否同時具有gz屬性
-j 是否同時具有bz2屬性
-J 是否同時具有xz屬性
-x 解壓縮、提取打包的內容
-t 查看壓縮包內容
-c 建立一個壓縮,打包文檔
-C 切換到指定目錄,表示指定解壓縮包的內容和打包的內容存放的目錄
-v 顯示壓縮或者打包的內容
-f 使用文件名 -f選項是必須要用的 -f參數在使用的時候一定排在其他參數的后面
-p 保留備份數據的原本權限與屬性,常用於備份(-c)重要的配置文件
-P 保留絕對路徑
-r 增加壓縮文件 把要存檔的文件追加到檔案文件的未尾
二、打包
- 打包文件
# 將3個文件打包
tar -cvf result.tar data_202105.txt data_202106.txt data_202107.txt
# 命令 + 參數 + 打包后文件名 + 需要打包的文件
# 顯示打包的文件 -v
- 打包目錄
# 打包目錄
tar -cvf data.tar /test
- 查看文件內容
# 查看文件內容
tar -tf result.tar
- 提取文件到某目錄下
tar -xf result.tar -C /data/
如果不使用 -C 指定目錄則會將文件提取到當前目錄。
- 追加文件
# tar -rf tar文件 需要追加的文件
tar -rf result.tar file.txt
# 查看驗證
tar -tf result.tar
三、壓縮
linux 主要有三種壓縮方式:
- gzip —— 公認的壓縮速度最快,壓縮大文件的時候與其他的壓縮方式相比更加明顯,歷史最久,應用最廣泛的壓縮方式
- bzip —— 壓縮形成的文件小,但是可用性不如gzip
- xz —— 是最新的壓縮方式,可以自動提供最佳的壓縮率
壓縮的時候應該標明后綴。
| 參數 | 作用 | 命名方式 |
|---|---|---|
| -z | 用於gzip壓縮方式 | 文件名:data.tar.gz |
| -j | 用於bzip2壓縮方式 | 文件名:data.tar.bz2 |
| -J | 用於xz壓縮方式 | 文件名:data.tar.xz |
實操:
# 查看文件
ll -rth
total 2.0G
-rw-r----- 1 xx xx 440M Sep 9 18:20 data_202105.txt
-rw-r----- 1 xx xx 382M Sep 9 18:20 data_202106.txt
-rw-r----- 1 xx xx 378M Sep 9 18:20 data_202107.txt
-rw-r----- 1 xx xx 821M Sep 9 18:25 result.tar
# gzip壓縮方式
tar -zcvf result.tar.gz data_202105.txt data_202106.txt data_202107.txt
# bzip2壓縮方式
tar -jcvf result.tar.bz2 data_202105.txt data_202106.txt data_202107.txt
# 如果報錯需要安裝bzip2軟件包: yum -y install bzip2
# xz壓縮方式
tar -Jcvf result.tar.xz data_202105.txt data_202106.txt data_202107.txt
# 壓縮后文件對比
ll -rth
total 2.7G
-rw-r----- 1 xx xx 440M Sep 9 18:20 data_202105.txt
-rw-r----- 1 xx xx 382M Sep 9 18:20 data_202106.txt
-rw-r----- 1 xx xx 378M Sep 9 18:20 data_202107.txt
-rw-r----- 1 xx xx 821M Sep 9 18:25 result.tar
-rw-r----- 1 xx xx 285M Sep 9 18:41 result.tar.gz
-rw-r----- 1 xx xx 213M Sep 9 18:47 result.tar.bz2
-rw-r----- 1 xx xx 216M Sep 9 19:13 result.tar.xz
# 壓縮速率、壓縮率對比(反比)
壓縮速度:gz > bz2 > xz
壓縮率:xz > bz2 > gz
四、解壓
tar 命令很智能,在解壓的時候不需要指明壓縮方式,它會自己選擇跟壓縮方式對應的方式去解壓。
解壓 gz 壓縮方式的文件時不要添加 -z 參數,直接使用 -xf 即可,bz2 和 xz 也一樣,會自動選擇。
不指定 -C 參數,會直接解壓在當前目錄。
# 解壓
tar -xf result.tar.gz
# 指定目錄
tar -xf result.tar.gz -C /data/
五、其他
1.警告
在打包和壓縮的過程中,有時候會看到這樣的語句:tar: 從成員名中刪除開頭的“/” ,這個並不是報錯,是因為沒有加上 -P 選項,沒有保留原來的絕對路徑去打包或者壓縮,提取打包的內容跟解壓一樣。
如果在壓縮文件的時候使用了 -P 選項,那么在解壓的時候也要加上 -P 選項,否則也會出現同樣的警告。
2.排除文件
在使用 tar 壓縮或者打包的時候,可以通過增加 --exclude 來達到排除指定的文件的目的。
# 排除文件
tar -cvf data.tar --exclude=data_202107.txt test
壓縮文件也是同理,想要排除指定的目錄壓縮或者打包也是同理。
六、zip和unzip命令
zip 命令主要用於 Windows 系統下,tar 命令主要用於 unix 系統下,想要在 unix 系統壓縮文件后傳給Windows 系統使用,一般會使用 zip 命令相對方便點。
查看系統是否已安裝 zip 和 unzip 命令:
# 查看版本號
rpm -q zip unzip
# zip-3.0-11.el7.x86_64
# unzip-6.0-16.el7.x86_64
1.zip命令
基本語法:
zip 參數 壓縮包名 文件、目錄
-m 將文件壓縮后,刪除原文件
-o 將壓縮文件內的所有文件的最新變動時間設為壓縮的時間
-q 安靜模式,在壓縮的時候不顯示指令執行的過程
-r 遞歸壓縮,將指定目錄下的所有子文件以及文件一起處理
-x 壓縮時排除文件列表中的文件
- 壓縮目錄
# 正常壓縮 不加-q參數 顯示壓縮過程
zip -r test.zip test
adding: test/ (stored 0%)
adding: test/data_202107.txt (deflated 76%)
adding: test/data_202105.txt (deflated 76%)
adding: test/data_202106.txt (deflated 76%)
# 添加-q參數 安靜模式輸出 不顯示壓縮過程
zip -q -r test.zip test
- 壓縮文件
# 壓縮多個文件
# 因為壓縮的全是文件,所以可以不用加上 -r 選項
zip -q rusult.zip data.txt data2.txt data3.txt
- 壓縮文件和目錄
zip -q -r result.zip data.txt test
- 排除文件
zip -r result.zip test -x "./test/data2.txt"
2.unzip命令
基本語法:
unzip 參數 壓縮文件 (-d 目錄) # 不指定目錄則解壓在當前目錄
-c 將解壓縮的結果顯示到屏幕上(顯示每一個目錄下的每一個文件的內容),同時對字符做適當的轉換,但是並沒有解壓壓縮包
-l 顯示壓縮文件內所包含的文件
-t 檢查壓縮文件是否正確
-v 執行時顯示壓縮文件的詳細信息
-q 安靜模式,執行時不顯示任何信息
-d 指定文件解壓后存儲的目錄
-x 指定不要處理壓縮文件中的那些文件
- 顯示解壓縮結果
# 具體會顯示到每一個文件跟每一個文件的內容
# 慎用!!!滾屏!!!
unzip -c test.zip
- 顯示包含的文件
unzip -l test.zip
Archive: test.zip
Length Date Time Name
--------- ---------- ----- ----
0 09-09-2021 20:35 test/
395704334 09-09-2021 18:20 test/data_202107.txt
460339131 09-09-2021 18:20 test/data_202105.txt
400373218 09-09-2021 18:20 test/data_202106.txt
--------- -------
1256416683 4 files
- 檢查壓縮文件是否正確
unzip -t test.zip
Archive: test.zip
testing: test/ OK
testing: test/data_202107.txt OK
testing: test/data_202105.txt OK
testing: test/data_202106.txt OK
No errors detected in compressed data of test.zip.
全部OK表示全部文件都是正確的。
- 不解壓文件 查看壓縮包內容(查看文件列表以及壓縮率)
# 使用 -v 顯示的信息比使用 -l 顯示的信息更加詳細
unzip -v test.zip
Archive: test.zip
Length Method Size Cmpr Date Time CRC-32 Name
-------- ------ ------- ---- ---------- ----- -------- ----
0 Stored 0 0% 09-09-2021 20:35 00000000 test/
395704334 Defl:N 94419298 76% 09-09-2021 18:20 128cfa97 test/data_202107.txt
460339131 Defl:N 109389109 76% 09-09-2021 18:20 cba661a9 test/data_202105.txt
400373218 Defl:N 94776009 76% 09-09-2021 18:20 4314b973 test/data_202106.txt
-------- ------- --- -------
1256416683 298584416 76% 4 files
- 指定目錄解壓
# 查看
unzip -l test.zip
# 解壓
unzip -q test.zip -d /data/
