tar命令
相信不少读者朋友都用过Linux上的tar命令,它能帮助我们将多个文件打包成一个文件包,既方便我们传输,又可用于文件备份和解压缩归档等。但你真的完全学会了tar命令嘛,让我们一起来看看它的具体用法。
本文包括:语法介绍、使用示例、通过file命令确定文件的压缩格式、通过MD5检验比较两个tar包是否一致、批量压缩和解压缩。
tar语法介绍
tar命令目前常用的格式是:
tar [option] [file]
其中file
参数通常是我们要操作的文件名。而 option
参数一般是我们要对该文件进行的操作,它可以简单的分为操作选项、附加选项。
操作选项
- -c:创建压缩文件
- -x:对文件进行解压
- -t:查看压缩包内容
- -r:向压缩归档文件末尾追加文件
- -u:更新原压缩包中的文件
- -d:将压缩文件和文件系统上的文件进行对比
这里我们仅列出最为常用的六个操作选项参数。需要注意的是,它们之间互相独立,一般不可同时使用,但可以和下面的附加选项参数配合使用(为了方便理解,我们一般会操作选项参数放在附加选项参数之前)。
附加选项
- -z:文件有gzip属性
- -j:文件有bz2属性
- -Z:文件有compress属性
- -v:详细列出所有处理过程
- -C:指定工作目录(因为该参数后必须紧跟文件目录,故一般放在option参数的最后或单独使用)
- -f:指定归档文件名(因为该参数后必须紧跟文件名,故一般放在option参数的最后或单独使用)
这里我们仅列出最为常用的六个附加选项参数。这些参数是根据压缩或者解压缩需要选择的,使用时放在操作选项参数的后面。
tar命令示例
这里我们根据上面介绍的语法,看一些tar命令的使用示例。
压缩文件
- tar -cvf wrfout.tar wrfout_d01_* 将当前目录里所有以wrfout_d01_开头的文件打包成wrfout.tar,并详细显示压缩过程
- tar -czf wrfout.tar.gz wrfout_d01_* 将当前目录里所有以wrfout_d01_开头的文件打包成wrfout.tar后,并将其用gzip进行压缩,生成一个gzip压缩过的包,命名为wrfout.tar.gz
- tar -cjf wrfout.tar.bz2 wrfout_d01_* 将当前目录里所有以wrfout_d01_开头的文件打包成wrfout.tar后,并将其用bzip2压缩,生成一个bzip2压缩过的包,命名为wrfout.tar.bz2
- tar -cZf wrfout.tar.Z wrfout_d01_* 将当前目录里所有以wrfout_d01_开头的文件打包成wrfout.tar后,并将其用compress压缩,生成一个compress压缩过的包,命名为wrfout.tar.Z
- tar -cvf ../wrfout.tar wrfout_d01_* 将当前目录里所有以wrfout_d01_开头的文件打包成wrfout.tar存放在上一级目录中,并详细显示压缩过程
解压缩文件
- tar -xvf wrfout.tar 解压wrfout.tar到当前目录下,并详细显示解压过程
- tar -xzf wrfout.tar.gz 解压wrfout.tar.gz到当前目录下
- tar -xjf wrfout.tar.bz2 解压wrfout.tar.bz2到当前目录下
- tar -xZf wrfout.tar.Z 解压wrfout.tar.Z到当前目录下
- tar -xzvf wrfout.tar.gz -C /home 解压wrfout.tar.gz到/home目录下,并详细显示解压过程
其他
- tar -rf wrfout.tar *.py 将所有.py的文件增加到wrfout.tar压缩包里面去
- tar -uf wrfout.tar plot.py 用当前文件目录中的plot.py,更新压缩包wrfout.tar中plot.py文件
- tar -tf wrfout.tar 列出wrfout.tar包中的所有文件
- tar -dvf wrfout.tar *.py 将wrfout.tar压缩包中的文件与当前目录下的.py文件进行比较,并列出详细过程
file命令确定压缩文件的格式
当我们从别人那里下载了一个没有后缀的压缩包或者是后缀格式错误的压缩包时,我们可以通过file
命令来确定压缩包的格式,进行选用对应的解压缩命令(但通常tar -xvf
能解压缩大多数包)。
[zhxia@aemol tar]$ file model.tar
model.tar: gzip compressed data, from Unix, last modified: Sat Dec 8 14:23:00 2018
[zhxia@aemol tar]$ tar -xzf model.tar
MD5检验判断两个tar包是否一致
当我们在不同服务器间使用scp等命令传输tar压缩包时,时常会担心因断点续传(即传输过程中服务器中断后又重新连上接着传输)而造成接收到的压缩包中文件不完整,这时候我们可以通过MD5检验来确定两个压缩包内容是否完全一致。
- 首先在传输前先计算将要传输的tar包的MD5检验和,并将其存储在md5.log文件中
[zhxia@aemol tar]$ md5sum guess.tar
d152e779254eadb6cca31cfcacab6e60 guess.tar
[zhxia@aemol tar]$ md5sum guess.tar &>md5.log
[zhxia@aemol tar]$ cat md5.log
d152e779254eadb6cca31cfcacab6e60 guess.tar
- 其次,我们将md5.log和tar包都传输到目标服务器
[zhxia@aemol tar]$ scp md5.log guess.tar target@21.10.40.30:/home/zhxia
- 最后,在目标服务器上计算tar包的MD5检验和,并将其与存储在md5.log文件中的值进行比较。如果一致则说明tar包传输完整。
[target@21.10.40.30 zhxia]$ md5sum guess.tar
d152e779254eadb6cca31cfcacab6e60 guess.tar
[target@21.10.40.30 zhxia]$ cat md5.log
d152e779254eadb6cca31cfcacab6e60 guess.tar
一个 MD5 校验和(checksum)通过对接收的传输数据执行散列运算来检查数据的正确性。计算出的散列值拿来和随数据传输的散列值比较。如果两个值相同,说明传输的数据完整无误、没有被窜改过(前提是散列值没有被窜改),从而可以放心使用。MD5校验可以应用多个领域,比如说机密资料的检验,下载文件的检验,明文密码的加密等。
利用tar实现批量压缩、解压缩
要想批量压缩和解压缩tar包,我们需要先写一个bash脚本(如命名为:mlutitar.sh),然后通过bash multitar.sh
运行bash脚本实现。
批量压缩文件
对于批量压缩文件我们需要先单独写一个list.txt告诉系统我们想要压缩的文件,再通过运行bash脚本实现批量压缩。
示例:批量压缩当前目录下文件名为plot*.py和data*.py的文件分别到plot.tar和data.tar的压缩包中去(*为通配符)。
- list.txt脚本
plot
data
- multitar.sh脚本
#!/bin/bash
for i in `cat list.txt`
do
tar -cvf $i.tar $i*.py
done
批量解压缩文件
示例:批量解压当前目录下文件名为test*.tar的压缩包(*为通配符)。
- multitar.sh脚本
#!/bin/bash
for i in `ls ./test*.tar`
do
tar -xvf $i
done