引言:選擇正確的壓縮工具為什麼重要?
在日常開發與維運工作中,我們經常需要壓縮檔案:備份資料庫、傳輸日誌檔、打包部署映像檔。選擇適當的壓縮工具,可能讓您的備份時間從 10 分鐘縮短到 2 分鐘,或是將 500MB 的檔案壓縮到 50MB。
本文將透過實際測試數據,深入比較常見的 Linux 壓縮工具,幫助您在不同場景下做出最佳選擇。
測試環境:
- macOS (Apple Silicon M1 Pro, 10 cores)
- 測試檔案:PostgreSQL 資料庫備份 (174 MB, my_DB_backup.sql)
- 測試項目:壓縮率、壓縮速度、解壓速度、特殊功能
壓縮工具快速對照表
| 工具 | 壓縮率 | 壓縮速度 | 解壓速度 | 多執行緒 | 加密 | 最佳場景 |
|---|---|---|---|---|---|---|
| gzip | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ❌ | ❌ | 通用場景、快速壓縮 |
| pigz | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ✅ | ❌ | 大檔案快速壓縮 |
| bzip2 | ⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐ | ❌ | ❌ | 中等壓縮需求 |
| xz | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐ | ✅ | ❌ | 最高壓縮率 |
| zstd | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ✅ | ❌ | 平衡速度與壓縮率 |
| 7z | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐ | ✅ | ✅ | 跨平台、加密需求 |
| tar | - | - | - | - | ❌ | 打包工具(需搭配壓縮) |
1. gzip:經典的壓縮工具
簡介
gzip 是 Linux 系統中最常用的壓縮工具,基於 DEFLATE 演算法(LZ77 + Huffman 編碼)。
基本使用
# 壓縮檔案(原檔案會被刪除)
gzip file.txt
# 產生 file.txt.gz
# 保留原檔案
gzip -k file.txt
# 最高壓縮率(-9)
gzip -9 file.txt
# 解壓縮
gunzip file.txt.gz
# 或
gzip -d file.txt.gz
實測數據(174 MB SQL 檔案)
# 壓縮測試
time gzip -9 -k my_DB_backup.sql
| 項目 | 數值 |
|---|---|
| 原始大小 | 174 MB |
| 壓縮後大小 | 26 MB |
| 壓縮率 | 85.1% |
| 壓縮時間 | 30 秒 |
| 解壓時間 | 5 秒 |
優缺點
✅ 優點:
- 廣泛支援,幾乎所有 Linux 系統都預裝
- 壓縮與解壓速度快
- 與
tar完美整合 - 記憶體使用量低
⚠️ 缺點:
- 不支援多執行緒
- 壓縮率不如 xz 或 7z
- 不支援加密
🎯 最佳使用場景:
- 日常檔案壓縮
- 與
tar結合打包目錄 - 需要快速解壓的場景
2. pigz:gzip 的多執行緒版本
簡介
pigz (Parallel Implementation of GZip) 是 gzip 的平行化實作,使用多個 CPU 核心加速壓縮。
安裝與使用
# macOS
brew install pigz
# Ubuntu/Debian
sudo apt install pigz
# 使用(語法與 gzip 相同)
pigz -9 -k file.txt
# 指定執行緒數量
pigz -9 -p 10 file.txt # 使用 10 個核心
實測數據(174 MB SQL 檔案)
time pigz -9 -k -p 10 my_DB_backup.sql
| 項目 | 數值 |
|---|---|
| 原始大小 | 174 MB |
| 壓縮後大小 | 26 MB |
| 壓縮率 | 85.1% (與 gzip 相同) |
| 壓縮時間 | 8 秒 ⚡ |
| 解壓時間 | 5 秒 |
| 加速比 | 3.75x (vs gzip) |
優缺點
✅ 優點:
- 壓縮速度比 gzip 快 3-4 倍
- 完全相容 gzip 格式
- 自動偵測 CPU 核心數
- 解壓縮也可以平行化
⚠️ 缺點:
- 需要額外安裝
- 記憶體使用量較高
- 小檔案加速不明顯
🎯 最佳使用場景:
- 大型檔案壓縮(>100MB)
- 多核心 CPU 系統
- CI/CD 流程中需要快速壓縮
效能視覺化
3. bzip2:中等壓縮率的選擇
簡介
bzip2 使用 Burrows-Wheeler 演算法,壓縮率介於 gzip 和 xz 之間。
基本使用
# 壓縮
bzip2 -9 file.txt
# 產生 file.txt.bz2
# 保留原檔案
bzip2 -9 -k file.txt
# 解壓縮
bunzip2 file.txt.bz2
實測數據(174 MB SQL 檔案)
time bzip2 -9 -k my_DB_backup.sql
| 項目 | 數值 |
|---|---|
| 原始大小 | 174 MB |
| 壓縮後大小 | 23 MB |
| 壓縮率 | 86.8% |
| 壓縮時間 | 2 分鐘 |
| 解壓時間 | 45 秒 |
優缺點
✅ 優點:
- 壓縮率優於 gzip
- 廣泛支援
- 錯誤恢復能力較強
⚠️ 缺點:
- 壓縮與解壓都很慢
- 不支援多執行緒
- 記憶體使用量較高
🎯 最佳使用場景:
- 對壓縮時間不敏感
- 需要比 gzip 更好的壓縮率
- 檔案長期歸檔
4. xz:極致壓縮率之王
簡介
xz 使用 LZMA2 演算法,提供最高的壓縮率,常用於 Linux 核心與軟體發行版。
基本使用
# 壓縮
xz -9 file.txt
# 產生 file.txt.xz
# 極致壓縮模式
xz -9e file.txt
# 多執行緒壓縮
xz -9e -T10 file.txt
# 解壓縮
unxz file.txt.xz
# 或
xz -d file.txt.xz
實測數據(174 MB SQL 檔案)
time xz -9e -T10 -k my_DB_backup.sql
| 項目 | 數值 |
|---|---|
| 原始大小 | 174 MB (182,452,738 bytes) |
| 壓縮後大小 | 18 MB (18,854,476 bytes) 🏆 |
| 壓縮率 | 89.67% 🏆 |
| 壓縮時間 | 1 分 27 秒 |
| 解壓時間 | 8 秒 |
壓縮等級詳解
# 壓縮等級 0-9
xz -0 # 最快,壓縮率最低
xz -6 # 預設等級
xz -9 # 最高壓縮率
# 極致模式(-e)
xz -9e # 比 -9 更高的壓縮率,但速度更慢
記憶體使用
| 壓縮等級 | 壓縮記憶體 | 解壓記憶體 |
|---|---|---|
-0 | 3 MB | 1 MB |
-6 | 94 MB | 9 MB |
-9 | 674 MB | 65 MB |
-9e | 674 MB | 65 MB |
優缺點
✅ 優點:
- 最高的壓縮率
- 支援多執行緒(
-T參數) - 解壓速度尚可
- 廣泛用於軟體發行
⚠️ 缺點:
- 壓縮速度慢
- 記憶體使用量高(高等級壓縮)
- 不支援加密
🎯 最佳使用場景:
- 需要最小檔案大小
- 長期歸檔儲存
- 網路頻寬有限
- 軟體發行包
實際案例
# Linux 核心原始碼打包
tar -cJf linux-6.6.tar.xz linux-6.6/
# 使用 xz 壓縮,檔案大小通常比 .tar.gz 小 30-40%
# 資料庫備份
pg_dump mydb | xz -9e -T$(nproc) > mydb_backup.sql.xz
5. zstd:速度與壓縮率的最佳平衡
簡介
zstd (Zstandard) 由 Facebook 開發,設計目標是在壓縮率與速度之間取得最佳平衡。
安裝與使用
# macOS
brew install zstd
# Ubuntu/Debian
sudo apt install zstd
# 基本壓縮
zstd file.txt
# 產生 file.txt.zst
# 指定壓縮等級(1-22,預設為 3)
zstd -19 file.txt # 高壓縮率
zstd -1 file.txt # 快速壓縮
# 多執行緒
zstd -19 -T10 file.txt
# 解壓縮
unzstd file.txt.zst
實測數據(174 MB SQL 檔案)
time zstd -19 -T10 my_DB_backup.sql
| 項目 | 數值 |
|---|---|
| 原始大小 | 174 MB |
| 壓縮後大小 | 21 MB |
| 壓縮率 | 87.9% |
| 壓縮時間 | 45 秒 |
| 解壓時間 | 3 秒 ⚡ |
壓縮等級與速度
# 不同等級的壓縮測試(174 MB 檔案)
zstd -1 # 5秒, 30MB (83% 壓縮率)
zstd -3 # 8秒, 27MB (84.5% 壓縮率,預設)
zstd -10 # 25秒, 23MB (86.8% 壓縮率)
zstd -19 # 45秒, 21MB (87.9% 壓縮率)
zstd -22 # 90秒, 20MB (88.5% 壓縮率,最高)
優缺點
✅ 優點:
- 解壓縮極快(比 gzip 還快)
- 壓縮速度與壓縮率平衡極佳
- 支援多執行緒
- 可調整的壓縮等級範圍廣(1-22)
- Facebook、Linux 核心、Docker 等廣泛採用
⚠️ 缺點:
- 需要額外安裝
- 在某些舊系統上支援度不如 gzip
- 不支援加密
🎯 最佳使用場景:
- Docker image 壓縮
- 即時資料壓縮
- 需要快速解壓的備份
- 現代化應用部署
實際案例
# Docker image 儲存(節省空間與載入時間)
docker save myimage | zstd -19 > myimage.tar.zst
# 日誌即時壓縮
tail -f /var/log/app.log | zstd -3 > app.log.zst
# Rsync 與 zstd 結合
rsync -av --compress-level=0 src/ dest/ | zstd -3 > sync.log.zst
6. 7z:跨平台與加密的全能選手
簡介
7z 是 7-Zip 的命令列版本,支援多種壓縮演算法,並提供加密功能。
安裝與使用
# macOS
brew install p7zip
# Ubuntu/Debian
sudo apt install p7zip-full
# 基本壓縮
7z a archive.7z file.txt
# 極致壓縮(LZMA2)
7z a -t7z -m0=lzma2 -mx=9 archive.7z file.txt
# 加密壓縮
7z a -p'MyPassword' -mhe=on archive.7z file.txt
# -p: 設定密碼
# -mhe=on: 加密檔案名稱
# 多執行緒
7z a -mmt=10 archive.7z file.txt
# 解壓縮
7z x archive.7z
實測數據(174 MB SQL 檔案)
time 7z a -t7z -m0=lzma2 -mx=9 -mmt=10 backup.7z my_DB_backup.sql
| 項目 | 數值 |
|---|---|
| 原始大小 | 174 MB |
| 壓縮後大小 | 18.5 MB |
| 壓縮率 | 89.4% |
| 壓縮時間 | 1 分 35 秒 |
| 解壓時間 | 10 秒 |
加密功能
# AES-256 加密
7z a -p'StrongPassword123' -mhe=on -mx=9 secure.7z sensitive_data.sql
# 驗證加密
7z l secure.7z # 無法看到檔案列表(因為 -mhe=on)
# 解壓縮(需要密碼)
7z x secure.7z
# Enter password: ****
支援的格式
# 7z 可以解壓多種格式
7z x file.zip
7z x file.rar
7z x file.tar.gz
7z x file.tar.xz
7z x file.iso
優缺點
✅ 優點:
- 支援加密(AES-256)
- 極高的壓縮率
- 支援多種格式
- 跨平台(Windows/Linux/macOS)
- 可以建立自解壓縮檔案
⚠️ 缺點:
- 壓縮速度較慢
- 在 Linux 上需要額外安裝
- 命令語法較複雜
🎯 最佳使用場景:
- 需要加密的敏感資料
- 跨平台檔案交換
- 需要最小檔案大小且可接受較長壓縮時間
- 歸檔多種格式的檔案
7. tar:打包工具(需搭配壓縮)
簡介
tar (Tape ARchive) 本身不是壓縮工具,而是打包工具,通常與壓縮工具結合使用。
常用組合
# tar + gzip (最常用)
tar -czf archive.tar.gz directory/
tar -xzf archive.tar.gz
# tar + bzip2
tar -cjf archive.tar.bz2 directory/
tar -xjf archive.tar.bz2
# tar + xz (極致壓縮)
tar -cJf archive.tar.xz directory/
tar -xJf archive.tar.xz
# tar + zstd (現代化選擇)
tar -c directory/ | zstd -19 > archive.tar.zst
zstd -dc archive.tar.zst | tar -x
參數詳解
# 常用參數
-c # create (建立)
-x # extract (解壓)
-t # list (列出內容)
-v # verbose (顯示詳細資訊)
-f # file (指定檔案名稱)
-z # gzip
-j # bzip2
-J # xz
# 範例
tar -czvf backup.tar.gz /var/www/
# c: 建立
# z: 使用 gzip
# v: 顯示過程
# f: 檔案名稱為 backup.tar.gz
進階技巧
# 排除特定檔案
tar -czf backup.tar.gz --exclude='*.log' --exclude='node_modules' project/
# 保留權限
tar -czpf backup.tar.gz directory/
# p: 保留檔案權限
# 分卷壓縮(大檔案分割)
tar -czf - large_directory/ | split -b 1G - backup.tar.gz.part
# 合併解壓
cat backup.tar.gz.part* | tar -xzf -
# 使用 pigz 加速
tar -c directory/ | pigz -9 -p 10 > archive.tar.gz
# 透過 SSH 遠端備份
tar -czf - /var/www/ | ssh user@remote 'cat > backup.tar.gz'
優缺點
✅ 優點:
- 保留檔案權限、所有權、時間戳記
- 可以打包整個目錄結構
- 與所有壓縮工具相容
- Unix/Linux 標準工具
⚠️ 缺點:
- 本身不壓縮
- 必須搭配壓縮工具
- 解壓前無法查看單一檔案
🎯 最佳使用場景:
- 備份整個目錄
- 保留完整的檔案屬性
- 系統遷移
- 原始碼發布
壓縮工具效能總覽
實測數據彙整(174 MB SQL 檔案)
| 工具 | 壓縮大小 | 壓縮率 | 壓縮時間 | 解壓時間 | 總評分 |
|---|---|---|---|---|---|
| xz -9e -T10 | 18 MB | 89.67% 🏆 | 1:27 | 8s | ⭐⭐⭐⭐⭐ |
| 7z -mx=9 | 18.5 MB | 89.4% | 1:35 | 10s | ⭐⭐⭐⭐⭐ |
| zstd -19 | 21 MB | 87.9% | 45s | 3s 🏆 | ⭐⭐⭐⭐⭐ |
| bzip2 -9 | 23 MB | 86.8% | 2:00 | 45s | ⭐⭐⭐ |
| gzip -9 | 26 MB | 85.1% | 30s | 5s | ⭐⭐⭐⭐ |
| pigz -9 -p10 | 26 MB | 85.1% | 8s 🏆 | 5s | ⭐⭐⭐⭐⭐ |
視覺化比較
決策樹:如何選擇壓縮工具?
實際應用場景建議
1. 資料庫備份
場景: 每日自動備份 PostgreSQL 資料庫
推薦:xz + 多執行緒
#!/bin/bash
# 資料庫備份腳本
BACKUP_DIR="/backup/$(date +%Y%m%d)"
mkdir -p $BACKUP_DIR
# 匯出並壓縮
pg_dump mydb | xz -9e -T$(nproc) > $BACKUP_DIR/mydb_$(date +%Y%m%d_%H%M%S).sql.xz
# 清理 30 天前的備份
find /backup -type f -mtime +30 -delete
為什麼選擇 xz?
- 最高壓縮率,節省儲存空間
- 備份通常在夜間執行,時間充裕
- 恢復時解壓速度可接受
2. CI/CD 流程中的 Docker Image
場景: CI/CD 流程中需要快速壓縮與傳輸 Docker Image
推薦:zstd
# GitLab CI/CD 範例
build-and-save:
stage: build
script:
- docker build -t myapp:$CI_COMMIT_SHA .
- docker save myapp:$CI_COMMIT_SHA | zstd -10 -T$(nproc) > myapp.tar.zst
artifacts:
paths:
- myapp.tar.zst
expire_in: 7 days
deploy:
stage: deploy
script:
- zstd -dc myapp.tar.zst | docker load
- docker run -d myapp:$CI_COMMIT_SHA
為什麼選擇 zstd?
- 壓縮與解壓都很快
- 壓縮率優於 gzip
- 適合頻繁的 CI/CD 流程
3. 日誌檔案歸檔
場景: 每日輪替的應用程式日誌
推薦:pigz
# logrotate 配置
/var/log/myapp/*.log {
daily
rotate 90
compress
compresscmd /usr/bin/pigz
compressoptions -9 -p 4
compressext .gz
delaycompress
missingok
notifempty
}
為什麼選擇 pigz?
- 與 gzip 完全相容(標準格式)
- 多執行緒加速
- 不影響系統效能
4. 長期歸檔儲存
場景: 專案原始碼、設計檔案的長期歸檔
推薦:xz 或 7z(需要加密)
# 原始碼歸檔(無加密)
tar -cJf project_archive_$(date +%Y%m%d).tar.xz \
--exclude='node_modules' \
--exclude='.git' \
project/
# 敏感檔案歸檔(加密)
7z a -t7z -m0=lzma2 -mx=9 -mhe=on -p'StrongPassword' \
sensitive_archive.7z \
./sensitive_data/
為什麼選擇 xz/7z?
- 極致壓縮率,節省長期儲存成本
- 7z 提供加密選項
- 歸檔後很少解壓,可接受較長壓縮時間
5. 網站靜態資源
場景: 網站伺服器上的靜態資源預壓縮
推薦:gzip + brotli(不在本文討論範圍)
# Nginx 配置
http {
# 即時壓縮
gzip on;
gzip_vary on;
gzip_types text/plain text/css application/json application/javascript;
gzip_min_length 1000;
# 預壓縮檔案(需要預先產生 .gz 檔案)
gzip_static on;
}
# 預壓縮腳本
find /var/www/html -type f \( -name '*.js' -o -name '*.css' \) \
-exec gzip -9 -k {} \;
為什麼選擇 gzip?
- 瀏覽器廣泛支援
- 解壓速度極快
- 標準的 HTTP 壓縮格式
6. 遠端備份傳輸
場景: 透過網路傳輸大型備份檔案
推薦:zstd + rsync
# 遠端備份腳本
#!/bin/bash
SOURCE="/data/backup/"
DEST="user@remote:/backup/"
# 使用 zstd 壓縮,透過 rsync 傳輸
tar -c $SOURCE | zstd -10 -T$(nproc) | \
ssh user@remote "cat > /backup/backup_$(date +%Y%m%d).tar.zst"
# 或使用 rsync 的內建壓縮
rsync -avz --compress-level=0 $SOURCE $DEST
# 注意:rsync 的 -z 使用 zlib,效率不如 zstd
為什麼選擇 zstd?
- 快速壓縮,減少網路傳輸時間
- 解壓速度快,恢復時間短
- 壓縮率優於 gzip
進階技巧與最佳實踐
1. 壓縮前先評估
# 檢查檔案類型(某些檔案已經壓縮過)
file myfile.jpg # JPEG images are already compressed
file myfile.mp4 # Video files are already compressed
file myfile.pdf # PDFs may be compressed
# 已壓縮的檔案再壓縮效果不佳
gzip video.mp4 # 幾乎沒有壓縮效果,反而浪費時間
2. 使用管線組合工具
# 直接壓縮 pg_dump 輸出(不產生中間檔案)
pg_dump mydb | xz -9e -T$(nproc) > backup.sql.xz
# 遠端備份一步到位
tar -c /var/www | zstd -19 | ssh user@backup 'cat > www_backup.tar.zst'
# 分卷壓縮大檔案
tar -c large_directory/ | xz -9 | split -b 1G - backup.tar.xz.part
3. 驗證壓縮檔案完整性
# gzip
gzip -t file.gz
# xz
xz -t file.xz
# 7z
7z t archive.7z
# 壓縮時產生校驗碼
xz -9 file.txt
sha256sum file.txt.xz > file.txt.xz.sha256
# 恢復前驗證
sha256sum -c file.txt.xz.sha256
4. 記憶體受限環境
# 降低壓縮等級以減少記憶體使用
xz -6 large_file.txt # 而非 -9
# 或使用記憶體友善的工具
gzip -9 large_file.txt # gzip 記憶體使用量低
5. 自動化壓縮策略
#!/bin/bash
# 智慧壓縮腳本:根據檔案大小選擇工具
FILE=$1
SIZE=$(stat -f%z "$FILE") # macOS
# SIZE=$(stat -c%s "$FILE") # Linux
if [ $SIZE -lt 10485760 ]; then
# < 10MB: 使用 gzip(快速)
echo "Small file, using gzip..."
gzip -9 "$FILE"
elif [ $SIZE -lt 104857600 ]; then
# 10-100MB: 使用 zstd(平衡)
echo "Medium file, using zstd..."
zstd -19 "$FILE"
else
# > 100MB: 使用 xz(極致壓縮)
echo "Large file, using xz..."
xz -9e -T$(nproc) "$FILE"
fi
常見問題與解答
Q1: 為什麼 xz 壓縮率最高?
A: xz 使用 LZMA2 演算法,特點是:
- 更大的字典大小(dictionary size)
- 更複雜的匹配演算法
- 更有效的熵編碼
代價是更高的記憶體使用與更長的壓縮時間。
Q2: pigz 和 gzip 產生的檔案相容嗎?
A: 完全相容!pigz 產生的 .gz 檔案可以用 gzip 解壓,反之亦然。
# 用 pigz 壓縮
pigz -9 file.txt
# 用 gzip 解壓(沒問題)
gunzip file.txt.gz
Q3: 我應該使用 tar.gz 還是 tar.xz?
A: 取決於使用場景:
| 場景 | 推薦 | 原因 |
|---|---|---|
| 軟體發行 | tar.xz | 下載大小影響用戶體驗 |
| 快速備份 | tar.gz (或 tar.zst) | 時間更重要 |
| 長期歸檔 | tar.xz | 儲存成本考量 |
| 相容性優先 | tar.gz | 最廣泛支援 |
Q4: 可以壓縮已經壓縮過的檔案嗎?
A: 技術上可以,但沒有意義。
# 不要這樣做
gzip image.jpg # JPEG 已經壓縮,再壓縮幾乎沒效果
xz video.mp4 # MP4 已經壓縮,浪費時間
# 已壓縮的常見格式
.jpg, .jpeg # 圖片
.mp3, .mp4 # 影音
.zip, .gz # 壓縮檔
.pdf # PDF(通常已壓縮)
Q5: 如何選擇壓縮等級?
A: 根據時間敏感度:
# 快速壓縮(節省時間)
gzip -1 file.txt
zstd -3 file.txt
# 平衡模式(預設)
gzip -6 file.txt # 預設
xz -6 file.txt # 預設
# 極致壓縮(節省空間)
gzip -9 file.txt
xz -9e file.txt
經驗法則:
- 日常使用:預設等級就夠了
- 網路傳輸:使用較高等級
- 長期歸檔:使用最高等級
效能調校建議
1. 多執行緒最佳實踐
# 不要超過實體核心數
CORES=$(nproc)
xz -9e -T$CORES file.txt
# 如果是超執行緒 CPU,可以用一半
HALF_CORES=$(($(nproc) / 2))
xz -9e -T$HALF_CORES file.txt
# 為其他工作保留 1-2 個核心
RESERVED=2
xz -9e -T$(($(nproc) - $RESERVED)) file.txt
2. I/O 優化
# 使用管線避免中間檔案
tar -c directory/ | xz -9e -T$(nproc) > archive.tar.xz
# 而非
tar -cf archive.tar directory/
xz -9e -T$(nproc) archive.tar
rm archive.tar # 額外的 I/O 操作
3. SSD vs HDD
# SSD: 可以使用更高的壓縮等級(I/O 快)
xz -9e -T$(nproc) file.txt
# HDD: 降低壓縮等級可能更快(避免 I/O 瓶頸)
xz -6 -T$(nproc) file.txt
總結與建議
快速參考指南
| 情境 | 推薦工具 | 命令 |
|---|---|---|
| 🏆 最高壓縮率 | xz | xz -9e -T$(nproc) file |
| ⚡ 最快壓縮 | pigz | pigz -9 -p $(nproc) file |
| ⚖️ 平衡選擇 | zstd | zstd -19 -T$(nproc) file |
| 🔒 需要加密 | 7z | 7z a -p'pwd' -mhe=on file.7z |
| 📦 打包目錄 | tar+xz | tar -cJf archive.tar.xz dir/ |
| 🌐 通用相容 | gzip | gzip -9 file |
最佳實踐總結
- 資料庫備份 → xz(極致壓縮)
- CI/CD 流程 → zstd(快速+好壓縮率)
- 大檔案 → pigz(多核心加速)
- 敏感資料 → 7z(加密功能)
- 日誌歸檔 → pigz(相容性+速度)
- 長期儲存 → xz(最小體積)
最後的建議
“沒有最好的壓縮工具,只有最適合的壓縮工具。”
選擇壓縮工具時,考慮:
- ⏱️ 時間是否充裕?
- 💾 儲存空間是否有限?
- 🔄 解壓頻率高不高?
- 🔐 是否需要加密?
- 🌍 相容性要求如何?
記住: 在大多數情況下,zstd 是現代化的最佳平衡選擇,而 xz 適合需要極致壓縮率的場景。
參考資源
官方文件
延伸閱讀
實用工具
# 壓縮率測試工具
brew install hyperfine # 效能測試
brew install dust # 磁碟空間視覺化
# 測試不同壓縮工具
hyperfine --warmup 1 \
'gzip -9 -c file.txt > /dev/null' \
'pigz -9 -c file.txt > /dev/null' \
'xz -9 -c file.txt > /dev/null' \
'zstd -19 -c file.txt > /dev/null'
文章撰寫日期: 2025-12-19 測試環境: macOS (Apple Silicon M1 Pro) 測試檔案: PostgreSQL 資料庫備份 (174 MB)
