
tar(tape archive)是Linux/Unix系统中最核心的归档工具,用于将多个文件和目录打包成单个归档文件。tar本身不进行压缩,但通常与gzip、bzip2、xz等压缩工具结合使用,生成常见的.tar.gz、.tar.bz2、.tar.xz等压缩包格式。
作为系统管理的必备工具,tar广泛应用于备份数据、软件分发、系统迁移等场景。它能够保留文件权限、所有权、时间戳等元数据,支持增量备份、排除模式、远程传输等高级功能。掌握tar是每个Linux用户必须熟练的技能。
1. 基本语法
| 命令 | 说明 |
|---|
tar -cf archive.tar files/ | |
tar -xf archive.tar | |
tar -tf archive.tar | |
tar -rf archive.tar file.txt | |
tar --delete -f archive.tar file.txt | |
2. 创建归档
| 命令 | 说明 |
|---|
tar -cf backup.tar /etc /var/www | |
tar -cf project.tar project/ | |
tar -cvf project.tar project/ | |
tar -cf archive.tar --files-from=filelist.txt | |
tar -cf archive.tar --exclude="*.log" app/ | |
tar -cf archive.tar --exclude-from=exclude.txt app/ | |
3. 解压归档
| 命令 | 说明 |
|---|
tar -xf archive.tar | |
tar -xvf archive.tar | |
tar -xf archive.tar -C /tmp/restore | |
tar -xf archive.tar path/in/archive.txt | |
tar -xf archive.tar "dir/*" | |
tar -xf archive.tar --strip-components=1 | |
tar -xf archive.tar --keep-old-files | |
tar -xf archive.tar --skip-old-files | |
4. 查看与检查
| 命令 | 说明 |
|---|
tar -tf archive.tar | |
tar -tvf archive.tar | |
tar -tf archive.tar | head | |
tar -tf archive.tar | grep "nginx" | |
tar --compare -f archive.tar | |
5. 压缩格式
| 命令 | 说明 |
|---|
tar -czf backup.tar.gz /data | |
tar -xzf backup.tar.gz | |
tar -cjf backup.tar.bz2 /data | |
tar -xjf backup.tar.bz2 | |
tar -cJf backup.tar.xz /data | |
tar -xJf backup.tar.xz | |
压缩率对比(通常):.tar.xz > .tar.bz2 > .tar.gz,速度相反。
6. 保留元数据
| 命令 | 说明 |
|---|
tar -cpf system.tar /etc /var | |
tar -xpf rootfs.tar | |
tar --numeric-owner -cpf backup.tar /srv | |
tar --same-owner -xpf backup.tar | |
tar --atime-preserve=system -cf backup.tar /data | |
7. 增量备份
使用snapshot文件实现增量备份:
| 命令 | 说明 |
|---|
tar --listed-incremental=snapshot.snar -cf full.tar /home | |
tar --listed-incremental=snapshot.snar -cf inc-1.tar /home | |
tar --listed-incremental=snapshot.snar -cf inc-2.tar /home | |
tar -tf inc-1.tar | |
tar -xf full.tar -C /restore | |
tar -xf inc-1.tar -C /restore | |
tar -xf inc-2.tar -C /restore | |
8. 排除模式
| 命令 | 说明 |
|---|
tar -cf app.tar app/ --exclude="*.tmp" | |
tar -cf app.tar app/ --exclude="cache/*" | |
tar -cf app.tar app/ --exclude-vcs | |
tar -cf app.tar app/ --exclude-from=exclude.txt | |
tar -czf logs.tar.gz /var/log --exclude="*.gz" | |
9. 远程传输
通过SSH管道实现远程归档传输:
| 命令 | 说明 |
|---|
tar -czf - /data | ssh user@host "cat > backup.tar.gz" | |
ssh user@host "tar -czf - /data" | tar -xzf - -C /local | |
tar -cf - /data | ssh user@host "tar -xf - -C /restore" | |
tar -czf - /data | ssh user@host "gzip -d | tar -xf -" | |
10. 实用组合模式
| 命令 | 说明 |
|---|
tar -czf backup-$(date +%Y%m%d).tar.gz /home/user | |
find /var/log -name "*.log" | xargs tar -czf logs.tar.gz | |
tar -czf - directory/ | split -b 100M - backup.tar.gz. | |
cat backup.tar.gz.* | tar -xzf - | |
tar -czf - directory/ | openssl enc -aes256 -out backup.tar.gz.enc | |
openssl enc -aes256 -d -in backup.tar.gz.enc | tar -xzf - | |
11. 常用选项速查
| 选项 | 完整名称 | 说明 |
|---|
-c | | |
-x | | |
-t | | |
-f | | |
-v | | |
-z | | |
-j | | |
-J | | |
-C | | |
-p | | |
-P | | |
-r | | |
--delete | | |
--exclude | | |
--exclude-from | | |
--listed-incremental | | |
--strip-components | | |
12. 故障排查
| 问题 | 解决方法 |
|---|
| tar: Cannot open: Permission denied | |
| tar: Unexpected EOF in archive | 归档文件损坏或不完整;尝试使用--ignore-zeros |
| tar: Error exit delayed from previous errors | |
| 解压后权限不对 | 使用-p选项保留权限;用--numeric-owner保持UID/GID |
| 解压到错误目录 | |
| 压缩包很大,解压慢 | 使用更快的压缩格式(如gzip而非xz);考虑不解压直接查看 |
| 符号链接解压后变成普通文件 | |
| tar: Removing leading '/' from member names | tar默认移除绝对路径开头的/,使用-P保留(危险) |
温馨提示: 创建归档时建议始终使用-v选项查看操作进度;解压前先用-t查看内容,避免覆盖重要文件。对于系统备份,使用-p保留权限;跨系统恢复时使用--numeric-owner避免UID/GID映射问题。压缩格式选择上,gzip速度最快适合日常使用,xz压缩率最高适合归档存储,bzip2介于两者之间。使用--exclude排除日志、缓存等临时文件可以显著减小备份体积。
关注公众号(haopython),请回复: LLTTAR