Linux lz4命令详解

lz4命令 - 基于LZ4算法的极速压缩工具,以极高的压缩和解压速度著称,适合实时数据压缩

命令简介

lz4 是一个使用LZ4压缩算法的压缩工具,以极快的压缩和解压速度而闻名。LZ4算法牺牲了部分压缩率来换取极高的速度,特别适合需要快速压缩/解压缩的场景。

特点总结: 速度极快,压缩率中等,内存占用低
  • 文件扩展名: .lz4
  • 压缩速度: 极快(通常可达GB/s级别)
  • 解压速度: 极快(通常比压缩速度更快)
  • 压缩率: 中等(不如xz、bzip2)
  • 内存占用: 较低
  • 适用场景: 实时压缩、网络传输、日志压缩、数据库备份

命令语法

# 基本语法
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命令结合使用

虽然tar没有内置的lz4支持,但可以通过管道轻松结合:

创建.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
解压.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 很快 中等 平衡压缩率与速度
性能提示: lz4的解压速度通常比压缩速度更快,这是其算法的特点

实际应用场景

日志文件压缩
# 实时压缩日志
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

常见问题解答

Q: lz4压缩率不高,为什么还要使用?

lz4的优势在于速度极快。在某些场景下,如实时数据压缩、日志轮转、网络传输,压缩速度比压缩率更重要。

Q: 如何判断文件是否是lz4压缩格式?
# 使用file命令
file data.lz4

# 输出示例:data.lz4: LZ4 compressed data

# 使用lz4命令测试
lz4 -t data.lz4
Q: lz4默认删除源文件,如何保留?

使用-k选项:lz4 -k file.txt

Q: lz4支持多线程吗?

标准lz4工具不支持多线程压缩,但解压非常快。如果需要多线程压缩,可以考虑使用zstdpigz等工具。

相关命令

  • unlz4 - lz4解压的快捷方式
  • lz4c - lz4的C语言库版本
  • zstd - Facebook开发的Zstandard压缩工具,速度与压缩率平衡
  • gzip - GNU压缩工具,通用压缩
  • pigz - gzip的多线程版本
  • tar - 打包工具,常与压缩工具结合
命令总结
  • 压缩: lz4 file.txttar -cf - dir/ | lz4 > archive.tar.lz4
  • 解压: lz4 -d file.lz4lz4 -dc archive.lz4 | tar -xf -
  • 保留源文件: 使用 -k 选项
  • 速度优先: 使用 -1--fast 选项
  • 压缩率优先: 使用 -12 和大块尺寸 -B7
  • 最佳适用场景: 需要极高速度的实时压缩、日志处理、网络传输