everyday:linux tar
[TOC]
功能说明
tar 命令: 为linux的文件和目录创建档案。利用tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。
利用tar,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。
打包,是指将一大堆文件或目录变成一个总的文件;压缩,是将一个大的文件通过一些压缩算法就一个小文件。
Linux中很多压缩程序只能针对一个文件进行压缩,这样当想要压缩一大堆文件时,得先将这一大堆文件先打包成一个包(tar),然后再用压缩程序进行压缩(gzip、bzip2)
使用tar打出来的包常称为tar包,tar包文件的命令通常都是以.tar结尾的,生成tar包后,就可以用其它的程序来进行压缩。
命令详解
-
命令格式
tar [必要参数][可选参数][文件与目录] -
命令功能
用来压缩和解压文件的,但本身不具有压缩功能,是调用其他的压缩功能实现的。
-
命令参数
- 必要参数
-A 新增压缩文件到已存在的压缩
-B 设置区块大小
-c 建立新的压缩文件
-d 记录文件的差别
-r 添加文件到已经压缩的文件末尾
-u 更新原压缩包中的文件,添加改变了和现有的文件到已经存在的压缩文件
-x 从压缩的文件中提取文件
-t 显示压缩文件的内容
-z 支持gzip解压文件
-j 支持bzip2解压文件
-Z 支持compress解压文件
-v 显示操作过程
-l 文件系统边界设置
-k 保留原有文件不覆盖
-m 保留文件不被覆盖
-W 确认压缩文件的正确性
-O 将文件解开到标准输出
-p 使用原文件的原来属性(属性不会依据使用者而变)
-P 可以使用绝对路径来压缩!
-N 比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件中!
--exclude file 在压缩的过程中,不要将FILE 打包!
- 可选参数
-b 设置区块数目
-C 切换到指定目录
-f 指定压缩文件,在f 之后要立即接档名喔!不要再加参数!
--help 显示帮助信息
--version 显示版本信息
-
常用解压/压缩
- .tar
解压 tar xvf filename.tar
压缩 tar cvf filename.tar dirname
- .gz
解压 gunzip filename.gz or gzip -d filename.gz
压缩 gzip filename
- .tar.gz and .tgz
解压 tar zxvf filename.tar.gz
压缩 tar zcvf filename.tar.gz dirname
- .bz2
解压 bzip2 -d filename.bz2 or bunzip2 filename.bz2
压缩 bzip2 -z filename
- .tar.bz2
解压 tar jxvf filename.tar.bz2
压缩 tar jcvf filename.tar.bz2 dirname
- .bz
解压 bzip2 -d filename.bz or bunzip2 filename.bz
- .tar.bz
解压 tar jxvf filename.tar.bz
- .Z
解压 uncompress filename.Z
压缩 compress filename
- .tar.Z
解压 tar Zxvf filename.tar.Z
压缩 tar Zcvf filename.tar.Z dirname
- .zip
解压 unzip filename.zip
压缩 zip filename.zip dirname
- .rar
解压 rar x filename.rar or unrar e filename.rar
压缩 rar a filename.rar dirname
-
举例
- eg1 将文件全部打包成tar包
// 仅打包,不压缩
tar -cvf log.tar log.log
tar -cvf /tmp/etc.tar /etc
// 打包后,以 gzip 压缩
tar -zcvf log.tar.gz log.log
// 打包后,以 bzip2 压缩
tar -jcvf log.tar.bz2 log.log
ls -la *.tar*
> 上述指令在执行的时候,会显示一个警告讯息:`tar: Removing leading `/' from member names`,这是关于绝对路径的特殊设定.
> z 参数,则以 .tar.gz 或 .tgz 来代表 gzip 压缩过的 tar包.
> j 参数,则以 .tar.bz2 来代表 bzip 压缩过的 tar包.
+ eg2 查阅 tar 包内有哪些文件
tar -ztvf log.tar.gz
> 使用 gzip 压缩的log.tar.gz,在查阅log.tar.gz包内的文件时,就得加上 z 这个参数。
+ eg3 将tar包解压缩
tar -zxvf /opt/test/log.tar.gz
> 在预设的情况下,可以将压缩档在任何地方解开的
+ eg4 只将tar包内的部分文件解压出来
tar -zcvf log.tar.gz log14.log log15.log
tar -zxvf log.tar.gz log15.log
cd test1
tar -zxvf /opt/test/log.tar.gz log15.log
> 透过 tar -ztvf 来查阅 tar 包内的文件名称,如果单只要一个文件,就可以透过这个方式来解压部分文件!
+ eg5 文件备份下来,并且保存其权限
tar -zcvpf log.tar.gz log2014.log log2015.log log2016.log
cd test1
tar -zxvpf /opt/test/log.tar.gz
> -p 的属性是很重要的,尤其是当要保留原本文件的属性时
+ eg6 在文件夹当中,比某个日期新的文件才备份
tar -N "2015/04/10" -zcvf log.tar.gz test
+ eg7 备份文件夹内容时,排除部分文件
tree scf
tar --exclude scf/service -zcvf scf.tar.gz scf/*
+ eg8 解压到指定的目录
tar zxvf /opt/test/log.tar.zip -C /opt/test1
> 前提要保证存在/opt/test1这个目录,和cp有点不同的是,cp时,如果不存在这个目录,就会自动创建这个目录。
+ eg9 将当前目录下的log文件打包到根目录下并命名为log.tar.gz
tar zcvf /log.tar.gz ./log
+ eg10 将/etc/打包后直接解开在/tmp底下,而不产生文件
cd /tmp
tar -cvf - /etc | tar -xvf -
> 这个动作有点像是cp -r /etc /tmp
>
> 要注意的地方在於输出档变成- 而输入档也变成- ,又有一个|
>
> 分别代表standard output, standard input 与管线命令