以下是 tar 和 xz 的对比说明:
一、基本定位
| 工具 | 类型 | 核心功能 |
|---|
| tar | 归档工具(Archiver) | 将多个文件/文件夹合并成一个文件(归档),不负责压缩 |
| xz | 压缩工具(Compressor) | 将单个文件进行压缩,采用 LZMA/LZMA2 算法,压缩率高 |
二、功能对比
| 对比项 | tar | xz |
|---|
| 主要用途 | 打包(归档) | 压缩 |
| 输入 | 多个文件/目录 | 单个文件 |
| 输出 | .tar 归档包 | .xz 压缩文件 |
| 压缩能力 | ❌ 无压缩 | ✅ 高压缩率 |
| 处理目录 | ✅ 原生支持 | ❌ 需先打包 |
| 速度 | 极快(仅归档) | 较慢(压缩算法复杂) |
| 压缩率 | 无压缩 | 极高(通常比 gzip/bzip2 更高) |
三、常见组合用法
由于 tar 不压缩、xz 不能直接处理目录,两者通常组合使用:
1. 压缩文件夹
# 方式一:分步
tar -cf aa.tar aa
xz -z aa.tar
# 方式二:一步(管道)
tar -cf - aa | xz -z > aa.tar.xz
2. 解压文件夹
# 方式一:分步
xz -d aa.tar.xz
tar -xf aa.tar
# 方式二:一步(管道)
xz -dc aa.tar.xz | tar -xf -
四、压缩算法对比
| 压缩工具 | 算法 | 压缩率 | 速度 | 典型扩展名 |
|---|
| xz | LZMA/LZMA2 | 极高 | 慢 | .xz |
| gzip | DEFLATE | 中 | 快 | .gz |
| bzip2 | BWT | 高 | 中 | .bz2 |
五、总结
| 场景 | 推荐组合 |
|---|
| 追求最小体积 | tar.xz(tar + xz) |
| 追求速度 | tar.gz(tar + gzip) |
| 平衡压缩率与速度 | tar.bz2(tar + bzip2) |
核心记忆点:tar 负责集合,xz 负责缩小,各司其职,组合使用。
压缩与解压文件夹笔记
1. 分步压缩
压缩
tar -cf aa.tar aa # 先将 aa 文件夹打包为 aa.tar
xz -z aa.tar # 再将 aa.tar 压缩为 aa.tar.xz
解压
xz -d aa.tar.xz # 先解压得到 aa.tar
tar -xf aa.tar # 再解包得到 aa 文件夹
2. 一步压缩
使用管道将打包与压缩合并为一步:
tar -cf - trendradar | xz -z > trendradar.tar.xz
3. 一步解压
使用管道将解压与解包合并为一步:
xz -dc trendradar.tar.xz | tar -xf -
以下是 tar 和 xz 命令的常用参数详解,按功能分类整理:
一、tar 命令参数
tar 的命令格式为:tar [操作模式] [辅助选项] [归档文件名] [文件/目录...]
操作模式(必须选一个)
| 参数 | 长格式 | 说明 |
|---|
-c | --create | 创建归档文件(打包) |
-x | --extract | 从归档中提取文件(解包) |
-t | --list | 列出归档文件的内容,不实际解压 |
-r | --append | 将文件追加到归档末尾(仅适用于未压缩的 .tar) |
-u | --update | 仅追加比归档中更新的文件 |
-A | --catenate | 将一个归档追加到另一个归档末尾 |
-d | --diff | 比较归档文件与原文件的差异 |
压缩类型选项
| 参数 | 说明 |
|---|
-z | 通过 gzip 压缩/解压,扩展名通常为 .tar.gz 或 .tgz |
-j | 通过 bzip2 压缩/解压,扩展名通常为 .tar.bz2 |
-J | 通过 xz 压缩/解压,扩展名通常为 .tar.xz |
-a | 根据文件后缀自动选择压缩格式 |
常用辅助选项
| 参数 | 长格式 | 说明 |
|---|
-f | --file | 指定归档文件名(必须紧跟文件名) |
-v | --verbose | 显示详细的处理过程 |
-C | --directory | 解压时切换到指定目录 |
-P | --absolute-names | 保留绝对路径(默认会去掉路径开头的 /) |
-k | --keep-old-files | 解压时不覆盖已存在的文件 |
--keep-newer-files | 不覆盖比归档中更新的文件 |
--exclude | 排除匹配模式的文件 |
--exclude-vcs | 排除版本控制目录(如 .git、.svn 等) |
-h | --dereference | 归档符号链接指向的目标文件,而非链接本身 |
使用示例
# 创建 .tar.xz 压缩包
tar -cJvf archive.tar.xz /path/to/dir
# 解压 .tar.xz 文件到指定目录
tar -xJvf archive.tar.xz -C /target/dir
# 查看压缩包内容
tar -tvf archive.tar.xz
# 排除特定文件打包
tar -czvf backup.tar.gz /home --exclude="*.mp4"
# 从压缩包中提取单个文件
tar -xzvf archive.tar.gz path/to/single/file
二、xz 命令参数
xz 的命令格式为:xz [选项] [文件...]
操作模式
| 参数 | 长格式 | 说明 |
|---|
-z | --compress | 强制压缩(默认操作) |
-d | --decompress | 解压缩 |
-t | --test | 测试压缩文件的完整性,不解压 |
-l | --list | 显示 .xz 文件的信息(压缩率、校验方式等) |
常用选项
| 参数 | 长格式 | 说明 |
|---|
-k | --keep | 压缩/解压后保留源文件(默认会删除源文件) |
-f | --force | 强制覆盖输出文件 |
-c | --stdout | 将结果输出到标准输出,保留源文件 |
-0 ~ -9 | | 设置压缩级别,-6 为默认值,-9 压缩率最高但最慢 |
-e | --extreme | 使用更多 CPU 时间尝试提高压缩比 |
-T | --threads=NUM | 设置并行线程数,-T 0 使用所有 CPU 核心 |
-q | --quiet | 抑制警告信息 |
-v | --verbose | 显示详细信息(可多次使用) |
-h | --help | 显示简洁帮助信息 |
-H | --long-help | 显示更详细的帮助信息 |
内存限制选项
| 参数 | 说明 |
|---|
--memlimit=limit | 设置内存使用限制(如 150MiB) |
--memlimit-compress=limit | 仅限制压缩时的内存使用 |
--memlimit-decompress=limit | 仅限制解压时的内存使用 |
使用示例
# 压缩文件(原文件会被删除)
xz file.txt # 生成 file.txt.xz
# 压缩并保留原文件
xz -k file.txt
# 使用最高压缩级别
xz -9k file.txt
# 解压缩
xz -d file.txt.xz # 或 unxz file.txt.xz
# 解压并保留压缩包
xz -dk file.txt.xz
# 查看压缩包信息
xz -l file.txt.xz
# 多线程压缩(使用所有CPU核心)
xz -T0 -k largefile.log
# 输出到标准输出(可用于管道)
xz -dc archive.tar.xz | tar -xf -
三、tar + xz 组合用法速查
| 操作 | 命令 |
|---|
| 一步压缩 | tar -cJvf archive.tar.xz /path/to/dir |
| 一步解压 | tar -xJvf archive.tar.xz |
| 分步压缩 | tar -cvf archive.tar /path/to/dir && xz -z archive.tar |
| 分步解压 | xz -d archive.tar.xz && tar -xvf archive.tar |
| 管道压缩 | `tar -cJf - /path/to/dir \ | xz -z > archive.tar.xz` |
| 管道解压 | `xz -dc archive.tar.xz \ | tar -xf -` |
提示:tar 的 -J 选项本质上是调用 xz 进行压缩,效果等同于先 tar 打包再 xz 压缩。使用 -J 可简化命令,无需额外安装或调用 xz 命令。