CentOS 7 使用 tar 命令打包压缩解压
在 CentOS 7 系统中,对文件或目录备份,一般都会使用tar命令打包压缩解压。下面通过一个例子来了解tar命令的使用。例如,把/root/目录下的data目录,备份到/root/backup/目录下。
一、打包压缩
使用tar命令的zcvf参数,把/root/data/目录打包压缩,备份到/root/backup/目录下,并设置备份文件名为data.tar.gz。
[root@centos7 ~]# tar zcvf /root/backup/data.tar.gz /root/data/tar: Removing leading `/' from member names/root/data//root/data/test//root/data/test/a//root/data/test/a/b//root/data/test/a/b/c//root/data/test/a/b/c/d//root/data/test/a/b/c/d/e//root/data/test/a/b/c/d/e/f//root/data/test/a/b/c/d/e/f/g//root/data/test.txt[root@centos7 ~]# ls -l /root/backup/total 4-rw-r--r-- 1 root root 291 May 14 10:51 data.tar.gz
注意,虽然上面例子中tar命令执行成功了,但是报了一个错:
tar: Removing leading `/' from member names
报错的原因是,在tar命令中默认使用相对路径,这个相对路径指的是,被压缩的文件或目录,也就是上面例子中的/root/data/目录,应该是一个相对目录。
解决报错有 2 种:
使用相对路径。首先进入到
/root/目录,然后在tar命令中使用相对路径data。[root@centos7 ~]# tar zcvf /root/backup/data.tar.gz datadata/data/test/data/test/a/data/test/a/b/data/test/a/b/c/data/test/a/b/c/d/data/test/a/b/c/d/e/data/test/a/b/c/d/e/f/data/test/a/b/c/d/e/f/g/data/test.txt[root@centos7 ~]# pwd/root
使用绝对路径。在
tar命令参数中添加P(大写的)。参数P表示使用绝对路径。[root@centos7 ~]# tar zcvfP /root/backup/data.tar.gz /root/data//root/data//root/data/test//root/data/test/a//root/data/test/a/b//root/data/test/a/b/c//root/data/test/a/b/c/d//root/data/test/a/b/c/d/e//root/data/test/a/b/c/d/e/f//root/data/test/a/b/c/d/e/f/g//root/data/test.txt
可见,通过查看压缩过程,使用相对路径进行压缩,压缩包只保留了data以下的目录;如果使用绝对路径,压缩包保留了完整路径。解压的时候,也会原样恢复路径。
tar命令参数:
| 参数 | 描述 |
|---|---|
-z |
使用 gzip 压缩工具进行压缩。 |
-c |
创建一个新的存档。 |
-v |
显示操作过程。 |
-f |
使用存档文件或设备存档。 |
-P |
被压缩的文件或目录,使用绝对路径。 |
-t |
列出压缩文件的内容。 |
--exclude |
排除文件或目录。以绝对路径形式给出,要排除的文件或目录。 |
二、查看压缩包内容
使用tar命令的ztf参数,查看/root/backup/目录下的data.tar.gz压缩包内容。
[root@centos7 ~]# tar ztf /root/backup/data.tar.gzdata/data/test/data/test/a/data/test/a/b/data/test/a/b/c/data/test/a/b/c/d/data/test/a/b/c/d/e/data/test/a/b/c/d/e/f/data/test/a/b/c/d/e/f/g/data/test.txt
注意,如果压缩包,使用绝对路径压缩的,则查看压缩包内容时,需要加-P参数。否则,会报这样的错误:
tar: Removing leading `/' from member names
下面是正确的:
[root@centos7 ~]# tar ztfP /root/backup/data.tar.gz/root/data//root/data/test//root/data/test/a//root/data/test/a/b//root/data/test/a/b/c//root/data/test/a/b/c/d//root/data/test/a/b/c/d/e//root/data/test/a/b/c/d/e/f//root/data/test/a/b/c/d/e/f/g//root/data/test.txt
三、解压
1. 解压到当前所在目录。
首先cd进入压缩包所在目录,然后使用tar命令的zxvf参数,解压/root/backup/data.tar.gz文件,到当前所在目录/root/backup/。
[root@centos7 backup]# pwd/root/backup[root@centos7 backup]# tar zxvf data.tar.gzdata/data/test/data/test/a/data/test/a/b/data/test/a/b/c/data/test/a/b/c/d/data/test/a/b/c/d/e/data/test/a/b/c/d/e/f/data/test/a/b/c/d/e/f/g/data/test.txt[root@centos7 backup]# ls -ltotal 12drwxr-xr-x 3 root root 4096 Apr 28 18:24 data-rw-r--r-- 1 root root 291 May 14 11:51 data.tar.gz
同样,在解压的时候,压缩包如果是绝对路径压缩的,则需要在参数中增加-P参数。否则,也会报出上面提到的错误。
[root@centos7 backup]# pwd/root/backup[root@centos7 backup]# tar zxvfP data.tar.gz/root/data//root/data/test//root/data/test/a//root/data/test/a/b//root/data/test/a/b/c//root/data/test/a/b/c/d//root/data/test/a/b/c/d/e//root/data/test/a/b/c/d/e/f//root/data/test/a/b/c/d/e/f/g//root/data/test.txt
2. 解压到指定目录。
在上面,解压的基础上,添加-C参数,把压缩文件的内容,解压到指定目录里。
把压缩文件data.tar.gz解压到指定的/tmp/目录里。
[root@centos7 backup]# tar zxvf data.tar.gz -C /tmp/data/data/test/data/test/a/data/test/a/b/data/test/a/b/c/data/test/a/b/c/d/data/test/a/b/c/d/e/data/test/a/b/c/d/e/f/data/test/a/b/c/d/e/f/g/data/test.txt[root@centos7 backup]# ll /tmp/total 8drwxr-xr-x 3 root root 4096 Apr 28 18:24 data
四、打包压缩时排除指定目录或文件
使用tar命令打包压缩时,添加--exclude参数,并排除掉不需要的目录或文件。
例 1,把/root/data/目录下的test目录内容排除掉。
[root@centos7 ~]# tar zcvf /root/backup/data3.tar.gz data --exclude=data/test/*data/data/test/data/test.txt[root@centos7 ~]# tar ztf ./backup/data3.tar.gzdata/data/test/data/test.txt
例 2,把/root/data/目录下的test.txt文件排除掉。
[root@centos7 ~]# tar zcvf /root/backup/data3.tar.gz data --exclude=data/test.txtdata/data/test/data/test/a/data/test/a/b/data/test/a/b/c/data/test/a/b/c/d/data/test/a/b/c/d/e/data/test/a/b/c/d/e/f/data/test/a/b/c/d/e/f/g/[root@centos7 ~]# tar ztf ./backup/data3.tar.gzdata/data/test/data/test/a/data/test/a/b/data/test/a/b/c/data/test/a/b/c/d/data/test/a/b/c/d/e/data/test/a/b/c/d/e/f/data/test/a/b/c/d/e/f/g/
(完)