CentOS 7 使用 tar 命令打包压缩解压

在 CentOS 7 系统中,对文件或目录备份,一般都会使用tar命令打包压缩解压。下面通过一个例子来了解tar命令的使用。例如,把/root/目录下的data目录,备份到/root/backup/目录下。

一、打包压缩


使用tar命令的zcvf参数,把/root/data/目录打包压缩,备份到/root/backup/目录下,并设置备份文件名为data.tar.gz

  1. [root@centos7 ~]# tar zcvf /root/backup/data.tar.gz /root/data/
  2. tar: Removing leading `/' from member names
  3. /root/data/
  4. /root/data/test/
  5. /root/data/test/a/
  6. /root/data/test/a/b/
  7. /root/data/test/a/b/c/
  8. /root/data/test/a/b/c/d/
  9. /root/data/test/a/b/c/d/e/
  10. /root/data/test/a/b/c/d/e/f/
  11. /root/data/test/a/b/c/d/e/f/g/
  12. /root/data/test.txt
  13. [root@centos7 ~]# ls -l /root/backup/
  14. total 4
  15. -rw-r--r-- 1 root root 291 May 14 10:51 data.tar.gz

注意,虽然上面例子中tar命令执行成功了,但是报了一个错:

  1. tar: Removing leading `/' from member names

报错的原因是,在tar命令中默认使用相对路径,这个相对路径指的是,被压缩的文件或目录,也就是上面例子中的/root/data/目录,应该是一个相对目录。

解决报错有 2 种:

  1. 使用相对路径。首先进入到/root/目录,然后在tar命令中使用相对路径data

    1. [root@centos7 ~]# tar zcvf /root/backup/data.tar.gz data
    2. data/
    3. data/test/
    4. data/test/a/
    5. data/test/a/b/
    6. data/test/a/b/c/
    7. data/test/a/b/c/d/
    8. data/test/a/b/c/d/e/
    9. data/test/a/b/c/d/e/f/
    10. data/test/a/b/c/d/e/f/g/
    11. data/test.txt
    12. [root@centos7 ~]# pwd
    13. /root
  2. 使用绝对路径。在tar命令参数中添加P(大写的)。参数P表示使用绝对路径。

    1. [root@centos7 ~]# tar zcvfP /root/backup/data.tar.gz /root/data/
    2. /root/data/
    3. /root/data/test/
    4. /root/data/test/a/
    5. /root/data/test/a/b/
    6. /root/data/test/a/b/c/
    7. /root/data/test/a/b/c/d/
    8. /root/data/test/a/b/c/d/e/
    9. /root/data/test/a/b/c/d/e/f/
    10. /root/data/test/a/b/c/d/e/f/g/
    11. /root/data/test.txt

可见,通过查看压缩过程,使用相对路径进行压缩,压缩包只保留了data以下的目录;如果使用绝对路径,压缩包保留了完整路径。解压的时候,也会原样恢复路径。

tar命令参数:

参数 描述
-z 使用 gzip 压缩工具进行压缩。
-c 创建一个新的存档。
-v 显示操作过程。
-f 使用存档文件或设备存档。
-P 被压缩的文件或目录,使用绝对路径。
-t 列出压缩文件的内容。
--exclude 排除文件或目录。以绝对路径形式给出,要排除的文件或目录。

二、查看压缩包内容


使用tar命令的ztf参数,查看/root/backup/目录下的data.tar.gz压缩包内容。

  1. [root@centos7 ~]# tar ztf /root/backup/data.tar.gz
  2. data/
  3. data/test/
  4. data/test/a/
  5. data/test/a/b/
  6. data/test/a/b/c/
  7. data/test/a/b/c/d/
  8. data/test/a/b/c/d/e/
  9. data/test/a/b/c/d/e/f/
  10. data/test/a/b/c/d/e/f/g/
  11. data/test.txt

注意,如果压缩包,使用绝对路径压缩的,则查看压缩包内容时,需要加-P参数。否则,会报这样的错误:

  1. tar: Removing leading `/' from member names

下面是正确的:

  1. [root@centos7 ~]# tar ztfP /root/backup/data.tar.gz
  2. /root/data/
  3. /root/data/test/
  4. /root/data/test/a/
  5. /root/data/test/a/b/
  6. /root/data/test/a/b/c/
  7. /root/data/test/a/b/c/d/
  8. /root/data/test/a/b/c/d/e/
  9. /root/data/test/a/b/c/d/e/f/
  10. /root/data/test/a/b/c/d/e/f/g/
  11. /root/data/test.txt

三、解压


1. 解压到当前所在目录。

首先cd进入压缩包所在目录,然后使用tar命令的zxvf参数,解压/root/backup/data.tar.gz文件,到当前所在目录/root/backup/

  1. [root@centos7 backup]# pwd
  2. /root/backup
  3. [root@centos7 backup]# tar zxvf data.tar.gz
  4. data/
  5. data/test/
  6. data/test/a/
  7. data/test/a/b/
  8. data/test/a/b/c/
  9. data/test/a/b/c/d/
  10. data/test/a/b/c/d/e/
  11. data/test/a/b/c/d/e/f/
  12. data/test/a/b/c/d/e/f/g/
  13. data/test.txt
  14. [root@centos7 backup]# ls -l
  15. total 12
  16. drwxr-xr-x 3 root root 4096 Apr 28 18:24 data
  17. -rw-r--r-- 1 root root 291 May 14 11:51 data.tar.gz

同样,在解压的时候,压缩包如果是绝对路径压缩的,则需要在参数中增加-P参数。否则,也会报出上面提到的错误。

  1. [root@centos7 backup]# pwd
  2. /root/backup
  3. [root@centos7 backup]# tar zxvfP data.tar.gz
  4. /root/data/
  5. /root/data/test/
  6. /root/data/test/a/
  7. /root/data/test/a/b/
  8. /root/data/test/a/b/c/
  9. /root/data/test/a/b/c/d/
  10. /root/data/test/a/b/c/d/e/
  11. /root/data/test/a/b/c/d/e/f/
  12. /root/data/test/a/b/c/d/e/f/g/
  13. /root/data/test.txt

2. 解压到指定目录。

在上面,解压的基础上,添加-C参数,把压缩文件的内容,解压到指定目录里。

把压缩文件data.tar.gz解压到指定的/tmp/目录里。

  1. [root@centos7 backup]# tar zxvf data.tar.gz -C /tmp/
  2. data/
  3. data/test/
  4. data/test/a/
  5. data/test/a/b/
  6. data/test/a/b/c/
  7. data/test/a/b/c/d/
  8. data/test/a/b/c/d/e/
  9. data/test/a/b/c/d/e/f/
  10. data/test/a/b/c/d/e/f/g/
  11. data/test.txt
  12. [root@centos7 backup]# ll /tmp/
  13. total 8
  14. drwxr-xr-x 3 root root 4096 Apr 28 18:24 data

四、打包压缩时排除指定目录或文件


使用tar命令打包压缩时,添加--exclude参数,并排除掉不需要的目录或文件。

例 1,把/root/data/目录下的test目录内容排除掉。

  1. [root@centos7 ~]# tar zcvf /root/backup/data3.tar.gz data --exclude=data/test/*
  2. data/
  3. data/test/
  4. data/test.txt
  5. [root@centos7 ~]# tar ztf ./backup/data3.tar.gz
  6. data/
  7. data/test/
  8. data/test.txt

例 2,把/root/data/目录下的test.txt文件排除掉。

  1. [root@centos7 ~]# tar zcvf /root/backup/data3.tar.gz data --exclude=data/test.txt
  2. data/
  3. data/test/
  4. data/test/a/
  5. data/test/a/b/
  6. data/test/a/b/c/
  7. data/test/a/b/c/d/
  8. data/test/a/b/c/d/e/
  9. data/test/a/b/c/d/e/f/
  10. data/test/a/b/c/d/e/f/g/
  11. [root@centos7 ~]# tar ztf ./backup/data3.tar.gz
  12. data/
  13. data/test/
  14. data/test/a/
  15. data/test/a/b/
  16. data/test/a/b/c/
  17. data/test/a/b/c/d/
  18. data/test/a/b/c/d/e/
  19. data/test/a/b/c/d/e/f/
  20. data/test/a/b/c/d/e/f/g/

(完)