lz4 是一种极其快速的无损数据压缩算法,其压缩和解压速度都远超传统的 gzip、bzip2 等工具,同时保持不错的压缩率,它特别适合对速度要求高的场景,如实时数据流、日志文件压缩、数据库备份等,lz4 命令行工具为用户提供了便捷的接口,可以方便地对文件或数据进行压缩和解压缩操作。

lz4 命令的基本用法
lz4 命令的基本语法结构相对简单,其核心功能围绕压缩和解压展开,最常用的几个命令行选项如下:
-z或--compress:明确指定进行压缩操作,虽然在不指定任何选项时,lz4 默认会对输入文件进行压缩(如果输出文件未指定或输出是终端),但显式使用该选项可以使意图更清晰。-d或--decompress或--uncompress:指定进行解压缩操作,当处理已压缩的.lz4文件时,需要使用此选项。-f或--force:强制输出文件,如果输出文件已存在,默认情况下 lz4 会提示并拒绝覆盖,使用-f可以强制覆盖。-f也可以用于将标准输入压缩或解压到已存在的输出文件。- 是一个数字,范围从 1 到 12,代表压缩级别,默认级别通常是 1(最快速度,最低压缩率),数字越大,压缩率越高,但速度会相应变慢。
-9会提供比-1更高的压缩率,但耗时更长,需要注意的是,lz4 的压缩级别调整对压缩率的提升幅度不如 gzip 等算法显著,其主要优势仍在于速度。 -k或--keep:在压缩或解压后,保留原始输入文件,默认情况下,lz4 在操作成功后会删除原始文件(将file.txt压缩为file.txt.lz4后会删除file.txt),使用-k可以避免这种行为。-c或--stdout:将结果输出到标准输出(终端),而不是写入文件,这对于管道操作非常有用,例如将一个文件压缩后直接通过管道传给另一个命令处理,或者将压缩内容直接重定向到另一个文件。-v或--verbose:显示详细的处理信息,如压缩/解压前后的大小、压缩率、处理速度等。-h或--help:显示帮助信息,列出所有可用的命令行选项。-V或--version:显示 lz4 工具的版本信息。
lz4 命令的常用操作场景
压缩单个文件
这是 lz4 最基础的功能,要压缩一个名为 large_file.log 的日志文件,可以使用以下命令:
lz4 large_file.log
执行后,会在同一目录下生成一个名为 large_file.log.lz4 的压缩文件,并默认删除原始的 large_file.log,如果希望在压缩后保留原始文件,可以使用 -k 选项:
lz4 -k large_file.log
如果想要指定压缩后的文件名,可以将输出文件名作为最后一个参数:

lz4 large_file.log compressed_log.lz4
解压缩文件
解压缩一个 .lz4 文件同样简单,假设有一个名为 data.txt.lz4 的文件,要解压它,可以使用:
lz4 -d data.txt.lz4
或者直接使用 unlz4 命令(如果系统安装了):
unlz4 data.txt.lz4
解压后会生成 data.txt 文件,并默认删除原始的 .lz4 文件,同样,-k 选项可以用于保留原始压缩文件。
使用不同的压缩级别
默认的压缩级别(通常是 1)追求极致的速度,如果希望在速度和压缩率之间取得更好的平衡,可以指定更高的级别,使用级别 6 进行压缩:

lz4 -6 large_file.log
下表展示了不同压缩级别对性能和压缩率的典型影响(具体数值因文件类型和内容而异):
| 压缩级别 | 典型压缩速度 | 典型压缩率 | 适用场景 |
|---|---|---|---|
| 1 (默认) | 最快 | 较低 | 实时数据流、需要即时压缩的场景 |
| 6 | 中等 | 中等 | 通用场景,平衡速度与压缩率 |
| 9 | 较慢 | 较高 | 对压缩率要求较高,且可接受一定耗时的情况 |
| 12 | 最慢 | 最高 | 存储空间极其有限,且压缩时间不敏感的场景 |
从标准输入读取并压缩到标准输出
这个功能在脚本和管道操作中非常有用,将一个文本文件的内容通过管道传递给 lz4 进行压缩,然后将压缩结果保存到另一个文件:
cat text_file.txt | lz4 > compressed_output.lz4
同样,也可以将压缩文件通过管道传递给 lz4 -d 进行解压,并将解压后的内容输出到另一个文件:
cat compressed_output.lz4 | lz4 -d > restored_text_file.txt
压缩目录
lz4 命令本身不支持直接压缩整个目录(如 tar 命令),但可以结合 tar 命令来实现,要压缩一个名为 my_project 的目录:
tar -cf - my_project | lz4 > my_project.tar.lz4
这条命令中,tar -cf - my_project 将 my_project 目录打包并通过标准输出输出,然后通过管道传递给 lz4 进行压缩,最后将结果保存到 my_project.tar.lz4,解压时则可以:
lz4 -d my_project.tar.lz4 | tar -xf -
lz4 的优势与局限性
优势:
- 速度极快:这是 lz4 最显著的特点,无论是压缩还是解压,其速度都远超大多数其他压缩算法,非常适合对延迟敏感的应用。
- 合理的压缩率:虽然压缩率不如 7z 或 xz,但在速度相近的算法中(如 snappy),lz4 通常能提供更好的压缩率。
- 极低的内存占用:解压时需要的内存非常少,通常只需一个数据块的大小,这使得它在资源受限的环境(如嵌入式系统)中表现出色。
- 流式处理:算法设计支持流式数据,可以边接收边压缩/解压,无需等待整个数据加载完毕。
局限性:
- 压缩率有限:与专门为高压缩率设计的算法(如 gzip 的默认级别或 bzip2、xz)相比,lz4 的压缩率较低,对于需要最大限度节省存储空间的场景,可能不是最佳选择。
- 功能相对单一:相比于
zip或tar等工具集,lz4 命令行工具的功能较为基础,不直接支持分卷压缩、加密、高级文件属性保留等。
相关问答FAQs
问题1:lz4 和 gzip 在选择上有什么主要区别?我应该什么时候选择 lz4,什么时候选择 gzip?
解答:lz4 和 gzip 最核心的区别在于速度与压缩率的权衡。
- 选择 lz4 的场景:当压缩和解压速度是首要考虑因素时,应选择 lz4,实时日志压缩、网络数据传输加速、数据库备份的快速压缩、需要频繁解压的缓存文件等,在这些场景下,即使 lz4 的压缩率比 gzip 低一些,其带来的速度优势也足以弥补。
- 选择 gzip 的场景:当存储空间是主要考量,且压缩/解压时间相对不那么敏感时,应选择 gzip,gzip 提供了比 lz4 更高的压缩率,能有效减少磁盘占用或网络传输的数据量,软件包分发、归档不常访问的大文件、对压缩率有明确要求的存储系统等,gzip 的压缩速度也很快,只是比 lz4 慢一些,解压速度则差异不大。
追求“快”选 lz4,追求“省”选 gzip。
问题2:使用 lz4 命令压缩文件后,如何验证压缩文件的完整性?
解答:lz4 命令本身提供了一种简单的校验机制来验证压缩文件的完整性,在解压时,可以使用 -t 或 --test 选项来测试压缩文件是否有效且未损坏,而不会实际解压文件内容。
要测试 my_file.lz4 是否完好,可以运行:
lz4 -t my_file.lz4
如果文件完整无误,命令将不会输出任何信息并正常退出(返回状态码 0),如果文件损坏或格式不正确,lz4 会报错并返回非零状态码。
需要注意的是,-t 选项仅验证压缩文件格式的有效性,并确保其可以被正常解压,它不验证解压后的内容是否与原始文件完全一致(不进行校验和比较),如果需要更严格的校验,可以在压缩时使用 lz4 --content-size(如果支持)选项,或者在解压后使用外部工具(如 md5sum, sha256sum)对原始文件和解压后的文件进行哈希值比对。
