zstd(Zstandard)是Facebook开发的一种实时压缩算法,旨在提供高压缩比和快速的压缩/解压速度。它结合了LZ77和tANS编码技术,在现代硬件上表现出色。
# 基本语法
zstd [选项] [文件...]
# 压缩语法
zstd [选项] 源文件 [目标文件.zst]
# 解压语法
zstd -d [选项] 源文件.zst [目标文件]
unzstd [选项] 源文件.zst [目标文件]
| 选项 | 说明 |
|---|---|
-# |
压缩级别(1-19,22,默认为3,数值越大压缩率越高) |
-d, --decompress |
解压 |
-T#, --threads=# |
使用指定数量的线程(0=自动检测CPU核心数) |
-f, --force |
强制覆盖输出文件 |
-k, --keep |
保留源文件 |
-o FILE |
指定输出文件名 |
-v, --verbose |
显示详细信息 |
-q, --quiet |
静默模式 |
-t, --test |
测试压缩文件的完整性 |
--ultra |
启用超模式(级别20-22,需要更多内存) |
--long[=#] |
启用长距离模式(参数为窗口大小,2^#) |
-D FILE |
使用字典文件进行压缩/解压 |
--train FILE |
从文件集训练字典 |
-l, --list |
列出.zst文件信息 |
-C, --check |
添加完整性校验和(默认启用) |
# Ubuntu/Debian (18.04+)
sudo apt install zstd
# 或从GitHub安装最新版
wget https://github.com/facebook/zstd/releases/download/v1.5.5/zstd-1.5.5.tar.gz
tar -xzf zstd-1.5.5.tar.gz
cd zstd-1.5.5
make
sudo make install
# CentOS/RHEL 7+
sudo yum install epel-release
sudo yum install zstd
# CentOS/RHEL 8+/Fedora
sudo dnf install zstd
# Arch Linux
sudo pacman -S zstd
# macOS (使用Homebrew)
brew install zstd
# 验证安装
zstd --version
# 基本压缩(默认级别3)
zstd file.txt
# 压缩后生成file.txt.zst,删除原文件
# 压缩并保留原文件
zstd -k data.log
# 指定压缩级别(1最快,19最高压缩率)
zstd -1 fast.txt # 最快压缩
zstd -9 balance.txt # 平衡模式
zstd -19 high.txt # 高压缩率
# 指定输出文件名
zstd input.txt -o output.zst
# 基本解压
zstd -d file.txt.zst
# 解压并保留压缩文件
zstd -dk archive.zst
# 指定解压后的文件名
zstd -d compressed.zst -o decompressed.txt
# 使用unzstd命令(等同于zstd -d)
unzstd file.zst
# 解压到标准输出
zstd -dc archive.zst | less
# 自动检测CPU核心数
zstd -T0 largefile.dat
# 使用4个线程
zstd -T4 bigfile.dat
# 多线程压缩并保留原文件
zstd -T0 -k hugefile.dat
# 多线程高压缩级别
zstd -19 -T0 large_dataset.dat
# 测试.zst文件的完整性
zstd -t data.zst
# 测试并显示详细信息
zstd -tv archive.zst
# 列出.zst文件信息
zstd -l file.zst
# 输出示例:
# Frames Skips Compressed Uncompressed Ratio Check Filename
# 1 0 50.0 MiB 100.0 MiB 2.000 XXH64 file.zst
# 查看详细文件信息
zstd -lv *.zst
# 启用超模式(级别20-22)
zstd --ultra -20 file.txt
# 超模式配合多线程
zstd --ultra -22 -T0 largefile.dat
# 超模式保留源文件
zstd --ultra -21 -k data.bin
# 启用长距离模式
zstd --long file.txt
# 指定长距离窗口大小(2^27 = 128MB)
zstd --long=27 large_log.txt
# 长距离模式配合高压缩级别
zstd -19 --long huge_database.sql
# 查看支持的最大窗口大小
zstd --long-help
# 从样本文件训练字典
zstd --train sample_files/* -o dictionary.dict
# 使用字典进行压缩
zstd -D dictionary.dict file.txt
# 使用字典解压
zstd -d -D dictionary.dict file.txt.zst
# 批量使用字典压缩
for file in *.txt; do
zstd -D dictionary.dict "$file"
done
# 创建.tar.zst压缩包
tar -cf - directory/ | zstd > archive.tar.zst
# 创建并指定压缩级别
tar -cf - directory/ | zstd -19 -T0 > archive.tar.zst
# 解压.tar.zst文件
zstd -dc archive.tar.zst | tar -xf -
# 解压到指定目录
zstd -dc archive.tar.zst | tar -xf - -C /target/directory
# tar 1.31+ 支持原生zstd
tar -c --zstd -f archive.tar.zst directory/
# 解压
tar -x --zstd -f archive.tar.zst
# 查看内容
tar -t --zstd -f archive.tar.zst
# 压缩级别设置(通过环境变量)
ZSTD_CLEVEL=19 tar -c --zstd -f archive.tar.zst directory/
# 查找并压缩所有.txt文件
find . -name "*.txt" -type f -exec tar -cf - {} + | zstd > texts.tar.zst
# 按日期压缩旧文件
find /var/log -name "*.log" -mtime +30 -type f -exec tar -cf - {} + | zstd > old_logs.tar.zst
| 工具 | 最佳场景 | 压缩速度 | 解压速度 | 压缩率 | 内存占用 | 推荐级别 |
|---|---|---|---|---|---|---|
| zstd | 通用场景,需要平衡 | 很快(多线程) | 极快 | 优秀 | 中等 | 3-15 |
| lz4 | 需要极速压缩 | 极快 | 极快 | 中等 | 低 | 1 |
| gzip | 兼容性要求高 | 快 | 快 | 一般 | 低 | 6 |
| xz | 需要最高压缩率 | 慢 | 中等 | 最高 | 高 | 6 |
| bzip2 | 传统系统 | 很慢 | 慢 | 较高 | 高 | 9 |
-1 ~ -3: 快速压缩,适合实时数据-4 ~ -9: 平衡模式,日常使用-10 ~ -15: 高压缩率,适合备份-16 ~ -19: 极高压缩率,速度较慢-20 ~ -22: 超模式,需要更多内存-T0: 自动检测CPU核心数(推荐)-T1: 单线程,兼容性好-T4: 4线程,平衡性能-T8+: 多核心服务器# 全系统备份
sudo tar -cf - --exclude=/proc --exclude=/sys --exclude=/tmp / \
| zstd -19 -T0 > backup.tar.zst
# 增量备份
rsync -av --link-dest=/previous_backup /source/ /increment/
tar -cf - /increment | zstd -T0 > increment.tar.zst
# MySQL备份
mysqldump -u root -p --all-databases | zstd -T0 > dump.sql.zst
# PostgreSQL备份
pg_dumpall | zstd -15 -T4 > pg_backup.sql.zst
# MongoDB备份
mongodump --archive | zstd -T0 > mongo_backup.archive.zst
# 压缩旧日志
find /var/log -name "*.log" -mtime +7 -type f \
-exec tar -cf - {} + | zstd > logs_week.tar.zst
# logrotate配置(使用zstd)
compress
compresscmd /usr/bin/zstd
compressext .zst
compressoptions -T0
# 压缩node_modules
tar -cf - node_modules | zstd -T0 > node_modules.tar.zst
# Docker镜像层压缩
docker save image:tag | zstd -T0 > image.tar.zst
# 部署包压缩
tar -cf - build/ config/ | zstd -15 -T4 > deploy.tar.zst
建议:日常使用级别3-9,备份使用10-15,追求极限压缩率使用16-19(配合--ultra),实时数据使用1-3。
# 使用file命令
file data.zst
# 输出示例:data.zst: Zstandard compressed data (v0.8)
# 使用zstd命令测试
zstd -t data.zst
字典压缩特别适合大量相似的小文件(如日志、配置文件),可以显著提高压缩率和速度。通过训练样本文件创建字典,然后在压缩/解压时使用。
unzstd - zstd解压的快捷方式zstdmt - zstd的多线程版本(旧版)zstdcat - 不解压直接显示.zst文件内容lz4 - 极速压缩工具pigz - gzip的多线程版本tar - 打包工具,常与zstd结合zstd file.txt 或 tar -cf - dir/ | zstd -T0 > archive.tar.zstzstd -d file.zst 或 zstd -dc archive.zst | tar -xf --T0(自动)或 -T4(4线程)--ultra超模式,--long长距离模式,字典压缩