Skip to content

Linux 之 tar 命令

一、基础概念区分

操作类型本质常用扩展名
打包合并多个文件为单个文件(体积≥总和).tar
压缩通过算法减小文件体积.gz.bz2.xz
组合操作打包+压缩.tar.gz等复合后缀

📌 注:Linux中打包与压缩独立存在,tar专注打包,压缩需结合其他工具(如gzip)。


二、核心参数解析

模式参数(互斥)

参数作用示例
-c创建打包文件tar -cvf doc.tar docs/
-x解包/解压文件tar -xvf doc.tar
-t查看包内文件列表tar -tvf doc.tar

常用辅助参数

参数作用必须搭配
-f指定文件名(必须放参数末尾)所有操作
-v显示处理过程详情非必需
-C指定解压目录-x
-z调用gzip压缩/解压(.gz-c/-x
-j调用bzip2压缩/解压(.bz2-c/-x
-J调用xz压缩/解压(.xz-c/-x

💡 压缩算法选择建议:

  • 速度优先 → gzip.tar.gz
  • 平衡压缩率 → bzip2.tar.bz2
  • 极致压缩率 → xz.tar.xz,适合大文件)

三、高频场景命令示例

打包压缩

bash
# 打包docs目录并 gzip 压缩 → doc.tar.gz 
tar -czvf doc.tar.gz docs/
 
# 打包file1,file2并bzip2压缩 → files.tar.bz2 
tar -cjvf files.tar.bz2 file1 file2 
 
# 排除指定文件(如.log后缀)
tar -czvf log.tar.gz /var/log/ --exclude='*.log'

解压操作

bash
# 解压到当前目录 
tar -xzvf doc.tar.gz 
 
# 解压到指定目录
# 需要先创建目录才行
mkdir -p /tartget/path/
tar -xvf archive.tar -C /target/path/
 
# 仅解压特定文件(如etc/udev)
tar -xzvf myetc.tar.gz etc/udev

查看与管理

bash
# 查看压缩包内容(不解压)
tar -tvf data.tar.gz
 
# 追加文件到已有压缩包 
tar -rvf doc.tar new_file.txt

四、高级技巧

分卷压缩大文件(适合传输限制场景)

bash
# 压缩后分割为4GB分卷
tar -czvf - big_dir/ | split -b 4G - big_dir.tar.gz.split
 
# 合并分卷并解压
cat big_dir.tar.gz.split* | tar -xzvf -

多核加速压缩(需pigz工具)

bash
# 安装 pigz:apt install pigz 或 yum install pigz 
tar -I pigz -cvf fast_archive.tar.gz large_dir/

保留文件权限与属性

bash
# 备份时保留原始权限(用于系统配置备份)
tar -cpzvf etc_backup.tar.gz /etc/

五、避坑指南

  1. 路径覆盖风险
    解压时默认覆盖同名文件,建议先 -t 查看内容,或用 -k 避免覆盖(部分系统支持)。

  2. 权限问题
    sudo 打包系统文件,否则可能导致解压后权限丢失。

  3. 参数顺序规范
    -f 必须紧跟文件名,错误示例:tar -vfc file.tar dir/ → 正确:tar -cvf file.tar dir/

  4. 大文件处理
    超10GB文件建议用 xz 压缩或分卷,避免内存不足。


附:压缩算法对比速查(参考)

算法压缩速度压缩率适用场景
gzip★★★★★☆日常快速压缩
bzip2★★☆★★★平衡效率与压缩率
xz★☆☆★★★★极限压缩大文件

掌握以上命令组合,可覆盖99%的日常归档与压缩需求。建议实操时结合 tar --help 查看系统特有参数。