一、tar 命令概述
tar
是 Linux 系统中用于打包和压缩文件的常用命令,全称是 “tape archive”,最初用于磁带备份,现在广泛用于文件归档和分发。- 它可以将多个文件或目录打包成一个文件,同时支持多种压缩格式,是系统管理和文件传输中不可或缺的工具。
- 资料已经分类整理好:
https://pan.quark.cn/s/26d73f7dd8a7
二、tar 命令基本语法
tar [选项] [归档文件名] [文件或目录列表]
核心选项说明(常用选项需熟记,括号内为短选项):
- 归档操作:
-c
(–create):创建新的归档文件-x
(–extract):从归档文件中提取文件-t
(–list):查看归档文件内容列表
- 压缩格式:
-z
(–gzip):使用 gzip 压缩(.tar.gz 或 .tgz)-j
(–bzip2):使用 bzip2 压缩(.tar.bz2)-J
(–xz):使用 xz 压缩(.tar.xz)-Z
(–compress):使用 compress 压缩(.tar.Z,已过时)
- 辅助选项:
-v
(–verbose):显示详细处理过程-f
(–file):指定归档文件名(必须紧跟在选项后)-C
(–directory):切换目录(提取时常用)-p
(–preserve-permissions):保留文件权限-P
(–absolute-names):保留绝对路径(慎用,可能导致安全问题)-h
(–dereference):打包时跟随符号链接指向的实际文件--exclude=PATTERN
:排除指定模式的文件或目录
三、tar 命令常用场景及示例
1. 创建归档文件(不压缩)
# 将目录 documents 打包为 documents.tar
tar -cf documents.tar documents/
# 打包多个文件和目录
tar -cf files.tar file1.txt file2.txt directory1/ directory2/
# 显示详细打包过程
tar -cvf files.tar file1.txt file2.txt
2. 压缩归档文件(常用格式)
-
.tar.gz 格式(gzip 压缩)
# 打包并压缩目录为 archive.tar.gz tar -czf archive.tar.gz directory/ # 压缩时显示详细信息 tar -czvf archive.tar.gz file1 file2
-
.tar.bz2 格式(bzip2 压缩,压缩率更高)
tar -cjf archive.tar.bz2 directory/
-
.tar.xz 格式(xz 压缩,现代高效压缩)
tar -cJf archive.tar.xz directory/
3. 提取归档文件
# 从 archive.tar 提取到当前目录
tar -xf archive.tar
# 从 archive.tar.gz 提取(自动识别压缩格式)
tar -xzf archive.tar.gz
# 提取到指定目录(-C 选项)
tar -xzf archive.tar.gz -C /path/to/extract/
# 提取时显示详细信息
tar -xzvf archive.tar.gz
4. 查看归档文件内容
# 查看 tar 包中的文件列表
tar -tf archive.tar
# 查看压缩包内容(自动识别格式)
tar -tzf archive.tar.gz
5. 增量备份与排除文件
-
排除指定文件或目录
# 打包时排除 .log 文件和 temp 目录 tar -czf backup.tar.gz --exclude="*.log" --exclude="temp/" /data/
-
基于修改时间的增量备份
# 只备份 24 小时内修改过的文件 tar -czf daily_backup.tar.gz --mtime="1 day ago" /data/
6. 保留文件属性
# 打包时保留权限、所有者等属性
tar -cpzf backup.tar.gz --preserve-permissions /etc/
7. 处理符号链接
# 打包时包含符号链接本身(默认行为)
tar -cf links.tar link1 link2
# 打包时跟随符号链接指向的实际文件
tar -chf real_files.tar link1 link2
四、高级用法与技巧
1. 分卷压缩(适用于大文件传输)
# 将大文件分卷为 500MB 每卷(.tar.gz 格式)
tar -czf - directory/ | split -b 500M - part_archive.
# 合并分卷并解压
cat part_archive.* | tar -xzf -
2. 增量备份(仅备份变化的文件)
# 首次全量备份
tar -czf full_backup.tar.gz /data/
# 后续增量备份(使用 --newer 选项)
tar -czf incremental_backup.tar.gz --newer "full_backup.tar.gz" /data/
3. 压缩时排除临时文件
# 使用通配符排除临时文件(如 ~ 结尾、.swp 等)
tar -czf project.tar.gz --exclude="*~" --exclude="*.swp" project/
4. 与其他命令结合使用
# 压缩当前目录下所有 .log 文件并输出到标准输出
find . -name "*.log" | tar -czf - -T - > logs.tar.gz
# 解压并替换已有文件(--overwrite 选项)
tar -xzf new_files.tar.gz --overwrite
五、常见错误与注意事项
-
路径问题:
- 打包时建议使用相对路径,避免解压时覆盖系统文件(如
tar -czf /backup.tar.gz /
是危险操作) - 使用
-C
选项指定解压目录,避免文件散落在当前目录
- 打包时建议使用相对路径,避免解压时覆盖系统文件(如
-
压缩格式选择:
.tar.gz
兼容性最好,适合通用场景.tar.xz
压缩率最高,但压缩/解压速度较慢,适合存储备份.tar.bz2
压缩率介于两者之间,速度适中
-
权限问题:
- 解压 root 打包的文件时可能会生成 root 权限的文件,建议使用
--preserve-permissions
明确权限策略
- 解压 root 打包的文件时可能会生成 root 权限的文件,建议使用
-
安全提示:
- 避免解压不明来源的 tar 包,尤其是包含绝对路径(
-P
选项)的文件 - 压缩前检查文件列表,避免包含敏感信息(如
~/.ssh
等)
- 避免解压不明来源的 tar 包,尤其是包含绝对路径(
六、快速参考表格
操作类型 | 命令示例 | 说明 |
---|---|---|
创建普通归档 | tar -cf archive.tar file1 file2 | 打包文件为 archive.tar |
创建 gzip 归档 | tar -czf archive.tar.gz dir/ | 打包并压缩为 tar.gz 格式 |
提取归档 | tar -xzf archive.tar.gz -C /path | 解压到指定目录 |
查看归档内容 | tar -tzf archive.tar.gz | 列出压缩包中的文件 |
排除文件 | tar -czf backup.tar.gz --exclude="*.log" /data | 打包时排除 .log 文件 |
保留权限 | tar -cpzf etc_backup.tar.gz /etc | 备份时保留文件权限 |
分卷压缩 | `tar -czf - dir/ | split -b 1G - part_` |
通过以上示例和说明,你可以全面掌握 tar
命令的使用方法。在实际应用中,根据需求选择合适的压缩格式和选项,注意路径和权限管理,即可高效完成文件归档和备份任务。如果遇到复杂场景,建议查阅 man tar
获取更多详细选项说明。