gzip(GNU Zip)是 Linux 最普及的單檔壓縮工具,gunzip 為其硬連結(gzip -d)。本文詳解參數、壓縮等級選擇、管線串聯、與 tar 整合的黃金組合。
| 參數 | 功能 |
|---|---|
-d | 解壓(等同 gunzip) |
-r | 遞歸壓縮目錄下所有檔案(不壓縮目錄本身) |
-t | 測試完整性 |
-v | 顯示每檔壓縮比與名稱 |
-l | 列出壓縮資訊(壓縮/未壓縮大小、比率、檔名) |
-NUM | 壓縮等級 1-9,-1/-fast 最快,-9/-best 最小,預設 6 |
-c | 輸出至標準輸出(不刪除原檔) |
-k | 保留原檔(預設壓縮後刪除原檔) |
-f | 強制覆蓋 |
tar 先歸檔再壓縮(.tar.gz)gzip -c file > file.gz 保留原檔,適合管線.gzgzip -9vk large.sql
# large.sql: 65.2% -- replaced with large.sql.gz
gzip -l large.sql.gz
# compressed uncompressed ratio uncompressed_name
# 3456789 10234567 65.2% large.sql
gzip -d large.sql.gz
# 或
gunzip large.sql.gz
gzip -rv /var/log
# 產生 /var/log/syslog.gz, /var/log/auth.log.gz ... 目錄結構保留但每檔獨立壓縮
tar 歸檔 → gzip 壓縮 → 網路傳輸# 本地備份
tar -czf /backup/etc.tar.gz /etc
# 等同
tar -c /etc | gzip -9 > /backup/etc.tar.gz
# 遠端備份(SSH 管線)
tar -c /etc | gzip -9 | ssh user@backup-server "cat > /backup/etc_$(date +%F).tar.gz"
# 解壓管線
ssh user@backup-server "cat /backup/etc.tar.gz" | gzip -d | tar -x -C /
zcat/zgrep/zless 直接操作壓縮檔
zcat access.log.gz | head
zgrep "ERROR" app.log.gz
zless syslog.gz
| 等級 | 速度 | 壓縮比 | 適用場景 |
|---|---|---|---|
| 1 (fast) | 最快 | 最低 | 即時傳輸、高頻日志壓縮 |
| 6 (default) | 平衡 | 良好 | 通用備份、日志輪轉 |
| 9 (best) | 最慢 | 最高 | 長期封存、網路傳輸頻寬敏感 |
gzip 是「單檔壓縮標準」,tar + gzip 是「歸檔壓縮黃金組合」。掌握 -c 串流輸出、-k 保留原檔、-l 查看資訊、z* 族群直接讀取、壓縮等級權衡,即能駕馭 99% 的單檔/串流壓縮場景。現代替代者 zstd(zstd -19)在同壓縮比下速度快 3-5 倍,值得在新環境評估採用。