zoukankan      html  css  js  c++  java
  • Linux压缩打包tar命令总结

     

     

    命令简介

     

    在Linux系统的维护、管理中,tar命令是一个使用频率很高的命令,tar命令的功能主要是将众多文件打包成一个tar文件并压缩,并且能保持文件的权限属性。tar其实最开始是用来做磁带备份存盘的,tar是tape archive的简称。后面扩展到不仅仅局限于磁带备份存盘。也能存放到文件系统中。tar命令版本众多,下面整理了一些常用的参数,具体以实际版本为准。

     

     

    命令参数

     

     参数

    参数描述

    -c

    创建新的档案文件

    -C

    指定到要解压到的目录。注意:该目录必须存在

    -f

    指定打包的文件名。在f之后要立即接打包文件名!不要再加参数!

    -x

    解压

    -O

    将文件解压到标准输出

    -p

    使用原文件的原来属性

    -P

    创建归档文件,使用绝对路径

    -t

    列出档案文件中的内容

    -r

    向压缩归档文件末尾追加文件

    -u

    更新原压缩包中的文件

    -v

    显示详细过程

    -z

    使用gzip压缩,一般格式为xx.tar.gzxx. tgz

    -Z

    compress

    -j

    使用bzip2压缩,一般格式为xxx.tar.bz2

    --exclude

    在压缩过程中,排除某个文件

    --remove-files

    在完成打包后,删除原文件夹

     

    注意事项:

    1:在上面的参数中, c/x/t 仅能存在一个!不可同时存在!例如,不可能同时压缩与解压缩。

    2:-f: 指定打包的文件名,切记,这个参数是最后一个参数(不能再接其它参数),后面只能接打包文件名。

    3:参数可以合并在一起,也可以单独分开。如下所示:

     

        #tar -jcvf 2018-10-14.tar.bz2 ./2018-10-11

     

        #tar -j -c -v -f 2018-10-14.tar.bz2 ./2018-10-11

     

     

     

    使用示例

     

    --打包当前目录下所有后缀为log类型的文件

     

    [root@DB-Server logs]# tar -cvf backup_log.tar ./*.log

     

    --查看打包了那些文件

     

    [root@DB-Server logs]# tar -tf backup_log.ta

     

    记住:如果文件是压缩格式,如何查看打包了那些文件呢? 是否需要参数z或f呢? 其实是不需要参数z或j也是能查看的。

     

    [root@DB-Server logs]# tar -jcvf  backup.tar.bz2  ./*.log
     
    [root@DB-Server logs]# tar -tvf backup.tar.bz2 
    [root@DB-Server logs]# tar -tjvf backup.tar.bz2 
    [root@DB-Server full]# tar -tjvf full_2018-10-21_00_00_01.tar.bz2 

     

    注意:加上参数z或j也没有错,暂时不清楚区别。猜测有可能是自动进行了解压.

     

     

     

    --查看是否打包了文件incr_2018-10-16_12_00_01.log

     

    [root@DB-Server mysql]# tar -tvf logs.tar.bz2  | grep incr_2018-10-16_12_00_01.log
    -rw-r--r-- root/root    118944 2018-10-21 10:16:01 home/mysqlbackup/logs/incr_2018-10-16_12_00_01.log

     

     

    --解压打包的backup_log.tar文件

     

    [root@DB-Server logs]# tar -xvf backup_log.tar

     

     

    --打包压缩为bz2格式的文件

     

    [root@DB-Server mysqlbackup]#tar -jcvf 2018-10-20.tar.bz2 ./2018-10-20

     

    注意:使用bz2压缩的打包文件,后缀可以为filename.tar.bz2 或 filenam.tbz两种格式,视个人喜好、习惯而定。

     

     

    --打包压缩为gz格式的文件

     

    [root@DB-Server mysqlbackup]#tar -zcvf 2018-10-20.tar.gz ./2018-10-20

     

    注意:使用gzip压缩的打包文件,后缀可以为filename.tgz 或filename.tar.gz两种格式,视个人喜好、习惯而定。

     

     

    --打包压缩后删除原文件夹或原文件

     

    [root@DB-Server mysqlbackup]tar -zcvf 2018-10-13.tar.gz /mysql_backup/2018-10-13 --remove-files

     

    #参数remove-files会在/mysql_backup/2018-10-13目录打包压缩后,删除这个原文件夹。

     

     

    --解压压缩格式为gz格式的打包文件

     

    [root@DB-Server mysqlbackup]# tar -xjvf 2018-10-20.tar.bz2

     

    [root@DB-Server mysqlbackup]# tar -xzvf 2018-10-20.tar.gz

     

     

    --解压压缩文件中的某一个文件

     

    #只要解压打包压缩文件中一个文件xtrabackup_checkpoints(绝对路径打包压缩)

    [root@DB-Server full]# tar -jxvf full_2018-10-21_00_00_01.tar.bz2

    /mysqlbackup/db_backup/2018-10-22/full/full_2018-10-22_00_00_01/xtrabackup_checkpoints

     

    #相对路径的打包压缩文件解压单个文件

    [root@DB-Server mysqlbackup]# tar -xjvf logs.tar.bz2   ./logs/incr_2018-10-13_16_10_01.log
    ./logs/incr_2018-10-13_16_10_01.log

     

     

    --打包分片压缩

     

    # tar -zcvp -f - 2018-10-18/ | split -b 2M -d -a 1 - mysq.tar.gz.

     

    root@DB-Server mysql_db_backup]# tar -zcvpf - 2018-10-18/ | split -b 2M -d -a 1 - mysq.tar.gz. 
    2018-10-18/
    2018-10-18/last_lsn
    2018-10-18/incr/
    2018-10-18/incr/incr_2018-10-18_23_02_29.tar.bz2
    2018-10-18/incr/incr_2018-10-18_23_02_01.tar.bz2
    2018-10-18/full/
    2018-10-18/full/full_2018-10-17_23_01_33.tar.bz2
    [root@DB-Server mysql_db_backup]# ls -lrt
    total 15220
    drwxr-xr-x. 4 root root    4096 Oct 18 23:01 2018-10-18
    drwxr-xr-x. 4 root root    4096 Oct 19 09:16 2018-10-19
    -rw-r--r--. 1 root root   35275 Oct 25 10:41 2008.tar.bz2
    -rw-r--r--. 1 root root 2097152 Oct 25 11:03 mysq.tar.gz.0
    -rw-r--r--. 1 root root 2097152 Oct 25 11:03 mysq.tar.gz.1
    -rw-r--r--. 1 root root 2097152 Oct 25 11:03 mysq.tar.gz.2
    -rw-r--r--. 1 root root 2097152 Oct 25 11:03 mysq.tar.gz.3
    -rw-r--r--. 1 root root 2097152 Oct 25 11:03 mysq.tar.gz.4
    -rw-r--r--. 1 root root 2097152 Oct 25 11:03 mysq.tar.gz.5
    -rw-r--r--. 1 root root 2097152 Oct 25 11:03 mysq.tar.gz.6
    -rw-r--r--. 1 root root  856929 Oct 25 11:03 mysq.tar.gz.7

     

    # tar -zcvpf - ./2018-10-18 | split -b 2M - mysq.tar.gz.

     

    --绝对路径打包压缩的相关案例

     

    打包相对路径文件演示

     

    [root@DB-Server db_backup]# ls -lrt

    total 16

    drwxr-xr-x 2 root root 4096 Oct 21 22:39 2018-10-20

    drwxr-xr-x 3 root root 4096 Oct 21 22:39 2018-10-21

    [root@DB-Server db_backup]#

     

     

    #相对路径压缩,解压的时候没有任何问题

    [root@DB-Server db_backup]# tar -jcvf 2018-10-21.tar.bz2 ./2018-10-21

     

    #在当前路径下面解压

    [root@DB-Server db_backup]# tar -xjvf 2018-10-21.tar.bz2

     

    #解压到某个路径下面

    [root@DB-Server db_backup]# tar -xjvf 2018-10-21.tar.bz2   -C /mysql/

     

    如果是打包压缩时使用绝对路径,这个就相对而言比较麻烦,尤其是将打包文件在异机(其它服务器)解压.例如,下面full_2018-10-20_00_00_02.tar.bz2文件是将/mysql/mysql_backup/db_backup/2018-10-21这个目录下面的所有文件按绝对路径打包,然后将文件拷贝到这台服务解压。输出信息有tar: Removing leading `/' from member names,它是tar删除了绝对路径最开始 / 而进行的提示。使用tar对文件打包时,一般不建议使用绝对路径.

     

    [root@DB-Server mysqlbackup]# ls -lrt
    total 683016
    -rw-r--r-- 1 root root 698691092 Oct 21 10:13 full_2018-10-20_00_00_02.tar.bz2
    drwxr-xr-x 2 root root     12288 Oct 21 21:14 logs
    drwxr-xr-x 4 root root      4096 Oct 21 23:07 db_backup
    [root@DB-Server mysqlbackup]# pwd
    /home/mysqlbackup
    [root@DB-Server mysqlbackup]# tar -xjvf full_2018-10-20_00_00_02.tar.bz2 
    /mysql/mysql_backup/db_backup/2018-10-21/full/full_2018-10-21_00_00_02/
    tar: Removing leading `/' from member names
    /mysql/mysql_backup/db_backup/2018-10-21/full/full_2018-10-21_00_00_02/xtrabackup_logfile
    /mysql/mysql_backup/db_backup/2018-10-21/full/full_2018-10-21_00_00_02/ibdata1
    ............................................................

     

    clip_image001[1]

     

     

    此时就会在当前目录下/home/mysqlbackup 下面生成mysql/mysql_backup/db_backup/2018-10-21等目录。这个往往不是我们想要的,能否直接将2018-10-21这个文件夹解压到当前目录呢?答案是不行。即使使用参数-C,也依然生成不了我们想要的。

     

    [root@DB-Server mysqlbackup]# tar -xjvf full_2018-10-20_00_00_02.tar.bz2 -C /home/mysqlbackup/

     

    当然,如果使用-P参数打包绝对路径文件,那么解压的时候,也会按原绝对路径生成。而不是在当前目录或指定目录,生成很深的路径。

     

    #这样会按原绝对路径的方式解压

    [root@DB-Server mysqlbackup]# tar -xjvPf full_2018-10-20_00_00_02.tar.bz2

     

     

     

    参考资料:

     

    http://www.cnblogs.com/li-hao/archive/2011/10/03/2198480.html

  • 相关阅读:
    C#自定义控件的开发:Pin和Connector
    C# 调用第三方DLL完整实例
    利用微软Speech SDK 5.1开发语音识别系统主要步骤
    如何在Android中使用OpenCV
    VS 2012单元测试和测试资源管理器
    .NET Reflector插件FileDisassembler还原源码
    根据powerdesigner的OO模型生成C#代码
    SQLServer2008设置开启INTERNET远程连接
    Kudu-压缩
    kudu的读取数据流程
  • 原文地址:https://www.cnblogs.com/kerrycode/p/9827742.html
Copyright © 2011-2022 走看看