18.Linux 文件归档和备份(从零开始学)

📅 2026/7/27 23:23:35
18.Linux 文件归档和备份(从零开始学)
在开启一天的学习的时候先做好快照过程中如果出现意外的报错解决不了的就立即恢复快照作为初学者省时省力不要过于纠结哪里错了浪费时间归档和压缩文件对于创建备份和通过网络传输数据非常有用。用于创建和使用备份存档的最古老和最常用的命令之一是 tar 命令。tar 可以将大量文件集合到一个文件存档中还可以使用 gzipbzip2或xz压缩来压缩存档。1. tar 命令语法2. tar 包管理2.1 创建一个 tar 包# 创建tar包确保用户有权限访问目标文件 [fengkaicentos7 ~ 13:26:34]$ tar -cf etc.tar /etc tar: 从成员名中删除开头的“/” tar: /etc/crypttab无法 open: 权限不够 tar: /etc/grub.d无法 open: 权限不够 tar: /etc/pki/CA/private无法 open: 权限不够 .... # 没有权限读取的文件当然无法打包 # root 用户可以打包所有文件 [fengkaicentos7 ~ 13:26:49]$ su -l root 密码 上一次登录一 7月 27 11:12:36 CST 2026pts/0 上 [rootserver ~ 13:27:13]# tar -cf etc.tar /etc/ tar: 从成员名中删除开头的“/” [rootserver ~ 13:27:28]# ls -l ···· -rw-r--r--. 1 root root 39086080 7月 27 13:27 etc.tar ···· # 注意打包的时候会将文件的第一个字符/剔除掉。解压的时候默认解压到当前位置。 # 再次打包如果存在相同的tar包不会提示是否覆盖 [rootserver ~ 13:27:33]# tar -cf etc.tar /etc/ tar: 从成员名中删除开头的“/” # 通过添加日期确保每天打包的文件名不一致 [rootserver ~ 13:28:28]# tar -cf etc$(date %Y%m%d).tar /etc/ tar: 从成员名中删除开头的“/” [rootserver ~ 13:29:31]# ls -l etc* -rw-r--r--. 1 root root 39086080 7月 27 13:29 etc20260727.tar -rw-r--r--. 1 root root 39086080 7月 27 13:28 etc.tar2.2 查看 tar 包中文件# 查看tar包内容 [rootserver ~ 13:32:56]# tar -t -f etc20260727.tar etc/ etc/mtab etc/fstab etc/crypttab etc/resolv.conf etc/dnf/ etc/dnf/modules.d/ ...... # 配合grep过滤 [rootserver ~ 13:32:56]# tar -t -f etc20260727.tar | grep etc/host etc/host.conf etc/hosts etc/hosts.allow etc/hosts.deny etc/hostname2.3 提取 tar 包中文件[rootserver ~ 21:33:26]# tar -c -f etc-$(date %Y%m%d).tar /etc tar: 从成员名中删除开头的“/” # 提取所有文件 [rootserver ~ 21:30:54]# tar -xf etc-20260727.tar [rootserver ~ 21:33:54]# ls anaconda-ks.cfg etc-20260727.tar test.txt 模板 图片 下载 桌面 etc initial-setup-ks.cfg 公共 视频 文档 音乐 # 查看其中一个子目录 [rootserver ~ 21:31:30]# tree -L 1 /etc/yum /etc/yum ├── fssnap.d ├── pluginconf.d ├── protected.d ├── vars └── version-groups.conf 4 directories, 1 file # 提取部分文件 [rootserver ~ 21:35:45]# tar -t -f etc-20260727.tar | grep etc/host etc/host.conf etc/hosts etc/hosts.allow etc/hosts.deny etc/hostname [rootserver ~ 21:35:59]# tar -xf etc-20260727.tar $(tar -t -f etc-20260727.tar | grep etc/host) [rootserver ~ 21:36:23]# tree etc etc ├── host.conf ├── hostname ├── hosts ├── hosts.allow └── hosts.deny2.4 tar 包中追加文件[rootserver ~ 21:38:09]# ls -l etc/ 总用量 20 -rw-r--r--. 1 root root 9 6月 7 2013 host.conf -rw-r--r--. 1 root root 21 7月 27 21:13 hostname -rw-r--r--. 1 root root 243 7月 27 21:15 hosts -rw-r--r--. 1 root root 370 6月 7 2013 hosts.allow -rw-r--r--. 1 root root 460 6月 7 2013 hosts.deny [rootserver ~ 21:38:17]# tar -cf etc.tar etc/ [rootserver ~ 21:38:47]# ls anaconda-ks.cfg etc.tar test.txt 模板 图片 下载 桌面 etc initial-setup-ks.cfg 公共 视频 文档 音乐 [rootserver ~ 21:38:50]# tar -r -f etc.tar test.txt [rootserver ~ 21:39:32]# tar -tf etc.tar etc/ etc/host.conf etc/hosts etc/hosts.allow etc/hosts.deny etc/hostname test.txt [rootserver ~ 21:39:47]# tar -tf etc.tar | grep test test.txt2.5 删除 tar 包中文件[rootserver ~ 21:39:58]# tar --delete -f etc.tar test.txt [rootserver ~ 21:40:45]# tar -tf etc.tar etc/ etc/host.conf etc/hosts etc/hosts.allow etc/hosts.deny etc/hostname [rootserver ~ 21:40:48]# tar -tf etc.tar | grep test2.6 tar 包压缩管理tar 命令支持多种压缩方法gzip-z, --gzip 文件名通常以.tar.gz结尾。最快最老使用最广泛。bzip2-j, --bzip2 文件名通常以.tar.bz2结尾。压缩后比gzip小没gzip使用广泛。xz-J, --xz 文件名通常以.tar.xz结尾。比较新更好的压缩比。压缩的效果取决于被压缩的对象例如已经压缩的图片或者rpm包压缩效果不明显。# 新建并进入文件 [rootserver ~ 11:12:36]# mkdir tar;cd tar/ # 确保相关压缩工具已经安装了 [rootserver tar 11:05:53]# yum install gzip bzip2 xz 已加载插件fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com 软件包 gzip-1.5-11.el7_9.x86_64 已安装并且是最新版本 软件包 bzip2-1.0.6-13.el7.x86_64 已安装并且是最新版本 软件包 xz-5.2.2-2.el7_9.x86_64 已安装并且是最新版本 无须任何处理 # 普通压缩 [rootserver tar 11:09:37]# time tar -cf etc.tar /etc tar: 从成员名中删除开头的“/” real 0m0.104s user 0m0.018s sys 0m0.086s # gzip压缩 [rootserver tar 11:10:13]# time tar -czf etc.tar.gz /etc tar: 从成员名中删除开头的“/” real 0m1.121s user 0m1.087s sys 0m0.109s # bzip2 压缩 [rootserver tar 11:10:18]# time tar -cjf etc.tar.bz2 /etc tar: 从成员名中删除开头的“/” real 0m2.619s user 0m2.583s sys 0m0.080s # xz 压缩 [rootserver tar 11:10:27]# time tar -cJf etc.tar.xz /etc tar: 从成员名中删除开头的“/” real 0m11.867s user 0m11.749s sys 0m0.311s [rootserver tar 11:10:43]# ls -lh etc.tar* -rw-r--r--. 1 root root 38M 7月 27 11:10 etc.tar -rw-r--r--. 1 root root 11M 7月 27 11:10 etc.tar.bz2 -rw-r--r--. 1 root root 12M 7月 27 11:10 etc.tar.gz -rw-r--r--. 1 root root 8.3M 7月 27 11:10 etc.tar.xz # 查看压缩的 tar 包不需要指定压缩选项 [rootserver tar 11:15:06]# tar -tf etc.tar.gz | grep etc/ho* etc/host.conf etc/hosts etc/hosts.allow etc/hosts.deny etc/hp/ etc/hp/hplip.conf etc/hostname3.一句话总结tar 是 Linux 最主流的归档备份工具依靠 c/t/x/r/--delete 参数分别实现打包、查看包内文件、解压文件、追加文件、删除包内文件的基础归档管理搭配 - z (gzip)、-j (bzip2)、-J (xz) 三种压缩参数可生成对应压缩包三者压缩速度依次变慢、压缩率依次升高解压查看压缩包无需额外填写压缩参数日常备份常结合日期命名 tar 包防止文件覆盖普通用户无权限的系统文件需 root 身份才可完整打包备份。