Linux命令-xz(高压缩比压缩工具)
- 🔰 命令简介
- 📖 语法格式
- ⚙️ 常用选项
- 💡 实战示例
- 1. 基本压缩与解压
- 2. 不同压缩级别
- 3. 配合 tar 使用(.tar.xz 格式)
- 4. 标准输入输出(管道操作)
- 5. 多线程压缩与内存控制
- 6. 批量压缩/解压
- 7. 实用技巧
- ⚠️ 注意事项
- 📚 相关命令
- 📝 总结
快速参考:xz是基于 LZMA2 算法的高压缩比压缩工具,压缩率远超 gzip 和 bzip2,广泛用于源码包分发(.tar.xz)和系统日志压缩。
🔰 命令简介
xz使用 LZMA2(Lempel-Ziv-Markov chain Algorithm)压缩算法,提供业界领先的压缩比。虽然压缩速度较慢,但解压速度尚可,适合需要长期存储或网络传输的场景。
💡格式说明:
xz生成.xz后缀文件。tar命令通过-J(大写)选项支持.tar.xz格式。
三种压缩工具对比:
| 工具 | 后缀 | 算法 | 压缩比 | 压缩速度 | 解压速度 |
|---|---|---|---|---|---|
gzip | .gz | DEFLATE | 中等 | 快 | 快 |
bzip2 | .bz2 | Burrows-Wheeler | 较高 | 较慢 | 慢 |
xz | .xz | LZMA2 | 最高 | 慢 | 中等 |
📖 语法格式
xz[选项][文件...]# 压缩文件(默认删除原文件)xz 文件名# 解压文件xz-d文件名.xz# 或unxz 文件名.xz# 保留原文件的压缩xz-k文件名⚙️ 常用选项
| 选项 | 说明 |
|---|---|
-z | 压缩模式(默认) |
-d/--decompress | 解压模式 |
-k/--keep | 保留原文件(不删除) |
-t/--test | 测试压缩文件完整性 |
-l/--list | 显示压缩文件信息 |
-0~-9 | 压缩级别:0=最快,6=默认,9=最优 |
-e/--extreme | 极限压缩模式(更慢但压缩率更高) |
-T N/--threads=N | 使用 N 个线程并行压缩 |
-T 0 | 使用所有可用 CPU 核心 |
-c/--stdout | 输出到标准输出(不修改文件) |
-f/--force | 强制覆盖已有文件 |
-q/--quiet | 抑制警告信息 |
-v/--verbose | 显示详细信息 |
--memlimit=值 | 限制内存使用量 |
-s/--suffix=后缀 | 指定压缩文件后缀(默认 .xz) |
💡 实战示例
1. 基本压缩与解压
# 压缩单个文件(原文件被删除,生成 file.txt.xz)xz file.txt# 解压文件(.xz 文件被删除)xz-dfile.txt.xz# 等效命令unxz file.txt.xz# 压缩并保留原文件xz-klarge_file.log# 解压并保留压缩文件xz-d-karchive.tar.xz# 测试压缩文件完整性xz-tbackup.tar.xz# 显示压缩文件信息xz-larchive.tar.xz# 输出示例:# Strms Blocks Compressed Uncompressed Ratio Check Filename# 1 1 12.5 MiB 45.3 MiB 0.276 CRC64 archive.tar.xz2. 不同压缩级别
# 最快压缩(压缩比最低)xz-0data.csv# 默认压缩级别(均衡)xz-6data.csv# 最高压缩级别xz-9data.csv# 极限压缩模式(比 -9 更极致)xz-9edata.csv# 多线程极限压缩xz-9e-T4large_database.sql3. 配合 tar 使用(.tar.xz 格式)
# 创建 .tar.xz 压缩包(推荐方式)tar-cJfarchive.tar.xz /path/to/directory/# -J 调用 xz 压缩# 解压 .tar.xz 文件tar-xJfarchive.tar.xz# 列出 .tar.xz 内容不解压tar-tJfarchive.tar.xz# 使用 xz 多线程配合 tartar-cf- /big/dir/|xz-9e-T4>backup.tar.xz# 从 .tar.xz 中提取单个文件tar-xJfarchive.tar.xz path/to/specific/file4. 标准输入输出(管道操作)
# 压缩 stdin 并保存catlargefile.txt|xz>largefile.txt.xz# 从 stdin 解压xz-d<largefile.txt.xz>largefile.txt# 压缩 MySQL 数据库备份并输出到文件mysqldump-uroot-pdatabase_name|xz-9>backup.sql.xz# 解压并导入数据库xz-dcbackup.sql.xz|mysql-uroot-pdatabase_name# 压缩日志文件流tail-f/var/log/syslog|xz-c>syslog_live.xz5. 多线程压缩与内存控制
# 使用 4 个线程并行压缩xz-9-T4huge_file.log# 使用所有 CPU 核心xz-9-T0bigdata.csv# 限制内存使用(压缩大文件时防止 OOM)xz-9--memlimit=512MiB large_file.tar# 限制解压内存使用xz-d--memlimit=256MiB compressed.xz6. 批量压缩/解压
# 批量压缩目录下所有 .log 文件forfin*.log;doxz-9"$f"done# 批量解压所有 .xz 文件forfin*.xz;dounxz"$f"done# 使用 find 批量压缩find/var/log-name'*.log'-mtime+30-execxz-9{}\;# 批量解压并验证完整性forfin*.tar.xz;doxz-t"$f"&&echo"$f: OK"||echo"$f: CORRUPT"done7. 实用技巧
# 查看压缩前后大小对比xz-vfile.txt2>&1|grep'%'# 压缩到指定目录xz-cfile.txt>/backup/file.txt.xz# 零压缩(仅存储)xz-0file.txt# 解压到标准输出查看(不产生文件)xz-dcarchive.tar.xz|tartf -# 给压缩文件添加 .xz 以外的后缀xz-z--suffix=.lzma file.txt⚠️ 注意事项
⚠️操作注意:以下场景需要特别留意。
# 注意:xz 默认删除原文件xz important_file.txt# 原文件 important_file.txt 被删除# 解决:使用 -k 保留原文件xz-kimportant_file.txt# 注意:压缩大文件时内存占用高xz-910GB_file.bin# LZMA2 编码器默认使用大量内存# 解决:使用 --memlimit 限制内存xz-9--memlimit=512MiB 10GB_file.bin# 注意:管道中压缩无法使用 -kcatfile|xz>file.xz# 正确xz-cfile>file.xz# 推荐,保留原文件💡选择建议:
- 日常快速压缩:优先
gzip(速度快)- 源码分发/长期归档:使用
xz(压缩比最高)- 中等需求:
bzip2是折中选择- 多文件归档:始终配合
tar使用(tar -cJf)- 已有 .gz 包转 .xz:使用
znew命令
📚 相关命令
| 命令 | 关系与说明 |
|---|---|
unxz | xz 解压模式(等同xz -d) |
xzcat | 解压到 stdout(等同xz -dc) |
xzless/xzmore | 分页查看压缩文件内容 |
xzgrep | 在压缩文件中搜索文本 |
gzip | GNU 压缩工具(速度优先) |
bzip2 | Burrows-Wheeler 压缩(平衡) |
zstd | 现代高性能压缩工具(速度+压缩比) |
tar | 归档工具(-J 选项使用 xz) |
znew | 将 .Z/.gz 转换为 .xz 格式 |
📝 总结
xz是 Linux 系统中压缩比最高的通用压缩工具,.tar.xz 是 Linux 源码包的标准分发格式。虽然压缩速度较慢,但凭借出色的压缩比和可接受的解压速度,非常适合软件分发和长期归档场景。
💡运维建议:日志归档使用
xz -9最大化空间节省;生产环境使用-T N多线程加速;大文件压缩时用--memlimit避免 OOM。日常快速压缩场景优先使用gzip。