这里首先需要明确两个概念:打包和压缩。打包是指将一大堆文件或目录合并成一个总的文件;压缩则是将一个大容量的文件通过一些压缩算法(gzip、bzip2等命令)变成一个小容量的文件。Linux/Unix下的压缩命令通常都只能对一个文件进行压缩操作,所以通常需要使用tar命令对文件进行打包,然后进行压缩操作。
一、tar命令常用的功能
-c:创建新的tar文件
-x:解开tar文件
-t:列出tar文件中包含的文件的信息
-r:附加新的文件到tar文件中
注意:以上功能是独立的,一次只能使用一个。
注意:.tgz是.tar.gz的简称
二、tar命令常用的参数
-z:使用gzip进行解压缩
-j:使用bzip2进行解压缩
-Z:使用compress进行解压缩
-v:显示解压缩执行过程
-f:指定要处理的文件名
注意:如果需要使用-f参数,需要将f参数放在所有参数最后面,在f之后要立即接文件名,不能有其他参数。
例如:tar -zxvf /tmp/etc.tar.gz是正确的, tar -zxfv /tmp/etc.tar.gz则是错误的。
三、tar命令使用实例
1.打包/etc目录下所有文件
tar -cvf /tmp/etc.tar /etc
2.打包并压缩/etc目录下所有文件
tar -zcvf /tmp/etc.tar.gz /etc //以gzip压缩
tar -jcvf /tmp/etc.tar.bz2 /etc //以bzip2压缩
tar -Zcvf /tmp/etc.tar.Z /etc //以compress压缩
3.查看打包压缩文件的文件内容
tar -tvf /tmp/etc.tar //查看打包文件
tar -ztvf /tmp/etc.tar.gz //查看以gzip压缩的文件
tar -jtvf /tmp/etc.tar.bz2 //查看以bzip2压缩的文件
tar -Ztvf /tmp/etc.tar.Z //查看以compress压缩的文件
4.解压打包压缩文件
tar -xvf /tmp/etc.tar //打开tar打包文件
tar -zxvf /tmp/etc.tar.gz //解压以gzip压缩的文件
tar -jxvf /tmp/etc.tar.bz2 //解压以bzip2压缩的文件
tar -Zxvf /tmp/etc.tar.Z //解压以compress压缩的文件
注意:/etc/share目录下有 123.c 456.txt tp.ko
进入/etc下:
tar –zcvf share.tar.gz ./share
或tar- zcvf share.tar.gz ./share/*
进入/etc/share下:
tar –zcvf share.tar.gz *
注意两者生成的share.tar.gz 的区别:
tar –zcvf share.tar.gz ./share
tar- zcvf share.tar.gz ./share/* ————————这两个的share.tar.gz解压后我们看到的是一个share目录
进入/etc/share下:tar –zcvf share.tar.gz * ————这个的share.tar.gz解压后看到的是123.c 456.txt tp.ko这几个文件。
为什么要说这两种呢?因为我们在有些shell的命令中解压文件,有时我们可能需要的是解压后直接是share目录下的东西,而不是一个share。这里并不是说第二种解压好,只是在工作时要注意,我出现过使用第一种压缩导致无法加载目录下的一些驱动。
tar压缩排除某个目录或文件:在很多时候,我们要对某一个目录打包,而这个目录下有几十个子目录和子文件,我们需要在打包的时候排除其中1、2个目录或文件。
这时候我们在用tar命令打包的时候,增加参数 --exclude 就能达到目的。
打包的时候我们要排除 tomcat/logs 目录
tar -zcvf tomcat.tar.gz tomcat --exclude=tomcat/logs
如果要排除多个目录,增加 --exclude 即可,如下命令排除logs和libs两个目录及文件xiaoshan.txt:
tar -zcvf tomcat.tar.gz tomcat --exclude=tomcat/logs --exclude=tomcat/libs --exclude=tomcat/xiaoshan.txt
这里要说一下注意事项:
大家都知道linux在使用tab键的时候会对目录名称自动补全,这很方便,大家也比较常用。
如我们输入 tomcat/lo 的时候按tab键,命令行会自动生成 tomcat/logs/ ,对于目录,最后会多一个 “/”
这里大家要注意的时候,在我们使用tar 的--exclude 命令排除打包的时候,不能加“/”,否则还是会把logs目录以及其下的文件打包进去。
错误写法:
tar -zcvf tomcat.tar.gz --exclude=tomcat/logs/ --exclude=tomcat/libs/ tomcat
正确写法:
tar -zcvf tomcat.tar.gz --exclude=tomcat/logs --exclude=tomcat/libs tomcat
强调:等号后面直接跟目录名!我曾经自作聪明跟了./或者绝对路径,都会导致全部打包压缩,达不到效果!
tar -zcvf modules.tar.gz * --exclude=my.sh
tar -zcvf modules.tar.gz * --exclude=./my.sh-------这个还是会把my.sh 打包进去
tar -zxvf modules.tar.gz -C ./modules
-C:指定modules.tar.gz解压到当前目录下的modules的目录下