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 data
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 ~]# 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.gz
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
注意,如果压缩包,使用绝对路径压缩的,则查看压缩包内容时,需要加-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.gz
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]# ls -l
total 12
drwxr-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 8
drwxr-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.gz
data/
data/test/
data/test.txt
例 2,把/root/data/
目录下的test.txt
文件排除掉。
[root@centos7 ~]# tar zcvf /root/backup/data3.tar.gz data --exclude=data/test.txt
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/
[root@centos7 ~]# tar ztf ./backup/data3.tar.gz
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/
(完)