尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

lz4 命令行完全指南:掌握 lz4、unlz4、lz4cat 的压缩与解压实战

lz4 命令行完全指南:掌握 lz4、unlz4、lz4cat 的压缩与解压实战 lz4 命令行完全指南掌握 lz4、unlz4、lz4cat 的压缩与解压实战【免费下载链接】lz4Extremely Fast Compression algorithm项目地址: https://gitcode.com/GitHub_Trending/lz/lz4lz4 是基于 liblz4 的极速无损压缩命令行工具本指南以仓库 programs/lz4.1.md 手册页为核心骨架完整讲解 lz4 / unlz4 / lz4cat 三个命令的语法、全部选项参数、多文件模式、基准测试与环境变量并结合 programs/lz4cli.c、programs/lz4io.c、programs/lz4conf.h 等源码剖析每个选项的底层实现。读完本文你将能熟练使用 lz4 完成单文件/多文件/流式压缩、解压、完整性校验、性能基准测试并理解压缩级别、块大小、校验和、字典、线程数等参数如何影响压缩比与速度。命令概览SYNOPSISlz4 的命令行基本形式为lz4 [OPTIONS] [-|INPUT-FILE] OUTPUT-FILE其中-表示标准输入/标准输出。此外lz4 还提供两个别名命令unlz4等价于lz4 -d即解压lz4cat等价于lz4 -dcfm即强制解压并输出到标准输出、允许覆盖、支持多文件输入。这两个别名的行为并非手动拼凑在 programs/lz4cli.c 中exeNameMatch()会检查可执行文件的调用名若名为lz4cat则自动进入解压模式并强制写入 stdout若名为unlz4则自动进入解压模式见 programs/lz4cli.c。因此同样的二进制通过不同链接名调用就会呈现不同默认行为。手册建议在编写需要解压文件的脚本时应始终使用lz4名称并携带明确参数lz4 -d或lz4 -dc而不要依赖unlz4、lz4cat这些名字因为脚本运行环境的调用方式可能变化显式指定参数最稳妥。核心定位极速压缩与原生 .lz4 格式lz4是基于liblz4的 CLI 前端liblz4是一种极快的无损压缩算法实现默认压缩速度通常可达每核心 500 MB/s 以上。通过提高压缩级别参数可以用压缩速度换取更好的压缩比解压虽然是单线程但速度可达数 GB/s通常快到受限于 I/O 而非 CPU。lz4 的原生文件格式即.lz4格式。压缩和解压的速度特性从 lib/lz4.h 与 lib/lz4frame.h 的公开接口设计中可见一斑核心 API 提供LZ4_compress_fast()等极简调用路径而lz4frame层负责.lz4帧的封装。帧与块的二进制布局详见 doc/lz4_Frame_format.md 与 doc/lz4_Block_format.md。lz4 与 gzip 的差异lz4 支持与gzip(1)相似但并不完全相同的命令行语法主要差异如下默认只压缩单个文件多文件需加-mlz4 file1 file2的含义是把 file1 压缩到 file2 中lz4 file.lz4默认执行解压可用-z强制压缩默认保留原始文件可用--rm在完成后删除源文件单文件压缩/解压期间会显示实时统计信息可用-q静默未指定输出时结果发送到隐式输出若 stdout 不是控制台如重定向到管道或文件stdout 成为隐式输出若 stdout 是控制台隐式输出为filename.lz4手册明确告诫脚本中依赖隐式输出是不良实践因为脚本环境可能变化应始终显式指定输出-c保证输出到 stdout而提供输出文件名或使用-m则保证输出到指定名称或filename.lz4。这些默认行为可以通过主动选择的命令修改lz4 -m支持多个输入文件逐个压缩为带.lz4后缀的文件此时进度通知默认关闭可用-v重新开启。该模式更接近 gzip 的命令行行为主要剩余差异是默认保留源文件lz4 -m -d可批量解压多个*.lz4文件可通过--rm选择在压缩或解压成功后删除源文件因此lz4 -m --rm的行为最接近 gzip 默认gzip 会删除源文件而lz4 -m等价于gzip -k保留源文件。.lz4 文件拼接.lz4文件可以直接拼接。lz4会把拼接后的文件当作单个.lz4文件解压。例如lz4 file1 foo.lz4 lz4 file2 foo.lz4之后lz4cat foo.lz4等价于cat file1 file2。这一特性在测试脚本 tests/test-lz4-frame-concatenation.sh 中有专门覆盖其底层依据是lz4frame解码器天然支持连续多个帧的读取。选项通用规则短命令拼接部分选项既可用短命令-x也可用长命令--long-word。短命令可以拼接例如-d -c等价于-dc长命令不能拼接必须用空格明确分隔。多个矛盾命令当同一命令行出现多个相互矛盾的命令时只有最后一条生效。例如lz4 -z file.lz4 -d会以解压模式执行后写的-d覆盖先写的-z。这一后者覆盖前者的语义直接体现在 programs/lz4cli.c 的解析循环中case z将模式设为压缩、case d将模式设为解压解析顺序即最终生效顺序。操作模式选项含义-z--compress压缩。当命令行未指定任何操作模式、命令名未隐含其他模式如unlz4隐含--decompress、输入文件名也未隐含其他模式如.lz4扩展名默认隐含--decompress时压缩是默认操作模式。-z还可用于强制压缩一个已是.lz4的文件-d--decompress--uncompress解压。当输入文件名以.lz4结尾时解压也是默认操作-t--test测试.lz4文件的完整性。解压出的数据被丢弃不创建也不删除任何文件-b#基准测试模式使用#压缩级别--list列出.lz4文件信息查看多帧文件的详细信息可加-v。--list会自动触发-m修饰模式自动推断在源码中有明确实现determineOpMode()检查输入文件名是否以.lz4扩展名结尾是则返回解压模式否则返回压缩模式见 programs/lz4cli.c。当未指定输出文件且模式为om_auto时该函数决定最终走向压缩还是解压见 programs/lz4cli.c。-t的实现也很直观解析到-t后CLI 将输出重定向到空设备并转交解压流程见 programs/lz4cli.c因此测试模式不产生任何文件。操作修饰符压缩级别-#压缩级别取 1 到 12 之间的任意整数数值越大用压缩速度换取更高压缩比12 以上的值按 12 处理。推荐值1快速压缩默认9高压缩。速度/压缩比的取舍随待压缩数据而异但所有级别下解压速度都保持很快。该默认值在 programs/lz4conf.h 中定义为LZ4_CLEVEL_DEFAULT 1并被命令行-#覆盖。超快级别--fast[#]切换到超快压缩级别。数值越大压缩越快但压缩产物越大。若省略#默认取1。该设置会覆盖先前设置的压缩级别同样--fast之后再设置压缩级别也会覆盖它。在源码中--fast把压缩级别编码为负数加速值cLevel -(int)fastLevel见 programs/lz4cli.c负压缩级别在 liblz4 中即代表加速倍数语义。最高压缩--best设置最高压缩级别等价于-12。源码中--best直接映射到LZ4HC_CLEVEL_MAX见 programs/lz4cli.c。多线程-T#、--threads#使用#个线程进行压缩。传0或不传数值时线程数由检测到的 CPU 核心数自动决定。注意多线程能力依赖编译期开关LZ4IO_MULTITHREAD在 programs/lz4conf.h 中 Windows 默认开启利用 Completion Ports其他平台默认关闭需要 pthread 支持并在构建时开启运行时可选线程数上限为LZ4_NBWORKERS_MAX默认 200见 programs/lz4conf.h超出会自动截断见 programs/lz4cli.c若二进制未编译多线程支持却传了-T##1会给出警告提示见 programs/lz4cli.c。面向解压速度优化--favor-decSpeed生成针对解压速度优化的压缩数据。代价是压缩产物略大通常约 0.5%而解压速度可提升 5%–20%具体取决于使用场景。该选项只在很高的压缩级别10下起作用。底层对应LZ4IO_favorDecSpeed(prefs, 1)会开启 HC 压缩器中的解压速度优化路径见 programs/lz4cli.c。字典-D dictionaryName使用字典dictionaryName进行压缩、解压或基准测试。压缩与解压必须使用同一字典才能兼容解压时使用不同字典要么因解压错误而中止要么产生校验和错误。CLI 层通过LZ4IO_setDictionaryFilename()把字典文件名传递给 I/O 层见 programs/lz4io.c 与 programs/lz4cli.c字典加载后供压缩上下文引用。字典压缩的正确用例如下lz4 -D dict file file.lz4 lz4 -D dict -d file.lz4强制覆盖与透传-f--[no-]force该选项有多重效果若目标文件已存在不提示直接覆盖与--decompress结合且 lz4 无法识别源文件类型时将源文件原样复制到标准输出。这使得lz4cat --force可以像cat(1)一样用于未经 lz4 压缩的文件。源码中-f通过LZ4IO_setOverwrite(prefs, 1)打开覆盖见 programs/lz4cli.c而--no-force会将其关闭透传行为由LZ4IO_setPassThrough()控制见 programs/lz4io.clz4cat与-c都会开启它。强制输出到标准输出-c--stdout--to-stdout强制写入标准输出即使 stdout 是控制台。解析到-c时CLI 设置forceStdout1并把输出文件名置为 stdout 标记见 programs/lz4cli.c。反过来如果输出目标是控制台且未加-cCLI 会拒绝执行见 programs/lz4cli.c。多文件-m--multiple多个输入文件。压缩文件名自动追加.lz4后缀该模式还会降低通知级别也可用于列出多个文件。lz4 -m行为等价于gzip -k默认保留源文件。同时传入多个非选项参数时正是multiple_inputs标志把它们收集到输入文件表中见 programs/lz4cli.c。递归目录-r对目录递归操作该模式同时隐式启用-m多文件输入。在 programs/lz4cli.c 中-r设置recursive1并落入case m递归展开目录列表由UTIL_createFileList()完成。块大小-B#块大小取值4-7默认7取值块大小-B464 KB-B5256 KB-B61 MB-B74 MB默认在 programs/lz4io.c 中LZ4IO_setBlockSizeID()用静态表{ 64 KB, 256 KB, 1 MB, 4 MB }完成 ID 到字节数的映射超出[4,7]范围的 ID 返回 0 即无效。默认块大小 ID 由 programs/lz4conf.h 的LZ4_BLOCKSIZEID_DEFAULT 7决定。另外CLI 也接受-B后跟大于 7 的数值如-B32单位 KB 起此时走LZ4IO_setBlockSize()路径把任意字节数归一到最接近的标准块大小见 programs/lz4cli.c 与 programs/lz4io.c。块关联性-BI/-BD-BI生成独立块默认。每个块可独立解压适合随机访问-BD块依赖前序块Linked blocks可提升压缩比在小块上更明显。底层实现是LZ4IO_setBlockMode()设置blockIndependence标志见 programs/lz4io.c。随机访问场景可参考仓库示例 examples/dictionaryRandomAccess.c 中的块定位思想。块校验和-BX生成块校验和默认关闭。对应LZ4IO_setBlockChecksumMode(prefs, 1)见 programs/lz4cli.c 与 programs/lz4io.c。帧校验和--[no-]frame-crc选择帧校验和默认开启。--frame-crc调用LZ4IO_setStreamChecksumMode(prefs, 1)--no-frame-crc关闭见 programs/lz4cli.c。帧校验和位于.lz4帧尾部用于检测整帧完整性。同时关闭校验--no-crc同时禁用帧校验和与块校验和。源码中它同时调用LZ4IO_setStreamChecksumMode(0)与LZ4IO_setBlockChecksumMode(0)见 programs/lz4cli.c。注意这与帧格式规范的关系帧头中的校验标志位随之置零具体字段定义见 doc/lz4_Frame_format.md。内容大小--[no-]content-size在帧头中包含原始大小默认不包含。注意仅当原始大小可确定时才能启用即输入是文件对于 stdin 或管道等未知大小的输入无效。CLI 会在 stdin 场景下给出明确警告见 programs/lz4cli.c。底层通过LZ4IO_setContentSize()控制contentSizeFlag见 programs/lz4io.c。携带内容大小后解压端可通过lz4 --list查看原始大小。稀疏文件--[no-]sparse稀疏模式支持默认在文件上启用、在 stdout 上禁用。稀疏文件能跳过全零块减少磁盘占用适合解压含大量零字节的数据。LZ4IO_setSparseFile()用值2表示强制启用见 programs/lz4io.c--sparse传 2、--no-sparse传 0。稀疏行为有专门测试脚本 tests/test-lz4-sparse.sh 覆盖。旧版格式-l使用 Legacy 格式典型用于 Linux 内核压缩。注意-l与-m--multiple及-r不兼容。Legacy 格式是 lz4 早期帧格式已标记为 deprecated源码中-l会把块大小固定为 8 MB 并走独立的 Legacy 压缩路径见 programs/lz4cli.c 与 programs/lz4cli.c。其他选项选项含义-v--verbose详细模式-q--quiet抑制警告与实时统计指定两次可连错误一并抑制-h-H--help显示帮助/长帮助并退出-V--version显示版本号并退出-k--keep保留源文件默认行为为 xz/lzma 兼容而提供--rm压缩或解压成功后删除源文件--之后的所有参数一律视为文件名用于处理以-开头的文件其中--在源码中通过all_arguments_are_files1实现解析循环随后跳过所有以-开头的参数判断见 programs/lz4cli.c 与 programs/lz4cli.c。-q是递减式通知级别每出现一次-qdisplayLevel减一见 programs/lz4cli.c所以两次-q才压过错误输出级别。-v则递增该级别见 programs/lz4cli.c最终通过LZ4IO_setNotificationLevel()作用于 I/O 层见 programs/lz4io.c。基准测试模式Benchmark-b#以压缩级别#对文件做基准测试-e#基准测试多个压缩级别从b#到e#含两端-i#每个级别最短评测时间秒取值范围1-9默认3。基准模式是独立于压缩/解压的第五种操作模式om_bench解析到-b后直接调用BMK_benchFiles()见 programs/lz4cli.c 与 programs/lz4cli.c。最短评测时间在 programs/bench.c 中由BMK_setNbSeconds()设置并参与循环计时评测结果按每秒处理字节数/压缩比输出。典型用法lz4 -b7 file # 级别 7默认测 3 秒 lz4 -b1 -e12 -i5 file # 扫描级别 1 到 12每级测 5 秒 lz4 -b7 -d file.lz4 # 仅测解压速度-d 触发 decode-only 模式-d与基准模式组合时不会切换模式而是开启BMK_setDecodeOnlyMode(1)只评测解压见 programs/lz4cli.c 与 programs/bench.c。环境变量在某些场景下例如从脚本中调用 lz4却无法向其传递参数可以通过环境变量传递参数。环境变量的优先级高于可执行文件内置默认值但低于命令行中对应的运行时命令。将环境变量设置为全局值时可以强制应用不同于内置默认值的个性化默认值。LZ4_CLEVEL指定 lz4 在命令行未给出压缩级别时使用的默认压缩级别。可执行文件内置默认一般为1。读取逻辑见 programs/lz4cli.c启动时init_cLevel()读取环境变量若为合法的无符号数字则采用否则回退到LZ4_CLEVEL_DEFAULT命令行解析中的-#随后覆盖它。export LZ4_CLEVEL9 lz4 file # 等价于 lz4 -9 fileLZ4_NBWORKERS指定 lz4 压缩时使用的默认线程数。内置默认一般为0即依据本地 CPU 自动确定。该功能仅当 lz4 以多线程支持编译时相关见上文LZ4IO_MULTITHREADworker 数量上限为LZ4_NBWORKERS_MAX默认200。读取逻辑见 programs/lz4cli.c 的init_nbWorkers()命令行-T#会覆盖环境变量。export LZ4_NBWORKERS4 lz4 -T1 file # 命令行优先实际只用 1 线程源码视角lz4 CLI 的完整决策流程把手册内容映射到代码一条lz4命令的执行可概括为五个阶段均在 programs/lz4cli.c 的main()中L393-L896初始化默认值读取环境变量得到初始压缩级别与线程数创建 I/O 偏好结构LZ4IO_prefs_t按 programs/lz4conf.h 的编译期常量设定块大小、覆盖策略等默认值依据调用名预设行为exeNameMatch()识别lz4cat/unlz4/lz4c旧版兼容名分别预设解压模式、透传、stdout 输出或旧版命令语法L433-L445逐参数解析长命令--xxx优先匹配短命令支持拼接并逐个字符switch处理矛盾选项后者生效--之后的参数全部视为文件L448-L709推断缺失信息无输入时回退 stdin无输出时依据determineOpMode()自动生成filename.lz4或去掉.lz4后缀L769-L814stdout 为控制台且未加-c时拒绝执行L825-L832分发执行按最终模式调用LZ4IO_compressFilename/LZ4IO_decompressFilename/ 多文件变体 /LZ4IO_displayCompressedFilesInfo/BMK_benchFilesL842-L887。多线程压缩在分发前还有一道截断逻辑nbWorkers0时用LZ4IO_defaultNbWorkers()按 CPU 核数自动确定超过LZ4_NBWORKERS_MAX则截断到上限见 programs/lz4cli.c。常用实战示例汇总# 基础压缩与解压 lz4 file # 生成 file.lz4默认级别 1 lz4 -9 file # 高压缩比 lz4 --fast5 file # 超快压缩 lz4 -d file.lz4 # 解压 lz4 -dc file.lz4 out # 解压到 stdout # 管道与流式处理 cat big.log | lz4 big.log.lz4 lz4 -d big.log.lz4 | less # 多文件与递归 lz4 -m a b c # 生成 a.lz4 b.lz4 c.lz4 lz4 -m -d *.lz4 # 批量解压 lz4 -r dir/ # 递归压缩目录隐含 -m lz4 -m --rm a b # 压缩后删除源文件最接近 gzip 行为 # 完整性校验与信息查看 lz4 -t file.lz4 # 仅测试完整性无文件产生 lz4 --list file.lz4 # 列出帧信息-v 查看多帧详情 # 帧属性微调 lz4 -B5 -BX --no-crc file # 256KB 块 块校验和、无帧校验和 lz4 -BD --content-size file # 关联块 记录原始大小 lz4 --favor-decSpeed -12 file # 面向解压速度优化需高压缩级别 # 字典压缩 lz4 -D dict file file.lz4 lz4 -D dict -d file.lz4 # 基准测试 lz4 -b7 file lz4 -b1 -e12 -i5 file相关参考与验证命令行行为与默认值的权威依据programs/lz4.1.md、programs/lz4conf.h、programs/lz4cli.c、programs/lz4io.c、programs/bench.c格式规范doc/lz4_Frame_format.md、doc/lz4_Block_format.md测试脚本覆盖了本文绝大多数功能基本行为见 tests/test-lz4-basic.sh、多文件拼接见 tests/test-lz4-multiple.sh 与 tests/test-lz4-frame-concatenation.sh、字典见 tests/test-lz4-dict.sh、稀疏文件见 tests/test-lz4-sparse.sh、旧版多帧见 tests/test-lz4-multiple-legacy.sh构建与安装CLI 的构建入口在 programs/Makefile仓库根目录的 Makefile 与 INSTALL 提供了整体构建与安装说明。以上就是 lz4 命令行工具从语法、选项到源码实现的全景解析。掌握这些参数后你便能在日志压缩、流式传输、内核镜像、数据归档等场景中按需权衡速度、压缩比、内存与校验要求写出确定性强、可移植的脚本。【免费下载链接】lz4Extremely Fast Compression algorithm项目地址: https://gitcode.com/GitHub_Trending/lz/lz4创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表