核心觀念:打包 ≠ 壓縮
- 打包:將多個檔案/目錄合併成單一檔案(
.tar),不減少體積。
- 壓縮:透過演算法減小檔案體積(
gzip、bzip2、xz)。
- Linux 慣例:先
tar 打包,再用壓縮工具壓縮,產生 .tar.gz、.tar.bz2、.tar.xz。
常用選項速查表
| 選項 | 長選項 | 說明 |
-c | --create | 建立新封存檔 |
-x | --extract | 解開封存檔 |
-t | --list | 列出封存檔內容 |
-r | --append | 向現有封存檔追加檔案 |
-u | --update | 更新封存檔中較新的檔案 |
-z | --gzip | 透過 gzip 壓縮/解壓(.gz) |
-j | --bzip2 | 透過 bzip2 壓縮/解壓(.bz2) |
-J | --xz | 透過 xz 壓縮/解壓(.xz) |
-v | --verbose | 顯示處理過程 |
-f | --file | 指定封存檔名稱(必須是最後一個選項) |
-p | --preserve-permissions | 保留原始權限(還原時需 root) |
-P | --absolute-names | 使用絕對路徑(不移除前導 /) |
-C | --directory | 指定解壓/打包的工作目錄 |
--exclude | | 排除符合樣式的檔案 |
實戰範例
1. 僅打包(不壓縮)
tar -cvf log.tar log2017.log
2. 打包並用 gzip 壓縮(最常用)
tar -zcvf log.tar.gz log2017.log
3. 打包並用 bzip2 壓縮(壓縮率較高)
tar -jcvf log.tar.bz2 log2017.log
4. 打包並用 xz 壓縮(壓縮率最高、速度較慢)
tar -Jcvf log.tar.xz log2017.log
5. 查看封存檔內容
tar -tvf log.tar
tar -ztvf log.tar.gz
tar -jtvf log.tar.bz2
6. 解壓縮
tar -xvf log.tar
tar -zxvf log.tar.gz
tar -jxvf log.tar.bz2
tar -Jxvf log.tar.xz
7. 解壓至指定目錄
tar -zxvf log.tar.gz -C /tmp/restore
8. 保留權限備份(需 root)
tar -zcvpf backup.tar.gz /etc /home/user
9. 排除特定目錄/檔案
tar -zcvf backup.tar.gz --exclude='*.log' --exclude='cache' /var/www
10. 差異/增量備份(搭配 -g 快照檔)
# 首次完整備份
tar -g backup.snar -zcvf full.tar.gz /data
# 之後每日增量備份
tar -g backup.snar -zcvf incr-$(date +%F).tar.gz /data
檔案副檔名對照表
| 副檔名 | 解壓指令 |
| .tar | tar -xvf |
| .tar.gz / .tgz | tar -zxvf |
| .tar.bz2 | tar -jxvf |
| .tar.xz | tar -Jxvf |
| .gz | gzip -d / gunzip |
| .bz2 | bzip2 -d / bunzip2 |
| .xz | xz -d / unxz |
| .zip | unzip |
| .rar | unrar e |
小結
熟記 tar -zcvf(打包壓縮)、tar -zxvf(解壓)、tar -ztvf(列表)三大黃金組合,搭配 -p 保留權限、-C 指定目錄、--exclude 排除垃圾檔,即可應付 95% 的備份壓縮場景。