摘要:Zstandard 由 Facebook 工程师 Yann Collet 于 2015 年开发,并于 2016 年开源发布。其设计目标是在保持高压缩比的同时,实现极高的压缩和解压速度。Zstandard 结合了 LZ77 压缩算法和 Finite State
Zstandard 由 Facebook 工程师 Yann Collet 于 2015 年开发,并于 2016 年开源发布。其设计目标是在保持高压缩比的同时,实现极高的压缩和解压速度。Zstandard 结合了 LZ77 压缩算法和 Finite State Entropy(FSE)熵编码技术,能够在现代硬件上高效运行。
Zstandard 的优势:
「高速压缩与解压」:Zstandard 在压缩和解压速度上均表现出色,能够充分利用多核 CPU 的并行处理能力,实现高效的数据处理。「高压缩比」:尽管速度快,Zstandard 仍能提供与其他主流压缩算法(如 zlib)相媲美的压缩比。「灵活的压缩级别」:Zstandard 提供从 1 到 22 的压缩级别,用户可以根据需求在压缩速度和压缩比之间进行权衡。「广泛的应用支持」:Zstandard 已被集成到多个项目和系统中,包括 Linux 内核、文件系统(如 Btrfs、SquashFS)和数据库(如 RocksDB)等。Zstandard 官方 GitHub:
官网:
Zstandard 通过以下关键技术实现高效的压缩性能:
「内存利用」:Zstandard 没有固定的窗口大小限制,能够根据需要使用更大的内存窗口,从而提高压缩效率。「并行执行」:Zstandard 的设计充分考虑了现代 CPU 的并行处理能力,通过将数据分成多个并行流进行处理,提高了压缩和解压速度。「无分支设计」:通过减少条件分支,Zstandard 降低了 CPU 的分支预测失败率,从而提高了执行效率。「有限状态熵编码(Finite State Entropy)」:采用 ANS(Asymmetric Numeral Systems)技术,Zstandard 实现了接近香农极限的压缩效率,同时保持了高解码速度。大多数现代 Linux 发行版的官方软件源中都包含了 Zstandard。您可以使用相应的包管理器进行安装:
「Debian/Ubuntu」:sudo apt updatesudo apt install zstd安装完成后,您可以使用 zstd 命令来验证是否安装成功:
zstd --version如果正确安装,终端将显示 Zstandard 的版本信息。
Zstandard 提供了直观的命令行工具,方便用户进行文件和目录的压缩与解压。
压缩文件要压缩单个文件,只需在命令行中输入 zstd 命令,后跟要压缩的文件名:
zstd filename上述命令将生成一个名为 filename.zst 的压缩文件。
解压文件解压 .zst 文件,可以使用 zstd -d 命令:
zstd -d filename.zst或者使用 unzstd 命令:
unzstd filename.zst这两个命令都会将 filename.zst 解压回原始的 filename。
要压缩整个目录,通常需要结合 tar 命令使用 Zstandard:
tar --zstd -cf archive.tar.zst directory_name上述命令将 directory_name 目录压缩成 archive.tar.zst 文件。解压时,可以使用:
tar --zstd -xf archive.tar.zst需要注意的是,并非所有的 tar 版本都默认支持 --zstd 选项。如果您的 tar 版本不支持该选项,可以使用以下命令:
tar -I 'zstd' -cf archive.tar.zst directory_name解压时使用:
tar -I 'zstd' -xf archive.tar.zstZstandard 提供了从 1 到 19 的标准压缩级别,以及 20 到 22 的超压缩级别。默认的压缩级别为 3。您可以使用 -# 选项来指定压缩级别,例如:
zstd -8 filename上述命令使用压缩级别 8 。
如需使用更高压缩比的模式(等级 20-22),需要显式开启 --ultra 模式:
zstd --ultra -22 filename注意:这些极限压缩级别会显著增加压缩时间和内存使用,适合对压缩比要求极高的场景(如归档冷数据、数据长期保存等)。
Zstandard 默认使用单线程压缩,但通过 -T# 参数,可以启用多线程加速压缩过程:
zstd -T4 filename这会使用 4 个线程并行压缩,显著提高处理大文件的速度。若不指定数字(例如 -T0),Zstandard 将自动选择最佳线程数。
如果你想将压缩结果直接输出到 stdout,而不是生成 .zst 文件,可以使用 -c 选项:
zstd -c file.txt > file.zst解压时同理:
zstd -dc file.zst > file.txt其中 -d 为解压,-c 表示输出到 stdout,非常适合搭配 tar、ssh、pipe 等命令行工具进行流式处理。
默认情况下,zstd 会在压缩或解压后删除源文件。使用 -k 参数可以保留原始文件:
zstd -k filename压缩多个文件虽然 zstd 主要用于单文件压缩,但可以搭配通配符进行批量压缩:
zstd *.log更好的方式是配合 find 或 parallel 使用,例如:
find logs/ -type f -name "*.log" -exec zstd {} \;或利用 GNU Parallel 加速:
要查看 .zst 文件的压缩信息,如压缩比、原始大小、压缩时间戳等,可以使用:
zstd --list archive.zst这在归档或调试时非常有用。
Zstandard 提供了多种工具与 gzip 类似的功能:
zstdcat:解压并打印内容到 stdout,类似 zcatzstdless:查看压缩内容,类似 lesszstdgrep:在 .zst 文件中搜索字符串,类似 zgrepzstdmt:支持多线程解压(通常系统已内置)示例:
zstdcat logs.zst | grep "ERROR"Zstandard 是许多日志压缩系统的首选,因为它在高压缩比与高速解压之间达到了理想平衡。
journalctl --output=short --since=yesterday | zstd -T0 > logs.zst结合 rclone、s3cmd 等工具,先使用 zstd 压缩文件后上传,可节省大量网络流量和存储空间。
zstd backup.sql && rclone copy backup.sql.zst remote:backups/Zstandard 已逐步替代 xz 成为许多 Linux 包管理器(如 Arch 的 pacman、Fedora 的 rpm)的默认压缩格式,打包更快,用户安装体验更佳。
工具压缩速度解压速度压缩比支持多线程gzip快非常快一般否bzip2慢慢好否xz慢一般极好是「zstd」「非常快」「非常快」「优异」「是」Zstandard 在不牺牲压缩比的前提下,极大提升了速度和灵活性,成为现代压缩工具的首选。
Zstandard 不仅仅是一个压缩工具,更是一种现代、高性能的数据处理方式。无论是系统日志归档、备份数据传输,还是构建容器镜像、优化存储系统,Zstandard 都提供了强大的支持。其灵活的压缩级别、多线程能力、兼容性工具链让它在 Linux 系统和云原生环境中大放异彩。
「如果你还在用 gzip 或 xz,不妨现在就试试 zstd,你可能会对它的速度和效果感到惊艳。」
操作命令压缩文件zstd file解压文件zstd -d file.zst 或 unzstd file.zst压缩目录tar --zstd -cf archive.tar.zst dir/解压目录tar --zstd -xf archive.tar.zst设置级别zstd -10 file超压缩zstd --ultra -22 file多线程压缩zstd -T4 file保留原文件zstd -k file查看信息zstd --list file.zst输出到终端zstd -dc file.zst压缩输出zstd -c file > out.zst来源:wljslmz一点号