吃透Linux tar 命令打包、备份、压缩一篇搞定文件归档和备份一.tar 命令语法二.tar 包管理1.创建一个 tar 包2.查看 tar 包中文件3.提取 tar 包中文件4.tar 包中追加文件5.删除 tar 包中文件三.tar 包压缩管理文件归档和备份摘要本文详细介绍了 Linux 系统中使用tar命令进行文件归档和备份的方法。内容涵盖tar命令的基本语法、tar 包的创建、查看、提取、追加和删除等管理操作以及使用 gzip、bzip2 和 xz 三种压缩工具对 tar 包进行压缩的实践对比。通过丰富的命令行示例帮助读者掌握高效的文件归档与压缩技能。归档和压缩文件对于创建备份和通过网络传输数据非常有用。用于创建和使用备份存档的最古老和最常用的命令之一是 tar 命令。tar 可以将大量文件集合到一个文件存档中还可以使用 gzipbzip2或xz压缩来压缩存档。一.tar 命令语法二.tar 包管理1.创建一个 tar 包# 创建tar包确保用户有权限访问目标文件[lzserver ~22:03:18]$tar-cfetc.tar /etc/ tar: 从成员名中删除开头的“/” tar: /etc/crypttab无法 open: 权限不够 tar: /etc/grub.d无法 open: 权限不够 tar: /etc/pki/CA/private无法 open: 权限不够...# 没有权限读取的文件当然无法打包# root 用户可以打包所有文件[rootserver ~22:08:15]# tar -cf etc.tar /etctar: 从成员名中删除开头的“/”# 注意打包的时候会将文件的第一个字符/剔除掉。解压的时候默认解压到当前位置。# 再次打包如果存在相同的tar包不会提示是否覆盖[rootserver ~22:10:10]# tar -cf etc.tar /etctar: 从成员名中删除开头的“/”# 通过添加日期确保每天打包的文件名不一致rootserver ~22:10:26]# tar -cf etc-$(date %Y%m%d).tar /etctar: 从成员名中删除开头的“/”[rootserver ~22:11:54]# lsanaconda-ks.cfg etc-20260515.tar etc.tar[rootserver ~22:11:57]# ls -l etc*-rw-r--r--1root root302489605月1522:11 etc-20260515.tar -rw-r--r--1root root302489605月1522:10 etc.tar2.查看 tar 包中文件# 查看tar包内容[rootserver ~22:12:55]# tar -t -f etc-20260515.taretc/ etc/fstab etc/crypttab etc/mtab etc/resolv.conf etc/grub.d/ etc/grub.d/00_header etc/grub.d/01_users etc/grub.d/10_linux...# 配合grep过滤[rootserver ~22:15:26]# tar -t -f etc-20260515.tar |grep etc/hostetc/host.conf etc/hosts etc/hosts.allow etc/hosts.deny etc/hostname3.提取 tar 包中文件# 提取所有文件[rootserver ~22:16:44]# tar -xf etc-20260515.tar# 查看其中一个子目录[rootserver ~22:19:36]# tree -L 1 etc/yumetc/yum ├── fssnap.d ├── pluginconf.d ├── protected.d ├── vars └── version-groups.conf4directories,1file# 提取部分文件[rootserver ~22:19:39]# tar -t -f etc-20260515.tar |grep etc/hostetc/host.conf etc/hosts etc/hosts.allow etc/hosts.deny etc/hostname[rootserver ~14:32:18]# tar -xf etc-20260515.tar $(tar -t -f etc-20260515.tar |grep etc/host)[rootserver ~14:32:28]# tree etcetc ├── host.conf ├──hostname├── hosts ├── hosts.allow └── hosts.deny0directories,5files4.tar 包中追加文件[rootserver ~22:46:07]# mkdir /usr/share/doc/at-3.1.13[rootserver ~22:46:13]# touch /usr/share/doc/at-3.1.13/timespec[rootserver ~22:46:18]# tar -r -f etc-20260515.tar /usr/share/doc/at-3.1.13/timespectar: 从成员名中删除开头的“/”[rootserver ~22:46:45]# tar -tf etc-20260515.tar |grep timespecusr/share/doc/at-3.1.13/timespec5.删除 tar 包中文件[rootserver ~22:47:58]# tar --delete -f etc-20260515.tar usr/share/doc/at-3.1.13/timespec[rootserver ~22:48:59]# tar -tf etc-20260515.tar |grep timespec三.tar 包压缩管理tar 命令支持多种压缩方法gzip-z, --gzip 文件名通常以.tar.gz结尾。最快最老使用最广泛。bzip2-j, --bzip2 文件名通常以.tar.bz2结尾。压缩后比gzip小没gzip使用广泛。xz-J, --xz 文件名通常以.tar.xz结尾。比较新更好的压缩比。压缩的效果取决于被压缩的对象例如已经压缩的图片或者rpm包压缩效果不明显。# 确保相关压缩工具已经安装了[rootserver ~22:49:03]# yum install gzip bzip2 xz已加载插件fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com...# gzip压缩[rootserver ~22:51:34]# time tar -czf etc.tar.gz /etctar: 从成员名中删除开头的“/” real 0m2.279s user 0m1.771s sys 0m0.617s# bzip2 压缩[rootserver ~22:51:54]# time tar -cjf etc.tar.bz2 /etctar: 从成员名中删除开头的“/” real 0m5.186s user 0m4.972s sys 0m0.229s# xz 压缩[rootserver ~22:52:10]# time tar -cJf etc.tar.xz /etctar: 从成员名中删除开头的“/” real 0m22.537s user 0m18.678s sys 0m5.131s[rootserver ~22:52:48]# ls -lh etc.tar.*-rw-r--r--1root root8.8M5月1522:52 etc.tar.bz2 -rw-r--r--1root root 10M5月1522:51 etc.tar.gz -rw-r--r--1root root7.1M5月1522:52 etc.tar.xz# 查看压缩的 tar 包不需要指定压缩选项[rootserver ~22:54:20]# tar -tf etc.tar.gz