小强哥博客

小强哥,小强哥博客,技术大咖

Linux 中 17 个 tar 命令实用示例

本文将介绍 tar 的 17 个实用示例。

tar 命令语法如下:# tar <选项> <文件>

下面列举 tar 命令中一些常用的选项:

-c :建立打包文件,可搭配 -v 来察看过程中被打包的档名(filename)
-t :察看打包文件的内容含有哪些档名,重点在察看『档名』就是了;
-x :解打包或解压缩的功能,可以搭配 -C (大写) 在特定目录解开
特别留意的是, -c, -t, -x 不可同时出现在一串指令列中。
-z :透过 gzip
的支持进行压缩/解压缩:此时档名最好为 *.tar.gz
-j :透过 bzip2 的支持进行压缩/解压缩:此时档名最好为 *.tar.bz2
-J :透过 xz
的支持进行压缩/解压缩:此时档名最好为 *.tar.xz
特别留意, -z, -j, -J 不可以同时出现在一串指令列中
-v
:在压缩/解压缩的过程中,将正在处理的文件名显示出来!
-f filename:-f 后面要立刻接要被处理的档名!建议 -f 单独写一个选项啰!(比较不会忘记)
-C 目录
:这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。
其他后续练习会使用到的选项介绍:
-p(小写) :保留备份数据的原本权限与属性,常用于备份(-c)重要的配置文件
-P(大写) :保留绝对路径,亦即允许备份数据中含有根目录

示例 1:创建一个 tar 归档文件

现在来创建一个 tar 文件,将/home/zhaoqiang/mydata文件打包进去。

[zhaoqiang@fedora ~]$ tar -czvf mydata.tar.gz mydata

以上命令会在当前目录创建一个名为mydata.tar.gz的 tar.gz 文件,内含/home/zhaoqiang/mydata文件。

其中,-c 选项表示要创建 tar 文件,-v 选项用于输出 tar 的详细过程到屏幕上,-f 选项则是指定归档文件名称,-z表示使用gzip压缩。

[zhaoqiang@fedora ~]$ ll mydata.tar.gz 

-rw-rw-r-- 1 zhaoqiang zhaoqiang 4770 6月  11 13:56 mydata.tar.gz

[zhaoqiang@fedora ~]$ 

示例 2:列出归档文件中的内容

在 tar 命令中使用 –t 选项可以不用释放其中的文件就可以快速列出文件中包含的内容。

[zhaoqiang@fedora ~]$ tar -tvf mydata.tar.gz 
-rw-r--r-- zhaoqiang/zhaoqiang 8503 2018-03-12 14:40 mydata
[zhaoqiang@fedora ~]$ 

列出 tar 文件中的指定的文件和目录。

示例 3:追加文件到归档(tar)文件中

-r 选项用于向已有的 tar 文件中追加文件。下面来将data1文件添加到 data.tar 中。

[zhaoqiang@fedora test]$ tar -rvf data.tar data2 
data2
[zhaoqiang@fedora test]$ tar -tvf data.tar 
-rw-rw-r-- zhaoqiang/zhaoqiang 0 2018-06-11 14:29 data1
-rw-rw-r-- zhaoqiang/zhaoqiang 0 2018-06-11 14:30 data2
[zhaoqiang@fedora test]$ 

注:在压缩过的 tar 文件中无法进行追加文件操作。在做这测试用我发现一个小问题,tar.gz格式文件是不能追加的,如下,

[zhaoqiang@fedora test]$ tar -czvf data.tar.gz data1  
data1
[zhaoqiang@fedora test]$ tar -tvf data.tar.gz 
-rw-rw-r-- zhaoqiang/zhaoqiang 0 2018-06-11 14:29 data1
[zhaoqiang@fedora test]$ tar -rvf data.tar.gz data2
tar: 无法更新压缩归档文件
tar: Error is not recoverable: exiting now
[zhaoqiang@fedora test]$ 

示例 4:从 tar 文件中释放文件以及目录

-x 选项用于释放出 tar 文件中的文件和目录。下面来释放上边创建的 tar 文件中的内容。

[zhaoqiang@fedora test]$ ll
总用量 4
-rw-rw-r-- 1 zhaoqiang zhaoqiang   0 6月  11 14:30 data2
-rw-rw-r-- 1 zhaoqiang zhaoqiang 117 6月  11 14:36 data.tar.gz
[zhaoqiang@fedora test]$ tar -xvf data.tar.gz 
data1
[zhaoqiang@fedora test]$ ll
总用量 4
-rw-rw-r-- 1 zhaoqiang zhaoqiang   0 6月  11 14:29 data1
-rw-rw-r-- 1 zhaoqiang zhaoqiang   0 6月  11 14:30 data2
-rw-rw-r-- 1 zhaoqiang zhaoqiang 117 6月  11 14:36 data.tar.gz
[zhaoqiang@fedora test]$ 

这个命令会在当前目录中释放出data.tar.gz文件中的内容。

示例 5:释放 tar 文件到指定目录

假如你想要释放 tar 文件中的内容到指定的文件夹或者目录,使用 -C 选项后边加上指定的文件的路径。

[zhaoqiang@fedora test]$ tar -xvf data.tar.gz -C /home/zhaoqiang/test/mytest/
data1
[zhaoqiang@fedora test]$ ll /home/zhaoqiang/test/mytest/
总用量 0
-rw-rw-r-- 1 zhaoqiang zhaoqiang 0 6月  11 14:29 data1
[zhaoqiang@fedora test]$ 

示例 6:释放 tar 文件中的指定文件或目录

假设你只要释放 tar 文件中的 anaconda-ks.cfg 到 /tmp 目录。

语法如下:

# tar –xvf {tar-file } {file-to-be-extracted } -C {path-where-to-extract} 
[root@linuxtechi tmp]# tar -xvf /root/myarchive.tar root/anaconda-ks.cfg -C /tmp/ root/anaconda-ks.cfg
[root@linuxtechi tmp]# ls -l /tmp/root/anaconda-ks.cfg 
-rw-------. 1 root root 953 Aug 24 01:33 /tmp/root/anaconda-ks.cfg
[root@linuxtechi tmp]#

示例 7:创建并压缩归档文件(.tar.gz 或 .tgz)

假设我们需要打包 /etc 和 /opt 文件夹,并用 gzip 工具将其压缩。可以在 tar 命令中使用 -z 选项来实现。这种 tar 文件的扩展名可以是 .tar.gz 或者 .tgz。

[root@linuxtechi ~]# tar -zcpvf myarchive.tar.gz /etc/ /opt/

或

[root@linuxtechi ~]# tar -zcpvf myarchive.tgz /etc/ /opt/

示例 8:创建并压缩归档文件(.tar.bz2 或 .tbz2)

假设我们需要打包 /etc 和 /opt 文件夹,并使用 bzip2 压缩。可以在 tar 命令中使用 -j 选项来实现。这种 tar 文件的扩展名可以是 .tar.bz2 或者 .tbz。

[root@linuxtechi ~]# tar -jcpvf myarchive.tar.bz2 /etc/ /opt/

或

[root@linuxtechi ~]# tar -jcpvf myarchive.tbz2 /etc/ /opt/

示例 9:排除指定文件或类型后创建 tar 文件

创建 tar 文件时在 tar 命令中使用 –exclude 选项来排除指定文件或者类型。假设在创建压缩的 tar 文件时要排除 .html 文件。

[root@linuxtechi ~]# tar -zcpvf myarchive.tgz /etc/ /opt/ --exclude=*.html

示例 10:列出 .tar.gz 或 .tgz 文件中的内容 *

使用 -t 选项可以查看 .tar.gz 或 .tgz 文件中内容。如下:

[root@linuxtechi ~]# tar -tvf myarchive.tgz  | more
.............................................
drwxr-xr-x root/root         0 2016-09-07 08:41 etc/ 
-rw-r--r-- root/root       541 2016-08-24 01:23 etc/fstab 
-rw------- root/root         0 2016-08-24 01:23 etc/crypttab 
lrwxrwxrwx root/root         0 2016-08-24 01:23 etc/mtab -> /proc/self/mounts 
-rw-r--r-- root/root       149 2016-09-07 08:41 etc/resolv.conf 
drwxr-xr-x root/root         0 2016-09-06 03:55 etc/pki/
drwxr-xr-x root/root         0 2016-09-06 03:15 etc/pki/rpm-gpg/ 
-rw-r--r-- root/root      1690 2015-12-09 04:59 etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 
-rw-r--r-- root/root      1004 2015-12-09 04:59 etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-Debug-7 
-rw-r--r-- root/root      1690 2015-12-09 04:59 etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-Testing-7 
-rw-r--r-- root/root      3140 2015-09-15 06:53 etc/pki/rpm-gpg/RPM-GPG-KEY-foreman ..........................................................

示例 11:列出 .tar.bz2 或 .tbz2 文件中的内容

使用 -t 选项可以查看 .tar.bz2 或 .tbz2 文件中内容。如下:

[root@linuxtechi ~]# tar -tvf myarchive.tbz2  | more ........................................................
rwxr-xr-x root/root         0 2016-08-24 01:25 etc/pki/java/ 
lrwxrwxrwx root/root 0 2016-08-24 01:25 etc/pki/java/cacerts -> /etc/pki/ca-trust/extracted/java/cacerts
drwxr-xr-x root/root         0 2016-09-06 02:54 etc/pki/nssdb/ 
-rw-r--r-- root/root 65536 2010-01-12 15:09 etc/pki/nssdb/cert8.db
-rw-r--r-- root/root 9216 2016-09-06 02:54 etc/pki/nssdb/cert9.db
-rw-r--r-- root/root 16384 2010-01-12 16:21 etc/pki/nssdb/key3.db
-rw-r--r-- root/root 11264 2016-09-06 02:54 etc/pki/nssdb/key4.db
-rw-r--r-- root/root 451 2015-10-21 09:42 etc/pki/nssdb/pkcs11.txt
-rw-r--r-- root/root 16384 2010-01-12 15:45 etc/pki/nssdb/secmod.db
drwxr-xr-x root/root         0 2016-08-24 01:26 etc/pki/CA/ 
drwxr-xr-x root/root         0 2015-06-29 08:48 etc/pki/CA/certs/ 
drwxr-xr-x root/root         0 2015-06-29 08:48 etc/pki/CA/crl/ 
drwxr-xr-x root/root         0 2015-06-29 08:48 etc/pki/CA/newcerts/ 
drwx------ root/root         0 2015-06-29 08:48 etc/pki/CA/private/ 
drwx------ root/root         0 2015-11-20 06:34 etc/pki/rsyslog/ 
drwxr-xr-x root/root         0 2016-09-06 03:44 etc/pki/pulp/ ..............................................................

示例 12:解压 .tar.gz 或 .tgz 文件

使用 -x 和 -z 选项来解压 .tar.gz 或 .tgz 文件。如下:

[root@linuxtechi ~]# tar -zxpvf myarchive.tgz -C /tmp/

以上命令将 tar 文件解压到 /tmp 目录。

注:现今的 tar 命令会在执行解压动作前自动检查文件的压缩类型,这意味着我们在使用 tar 命令是可以不用指定文件的压缩类型。如下:

[root@linuxtechi ~]# tar -xpvf myarchive.tgz -C /tmp/

示例 13:解压 .tar.bz2 或 .tbz2 文件

使用 -j 和 -x 选项来解压 .tar.bz2 或 .tbz2 文件。如下:

[root@linuxtechi ~]# tar -jxpvf myarchive.tbz2 -C /tmp/

或

[root@linuxtechi ~]# tar xpvf myarchive.tbz2 -C /tmp/

示例 14:使用 tar 命令进行定时备份

总有一些实时场景需要我们对指定的文件和目录进行打包,已达到日常备份的目的。假设需要每天备份整个 /opt 目录,可以创建一个带 tar 命令的 cron 任务来完成。如下:

[root@linuxtechi ~]# tar -zcvf optbackup-$(date +%Y-%m-%d).tgz /opt/

为以上命令创建一个 cron 任务即可。

示例 15:使用 -T 及 -X 创建压缩归档文件

想像这样一个场景:把想要归档和压缩的文件及目录记录到到一个文件,然后把这个文件当做 tar 命令的传入参数来完成归档任务;而有时候则是需要排除上面提到的这个文件里面记录的特定路径后进行归档和压缩。

在 tar 命令中使用 -T 选项来指定该输入文件,使用 -X 选项来指定包含要排除的文件列表。

假设要归档 /etc、/opt、/home 目录,并排除 /etc/sysconfig/kdump 和 /etc/sysconfig/foreman 文件,可以创建 /root/tar-include 和 /root/tar-exclude 然后分别输入以下内容:

[root@linuxtechi ~]# cat /root/tar-include /etc
/opt
/home
[root@linuxtechi ~]# [root@linuxtechi ~]# cat /root/tar-exclude /etc/sysconfig/kdump
/etc/sysconfig/foreman
[root@linuxtechi ~]#

运行以下命令来创建一个压缩归档文件。

[root@linuxtechi ~]# tar zcpvf mybackup-$(date +%Y-%m-%d).tgz -T /root/tar-include -X /root/tar-exclude

示例 16:查看 .tar、.tgz 和 .tbz2 文件的大小

使用如下命令来查看 (压缩) tar 文件的体积。

[root@linuxtechi ~]# tar -czf - data.tar | wc -c 427 
[root@linuxtechi ~]# tar -czf - mybackup-2016-09-09.tgz | wc -c 37956009 
[root@linuxtechi ~]# tar -czf - myarchive.tbz2 | wc -c 30835317 
[root@linuxtechi ~]#

示例 17:分割体积庞大的 tar 文件为多份小文件

类 Unix 系统中使用 split 命令来将大体积文件分割成小体积文件。大体积的 tar 当然也可以使用这个命令来进行分割。

假设需要将 “mybackup-2016-09-09.tgz” 分割成每份 6 MB 的小文件。

Syntax : split -b . “prefix-name”
[root@linuxtechi ~]# split -b 6M mybackup-2016-09-09.tgz mybackup-parts

以上命令会在当前目录分割 mybackup-2016-09-09.tgz 文件成为多个 6 MB 的小文件,文件名为 mybackup-partsaa ~ mybackup-partsag。如果在要在分割文件后以数字而非字母来区分,可以在以上的 split 命令使用-d 选项。

[root@linuxtechi ~]# ls -l mybackup-parts* 
-rw-r--r--. 1 root root 6291456 Sep 10 03:05 mybackup-partsaa 
-rw-r--r--. 1 root root 6291456 Sep 10 03:05 mybackup-partsab 
-rw-r--r--. 1 root root 6291456 Sep 10 03:05 mybackup-partsac 
-rw-r--r--. 1 root root 6291456 Sep 10 03:05 mybackup-partsad 
-rw-r--r--. 1 root root 6291456 Sep 10 03:05 mybackup-partsae 
-rw-r--r--. 1 root root 6291456 Sep 10 03:05 mybackup-partsaf 
-rw-r--r--. 1 root root 637219 Sep 10 03:05 mybackup-partsag 
[root@linuxtechi ~]#

然后通过网络将这些分割文件转移到其他服务器,就可以合并成为一个单独的 tar 文件了,如下:

[root@linuxtechi ~]# cat mybackup-partsa* > mybackup-2016-09-09.tgz [root@linuxtechi ~]#


-----------------------------------

相关文章

Linux 中 17 个 tar 命令实用示例

记录一下zip和gzip命令使用