lz4 是一个使用LZ4压缩算法的压缩工具,以极快的压缩和解压速度而闻名。LZ4算法牺牲了部分压缩率来换取极高的速度,特别适合需要快速压缩/解压缩的场景。
# 基本语法
lz4 [选项] [输入文件] [输出文件]
# 压缩语法
lz4 [选项] 源文件 [目标文件.lz4]
# 解压语法
lz4 -d [选项] 源文件.lz4 [目标文件]
unlz4 [选项] 源文件.lz4 [目标文件]
| 选项 | 说明 |
|---|---|
-z, --compress |
压缩(默认操作) |
-d, --decompress |
解压 |
-f, --force |
强制覆盖输出文件 |
-k, --keep |
保留源文件(不删除) |
-# |
压缩级别(1-12,默认为9,1最快压缩,12最高压缩率) |
-v, --verbose |
显示详细信息 |
-q, --quiet |
静默模式,抑制警告 |
-t, --test |
测试压缩文件的完整性 |
-B# |
块大小(4-7,4=64KB,7=4MB) |
--fast |
快速模式(等同于-1) |
-m, --multiple |
多文件输入 |
-l, --list |
列出.lz4文件信息 |
# Ubuntu/Debian
sudo apt install liblz4-tool
# CentOS/RHEL/Fedora
sudo yum install lz4
# 或
sudo dnf install lz4
# Arch Linux
sudo pacman -S lz4
# macOS (使用Homebrew)
brew install lz4
# 验证安装
lz4 --version
# 基本压缩(自动添加.lz4扩展名)
lz4 file.txt
# 压缩后生成file.txt.lz4,删除原文件
# 压缩并保留原文件
lz4 -k data.log
# 指定输出文件名
lz4 input.txt output.lz4
# 显示压缩详情
lz4 -v largefile.dat
# 基本解压
lz4 -d file.txt.lz4
# 解压后得到file.txt,删除file.txt.lz4
# 解压并保留压缩文件
lz4 -dk archive.lz4
# 指定解压后的文件名
lz4 -d compressed.lz4 decompressed.txt
# 使用unlz4命令(等同于lz4 -d)
unlz4 file.lz4
# 测试.lz4文件的完整性
lz4 -t data.lz4
# 测试并显示详细信息
lz4 -tv archive.lz4
# 测试多个文件
lz4 -t *.lz4
# 列出.lz4文件的详细信息
lz4 -l file.lz4
# 输出示例:
# Compressed Uncompressed Ratio Filename
# 10000000 25000000 2.50 file.lz4
# 列出多个文件信息
lz4 -l *.lz4
# 详细列表
lz4 -lv data.lz4
# 最快压缩(速度优先)
lz4 -1 file.txt
lz4 --fast file.txt
# 默认压缩级别(平衡速度与压缩率)
lz4 -9 file.txt
# 最高压缩率(速度较慢)
lz4 -12 file.txt
# 调整块大小(影响压缩率和速度)
lz4 -B4 file.txt # 64KB块(默认)
lz4 -B5 file.txt # 256KB块
lz4 -B6 file.txt # 1MB块
lz4 -B7 file.txt # 4MB块(压缩率最高)
# 批量压缩所有.log文件
for file in *.log; do
lz4 -k "$file"
done
# 批量解压所有.lz4文件
for file in *.lz4; do
lz4 -dk "$file"
done
# 使用find命令批量压缩
find . -name "*.csv" -type f -exec lz4 -k {} \;
# 压缩输出流
tar -cf - directory/ | lz4 > archive.tar.lz4
# 解压输入流
lz4 -dc archive.tar.lz4 | tar -xf -
# 实时压缩日志文件
tail -f application.log | lz4 > compressed.log.lz4
# 网络传输压缩
ssh user@server "lz4 -c largefile.dat" | lz4 -d > local_copy.dat
# 压缩多个文件为一个
tar -cf - file1.txt file2.txt file3.txt | lz4 > files.tar.lz4
# 压缩整个目录
tar -cf - mydir/ | lz4 > mydir.tar.lz4
# 解压并提取
lz4 -dc mydir.tar.lz4 | tar -xf -
虽然tar没有内置的lz4支持,但可以通过管道轻松结合:
# 方法1:分别打包和压缩
tar -cf archive.tar directory/
lz4 archive.tar
# 方法2:使用管道(推荐,无需中间文件)
tar -cf - directory/ | lz4 > archive.tar.lz4
# 方法3:压缩级别和块大小调整
tar -cf - directory/ | lz4 -12 -B7 > archive.tar.lz4
# 方法1:分步解压
lz4 -d archive.tar.lz4
tar -xf archive.tar
# 方法2:使用管道(推荐)
lz4 -dc archive.tar.lz4 | tar -xf -
# 解压到指定目录
lz4 -dc archive.tar.lz4 | tar -xf - -C /target/directory
# 查看.tar.lz4内容
lz4 -dc archive.tar.lz4 | tar -t
| 工具 | 扩展名 | 压缩速度 | 解压速度 | 压缩率 | 内存占用 | 适用场景 |
|---|---|---|---|---|---|---|
| lz4 | .lz4 | 极快 (GB/s) | 极快 (GB/s) | 中等 | 低 | 实时压缩、日志处理、网络传输 |
| gzip | .gz | 快 | 快 | 一般 | 低 | 日常使用、文本文件 |
| bzip2 | .bz2 | 慢 | 慢 | 较高 | 高 | 需要较高压缩率 |
| xz | .xz | 很慢 | 中等 | 最高 | 高 | 长期存储、高压缩率需求 |
| zstd | .zst | 快 | 很快 | 高 | 中等 | 平衡压缩率与速度 |
# 实时压缩日志
logrotate配置:
compress
compresscmd /usr/bin/lz4
compressext .lz4
# 批量压缩旧日志
find /var/log -name "*.log" -mtime +7 -exec lz4 -k {} \;
# 快速压缩MySQL备份
mysqldump -u root -p dbname | lz4 > backup.sql.lz4
# PostgreSQL备份压缩
pg_dump dbname | lz4 > backup.pgsql.lz4
# 压缩后传输
lz4 -c largefile.dat | ssh user@remote "lz4 -d > remote_copy.dat"
# rsync结合lz4
rsync -avz --compress-program=lz4 /src/ user@remote:/dst/
# 传感器数据压缩
sensor_collector | lz4 | data_processor
# 视频帧压缩(快速处理)
ffmpeg -i input.mp4 -f rawvideo - | lz4 > frames.raw.lz4
lz4的优势在于速度极快。在某些场景下,如实时数据压缩、日志轮转、网络传输,压缩速度比压缩率更重要。
# 使用file命令
file data.lz4
# 输出示例:data.lz4: LZ4 compressed data
# 使用lz4命令测试
lz4 -t data.lz4
使用-k选项:lz4 -k file.txt
标准lz4工具不支持多线程压缩,但解压非常快。如果需要多线程压缩,可以考虑使用zstd或pigz等工具。
unlz4 - lz4解压的快捷方式lz4c - lz4的C语言库版本zstd - Facebook开发的Zstandard压缩工具,速度与压缩率平衡gzip - GNU压缩工具,通用压缩pigz - gzip的多线程版本tar - 打包工具,常与压缩工具结合lz4 file.txt 或 tar -cf - dir/ | lz4 > archive.tar.lz4lz4 -d file.lz4 或 lz4 -dc archive.lz4 | tar -xf --k 选项-1 或 --fast 选项-12 和大块尺寸 -B7