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/
五、避坑指南
路径覆盖风险
解压时默认覆盖同名文件,建议先-t
查看内容,或用-k
避免覆盖(部分系统支持)。权限问题
用sudo
打包系统文件,否则可能导致解压后权限丢失。参数顺序规范
-f
必须紧跟文件名,错误示例:tar -vfc file.tar dir/
→ 正确:tar -cvf file.tar dir/
大文件处理
超10GB文件建议用xz
压缩或分卷,避免内存不足。
附:压缩算法对比速查(参考)
算法 压缩速度 压缩率 适用场景 gzip ★★★ ★★☆ 日常快速压缩 bzip2 ★★☆ ★★★ 平衡效率与压缩率 xz ★☆☆ ★★★★ 极限压缩大文件
掌握以上命令组合,可覆盖99%的日常归档与压缩需求。建议实操时结合 tar --help
查看系统特有参数。