zoukankan      html  css  js  c++  java
  • 6.1 tar:打包备份

    tar命令

        在Linux系统里,tar是将多个文件打包在一起,并且可以实现解压打包的文件的命令。是系统管理员最常用的命令之一,tar命令不但可以实现对多个文件进行打包,还可以对多个文件打包后进行压缩。
        打包是指将一大堆文件或目录变成一个总的文件,压缩则是将一个大的文件通过一些压缩算法变成一个小文件。
     
        tar命令选项的使用有点特殊,对于CentOS、Linux来说,“tar -z”和“tar z”的效果相同,加或不加“”这个符号都是可以的。
     

    tar命令选项

    z            通过gzip压缩或解压
    c            创建新的tar包菜
    v            显示详细的tar命今执行过程
    f            指定压缩文件的名字
    t            不解压查看tar包的内容
    p            保持文件的原有属性
    P(大写)     以绝对路径打包,危险参数
    j            通过bzip2命令压缩或解压
    x            解开tar包旅
    C            指定解压的目录路径
    -exclude=PATTERN    打包时排除不需要处理的文件或目录
    -X 文件名    从指定文件读取不需要处理的文件或目录列表
    -N 日期      仅打包比指定日期新的文件,可用于增量打包备份
    -h                    打包软链接文件指向的真实源文件激
    -hard-dereference     打包硬链接文件
     

    备份站点目录html

    [root@cs6 ~]# mkdir -p /var/www/html/oldboy/test
    [root@cs6 ~]# touch /var/www/html/{1..10}.html
    [root@cs6 ~]# ls /var/www/html/
    10.html  1.html  2.html  3.html  4.html  5.html  6.html  7.html  8.html  9.html  oldboy
    [root@cs6 ~]# cd /var/www/
    [root@cs6 www]# ls
    html
    [root@cs6 www]# tar zcvf www.tar.gz ./html
    ./html/
    ./html/4.html
    ./html/7.html
    ./html/oldboy/
    ./html/oldboy/test/
    ./html/9.html
    ./html/2.html
    ./html/5.html
    ./html/3.html
    ./html/6.html
    ./html/10.html
    ./html/1.html
    ./html/8.html
    [root@cs6 www]# ll -h www.tar.gz
    -rw-r--r--. 1 root root 255 May 12 18:20 www.tar.gz
     
    [root@cs6 www]# tar ztvf www.tar.gz  #<一使用选项-t不解压就可以查看压缩包的内容,选项v可以显示文件的属性。
    drwxr-xr-x root/root         0 2019-05-12 18:19 ./html/
    -rw-r--r-- root/root         0 2019-05-12 18:19 ./html/4.html
    -rw-r--r-- root/root         0 2019-05-12 18:19 ./html/7.html
    drwxr-xr-x root/root         0 2019-05-12 18:19 ./html/oldboy/
    drwxr-xr-x root/root         0 2019-05-12 18:19 ./html/oldboy/test/
    -rw-r--r-- root/root         0 2019-05-12 18:19 ./html/9.html
    -rw-r--r-- root/root         0 2019-05-12 18:19 ./html/2.html
    -rw-r--r-- root/root         0 2019-05-12 18:19 ./html/5.html
    -rw-r--r-- root/root         0 2019-05-12 18:19 ./html/3.html
    -rw-r--r-- root/root         0 2019-05-12 18:19 ./html/6.html
    -rw-r--r-- root/root         0 2019-05-12 18:19 ./html/10.html
    -rw-r--r-- root/root         0 2019-05-12 18:19 ./html/1.html
    -rw-r--r-- root/root         0 2019-05-12 18:19 ./html/8.html
     
    [root@cs6 www]# tar ztf www.tar.gz #<==省略v选项。
    ./html/
    ./html/4.html
    ./html/7.html
    ./html/oldboy/
    ./html/oldboy/test/
    ./html/9.html
    ./html/2.html
    ./html/5.html
    ./html/3.html
    ./html/6.html
    ./html/10.html
    ./html/1.html
    ./html/8.html
    [root@cs6 www]#
    tar tf www.tar.gz #<=如果不指定z选项,那么tar命令也会自动判断压缩包的类型,自动调用gzip命令。 ./html/ ./html/4.html ./html/7.html ./html/oldboy/ ./html/oldboy/test/ ./html/9.html ./html/2.html ./html/5.html ./html/3.html ./html/6.html ./html/10.html ./html/1.html ./html/8.html

    解开压缩包

    [root@cs6 www]# tar zxvf www.tar.gz -C /tmp/
    ./html/
    ./html/4.html
    ./html/7.html
    ./html/oldboy/
    ./html/oldboy/test/
    ./html/9.html
    ./html/2.html
    ./html/5.html
    ./html/3.html
    ./html/6.html
    ./html/10.html
    ./html/1.html
    ./html/8.html
    [root@cs6 www]# ls /tmp/html/
    10.html  1.html  2.html  3.html  4.html  5.html  6.html  7.html  8.html  9.html  oldboy
    [root@cs6 www]# tar xf www.tar.gz -C /tmp/ #去掉v选项也可以,只要涉及解压的操作,tar命令都能自动识别压缩包的质缩类型,但是压缩时必须要加上z选项。
     

    排除打包

    [root@cs6 www]# tar zcvf www.tar.gz ./html/ --exclude=html/oldboy/test
    ./html/                                                #<==test目录结尾不要加/,否则不会成功。
    ./html/4.html
    ./html/7.html
    ./html/oldboy/
    ./html/9.html
    ./html/2.html
    ./html/5.html
    ./html/3.html
    ./html/6.html
    ./html/10.html
    ./html/1.html
    ./html/8.html
    [root@cs6 www]# tar zcvf www.tar.gz ./html/ --exclude=html/oldboy/test --exclude=html/oldboy
    ./html/                #<-=排除2个以上目录的方法:并列使用多个--exclude。
    ./html/4.html
    ./html/7.html
    ./html/9.html
    ./html/2.html
    ./html/5.html
    ./html/3.html
    ./html/6.html
    ./html/10.html
    ./html/1.html
    ./html/8.html

    排除多个文件打包参数-X

    [root@cs6 www]# cat list.txt
    10.html
    8.html
    1.html
    7.html
    5.html
    [root@cs6 www]# tar zcvfX paichu.tar.gz list.txt ./html/
    ./html/
    ./html/4.html
    ./html/oldboy/
    ./html/oldboy/test/
    ./html/9.html
    ./html/2.html
    ./html/3.html
    ./html/6.html

    打包链接文件

    [root@cs6 www]# cd /etc/
    [root@cs6 etc]# tar zcf local.tar.gz ./rc.local
    [root@cs6 etc]# tar tvf local.tar.gz
    lrwxrwxrwx root/root         0 2019-05-05 23:11 ./rc.local -> rc.d/rc.local
    [root@cs6 etc]# tar zcfh local_h.tar.gz ./rc.local
    [root@cs6 etc]# tar tvf local_h.tar.gz
    -rwxr-xr-x root/root       220 2018-06-20 00:12 ./rc.local
        通过对比压缩包内的文件类型,大家应该可以看出其中的区别了吧?用tar的通用选项zcf打包文件时,如果这个文件是链接文件如/etc/rc.local,那么tar只会对链接文件本身打包,而不是对链接文件指向的真实文件打包,因此需要额外使用-h选项将软链接文件对应的实体文件打包。
     
    2.技巧性范例

    解决tar使用-exclude 选项时遇到的问题。

        使用tar的时候,有时候需要排除要压缩的目录下的某个子目录,但此时可能会遇到一个问题,这和要压缩目录的相对路径和绝对路径的选择有关。比如:
    [root@cs6 www]# tar zcvf www.tar.gz ./html/ --exclude=/var/www/html/oldboy/test
    ./html/                                #<==打包路径为相对路径,--exclude的路径为绝对路径。
    ./html/4.html
    ./html/7.html
    ./html/oldboy/
    ./html/oldboy/test/            #<==没有成功排除。
    ./html/9.html
    ./html/2.html
    ./html/5.html
    ./html/3.html
    ./html/6.html
    ./html/10.html
    ./html/1.html
    ./html/8.html
    [root@cs6 www]#
    tar zcvf www.tar.gz ./html/ --exclude=html/oldboy/test ./html/ #<==打包路径为相对路径,--exclude的路径为相对路径。 ./html/4.html ./html/7.html ./html/oldboy/ ./html/9.html ./html/2.html ./html/5.html ./html/3.html ./html/6.html ./html/10.html ./html/1.html ./html/8.html [root@cs6 www]# tar zcvf www.tar.gz ./html/ --exclude=oldboy/test ./html/ #<==--exclude的相对路径去掉html也可以。 ./html/4.html ./html/7.html ./html/oldboy/ ./html/9.html ./html/2.html ./html/5.html ./html/3.html ./html/6.html ./html/10.html ./html/1.html ./html/8.html [root@cs6 www]# tar zcvf www.tar.gz /var/www/html/ --exclude=/var/www/html/oldboy/test tar: Removing leading `/' from member names #<==打包路径为绝对路径,--exclude的路径为绝对路径。 /var/www/html/ /var/www/html/4.html /var/www/html/7.html /var/www/html/oldboy/ /var/www/html/9.html /var/www/html/2.html /var/www/html/5.html /var/www/html/3.html /var/www/html/6.html /var/www/html/10.html /var/www/html/1.html /var/www/html/8.html [root@cs6 www]# tar zcvf www.tar.gz /var/www/html/ --exclude=html/oldboy/test tar: Removing leading `/' from member names #<==打包路径为绝对路径,--exclude的路径为相对路径。 /var/www/html/ /var/www/html/4.html /var/www/html/7.html /var/www/html/oldboy/ /var/www/html/9.html /var/www/html/2.html /var/www/html/5.html /var/www/html/3.html /var/www/html/6.html /var/www/html/10.html /var/www/html/1.html /var/www/html/8.html [root@cs6 www]# tar zcvf www.tar.gz /var/www/html/ --exclude=oldboy/test tar: Removing leading `/' from member names #<== --exclude的相对路径去择html也可以。 /var/www/html/ /var/www/html/4.html /var/www/html/7.html /var/www/html/oldboy/ /var/www/html/9.html /var/www/html/2.html /var/www/html/5.html /var/www/html/3.html /var/www/html/6.html /var/www/html/10.html /var/www/html/1.html /var/www/html/8.html
    若需要打包的目录为相对路径,则-exclude后只能接相对路径。
    若需要打包的目录为绝对路径,则--exclude后既能接绝对路径也能接相对路径。
    为方便起见,--exclude的后接路径和打包路径应保持形式一致,要么都是相对路径,要么都是绝对路径。

    打包/etc目录下所有的普通文件

    [root@cs6 /]# ls etc
    adjtime            DIR_COLORS               init.d          motd   
     
    [root@cs6 /]# tar zcvf /tmp/etc.tar.gz `find etc/ -type f`    #<==使用find找到所有的普通文件,在tar上命令语句中嵌套一个反引号包含的find命令语句。
    [root@cs6 /]# ll -h /tmp/etc.tar.gz
    -rw-r--r--. 1 root root 8.7M May 12 18:46 /tmp/etc.tar.gz
    经验技巧
    下面列出打包时的经验技巧以供大家参考。
    1)在打包一个目录之前,先进入到这个目录的上一级目录,然后执行打包命令,这是大部分情况下打包文件的规范操作流程。少数情况下打包需要完整的目录结构时,也可以使用绝对路径打包,但是需要注意的是解压tar包时压缩包内的文件是否会覆盖原始文件。
    2)打包模型为:tar zcf /路径/筐tar.gz 相对路径/苹果。打包其实就是把苹果放筐里。
     
     
     
  • 相关阅读:
    你不知道的javaScript笔记(7)
    你不知道的javaScript笔记(6)
    你不知道的javaScript笔记(5)
    你不知道的javaScript笔记(4)
    你不知道的javaScript笔记(3)
    你不知道的javaScript笔记(2)
    java 单链表反转
    Java找出两个链表的第一个公共节点
    Java产生死锁的一个简单例子
    Java 中Enum的使用与分析
  • 原文地址:https://www.cnblogs.com/wenyule/p/12214037.html
Copyright © 2011-2022 走看看