zoukankan      html  css  js  c++  java
  • Linux下的压缩之tar,zip,gzip,bzip2

    如何在虚拟机里配置ip地址?

    1.临时配置ip地址,重新启动系统会失效

    [root@chinaitsoft ~]# ip add     (查看ip地址(ip address))
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 00:0c:29:5b:6e:39 brd ff:ff:ff:ff:ff:ff
        inet 172.16.80.80/16 brd 172.16.255.255 scope global eth0
        inet6 fe80::20c:29ff:fe5b:6e39/64 scope link 
           valid_lft forever preferred_lft forever
    [root@chinaitsoft ~]#

    eth0 是第1块网卡。eth即ethernet(以太网)
    eth1 是第2块网卡。
    PS:
    仅仅是redhat 5、6 系统里,到了redhat7 时候,不一样。

    2.第2步配置ip

    # ifconfig  eth0 172.16.80.81/16   
    给eth0网卡设置ip地址为172.16.80.81 子网掩码为255.255.0.0

    3.然后再使用xshell连接到ip 172.16.80.81

    VMware的配置

    菜单栏Edit –>viturl network editor(虚拟网络编辑器)
    虚拟机里的网卡类型:

    • VMnet0 —-》桥接bridged
      —》可以选择无线网卡也可以选择有线网卡(推荐)—》连接到本地连接网络接口通信 —》你的虚拟器的ip地址需要和本地连接的ip地址是相同网段;
    • VMnet1 —-》hostonly —》只是和你本机通信—》VMware Network Adapter
      VMnet1 —》你的虚拟器的ip地址需要和VMNET1的ip地址是相同网段
    • VMnet8 —-》NAT —-》VMware Network Adapter VMnet8
      –》你的虚拟器的ip地址需要和本地连接的vmnet8接口是相同网段

    Linux中的压缩命令

    windows里的压缩软件:winrar 、zip、好压、2345
    windows里的压缩文件,是否在linux下可以解压缩?
    答: .rar 格式的压缩包在linux下不是特别容易打开,需要安装rar相关的软件,不是默认的压缩软件。
    建议在windows下打包为.zip的压缩包,linux下非常方便解压。


    tar、zip、gzip、bzip2详解

    linux下的压缩格式:

    • .tar.xz
    • .tar.gz
    • .tar.bz2
    • .zip
    • .iso—->需要相应的软件打开
      windows里的压缩格式:
    • .rar
    • .zip
    • .iso

    zip命令详解

    用法:zip 新压缩文件名 文件1 文件2

    # cp /etc/hosts .
    # cp /boot  . -r
    # zip hosts.zip  hosts  
    将hosts文件压缩成hosts.zip

    unzip解压

    格式:unzip [-l] 文件名

    # unzip boot.zip 
    Archive:  boot.zip
       creating: boot/

    注意:

    • zip不能对文件夹进行压缩;
    • zip 在压缩和解压的过程中源文件始终保留。

    gzip压缩
    格式:gzip 要压缩文件
    gzip 直接在源文件上打压缩包,压缩包的扩展名为.gz

    # gunzip hosts.gz  解压缩
    # gzip -9 hosts  还是压缩效果会好一些

    PS:- 9表示高压缩比,默认为6,最高为9。

    # cat hosts.gz  会显示乱码
    # zcat hosts.gz  不会显示乱码

    bzip2压缩

    格式:bzip2 要压缩文件
    bzip2 直接在源文件上打压缩包,压缩包的扩展名为 .bz2

    小结:

    压缩命令 压缩格式 解压命令 是否在源文件操作
    zip .zip unzip
    gzip .gz gunzip或gzip -d
    bzip2 .bz2 bunzip2或者bzip2 -d

    三个命令相同点:
    都只能对 文件 进行压缩,不能对文件夹进行压缩。

    tar命令

    tar 可以对文件和文件夹进行压缩

    • 用途:制作归档文件、释放归档文件
    • 格式:tar [选项]… 归档文件名 源文件或目录
      tar [选项]… 归档文件名 [-C 目标目录]
    • 常用命令选项 (tar -czvf)
      • -c:创建 .tar 格式的包文件 -c,即-create;
      • -x:解开.tar格式的包文件 -x, 即-extract(提取);
      • -v:输出详细信息 -v, 即-verbose(冗长的,多余的);
      • -f:表示使用归档文件 -f, 即-file;
      • -t:列表查看包内的文件;
      • -C:指定解压目录;
      • -t, –list,list the contents(内容) of an archive(文档);
      • -p:保持原文件的原来属性,即-preserve-permissions;
      • -P:保持原文件的绝对路径;
      • -j :即–bzip2
      • -z :即–gzip
      • -J –xz
    # tar  -czvf  messages_passwd.tar.gz  messages passwd 
    同时将2个文件打包成messages_passwd.tar.gz ,此文件存放在当前目录下
    # tar -tf messages_passwd.tar.gz  查看压缩里的内容
    messages
    passwd
    # tar -czf  messages_passwd.tar.gz  messages passwd
    hosts    
    再次打包文件,如果文件名相同,存放的路径也相同,会替换原来的文件
    # tar -czf  /backup/messages_passwd.tar.gz  messages
    passwd 
    指定压缩打包文件存放的路径在/backup目录下,不指定默认情况下在当前目录。

    tar三种压缩格式的对比:

    # tar czvf messages.tar.gz  messages
    messages
    # tar cjvf messages.tar.bz2 messages
    messages
    # tar cJvf messages.tar.xz messages
    messages
    # ls
    hosts     messages_passwd.tar.gz  messages.tar.gz  passwd
    messages  messages.tar.bz2        messages.tar.xz  passwd.tar.gz
    # ll
    总用量 336
    -rw-r--r-- 1 root root    326 1217 08:19 hosts
    -rw------- 1 root root 229215 1217 08:11 messages
    -rw-r--r-- 1 root root  30276 1217 08:19 messages_passwd.tar.gz
    -rw-r--r-- 1 root root  18382 1217 08:25 messages.tar.bz2
    -rw-r--r-- 1 root root  28829 1217 08:24 messages.tar.gz
    -rw-r--r-- 1 root root  15156 1217 08:25 messages.tar.xz
    -rw-r--r-- 1 root root   3242 1217 08:11 passwd
    -rw-r--r-- 1 root root   1256 1217 08:22 passwd.tar.gz

    结论:xz 压缩效果最好

    xz—》bzip2—》gz

    xf 可解压.tar.gz 、 .tar.bz2 、 .tar.xz 的压缩包

    PS:解压文件的时候,解压出来的文件默认情况下放在当前目录,如果当前目录下有相同的文件,后来解压出来的文件会替换原来的文件。

    # tar xf messages.tar.bz2
    解压messages.tar.bz2文件,存放在当前目录下
    # tar xvf messages.tar.bz2 
    messages

    -C 指定解压目录

    # tar xf messages.tar.bz2 -C /liuzhuang/
    将当前目录下的messages.tar.bz2解压到/liuzhuang目录下

    压缩小技巧:

    1. 创建压缩文件的时候,使用绝对路径指定创建压缩文件的路径;
    2. 解压缩的时候,使用-C 指定压缩文件存放的路径

    PS:打包备份文件的时候,使用绝对路径会有相关提醒,例如:tar:
    从成员名中删除开头的“/”
    因为解压的时候,不指定路径,就直接解压到当前目录,如果你带着/,解压的时候如果替换原来的文件,会导致原来的文件丢失。不是我们希望看到的。

    小例子:

    # tar czf  /lianxi/bak/passwd_host_boot.tar.gz
      /etc/passwd    /etc/hosts     /boot
    tar: 从成员名中删除开头的“/”
    
    # LANG=en_US.UTF-8
    # tar czf  /lianxi/bak/passwd_host_boot.tar.gz
    /etc/passwd  /etc/hosts   /boot
    tar: Removing leading `/' from member names---》正常

    一点点的小结

    • 创建压缩包

      • -cjvf —>tar.bz2
      • -czvf —>tar.gz
      • -cJvf —>tar.xz
      • —>默认情况下redhat 5是没有安装xz这个软件
    • xf 解压

    • tf 查看

    • # cat xxx.gz 会显示乱码
    • # zcat xxx.gz 不会显示乱码

    练习:

    事前将/lianxi目录下的内容清空:
    rm -rf /lianxi/*

    1. 创建一个目录在/lianxi下叫tar;
    2. 进入tar目录,复制/etc/hosts文件和/etc/passwd到tar目录下;
    3. 复制/boot目录到tar目录下
    4. 将当前目录下的boot目录打包放在/lianxi/tar目录下叫boot.tar.gz;(tar czvf /lianxi/tar/boot.tar.gz boot)
    5. 查看boot.tar.gz文件里的内容;(tar tf boot.tar.gz)
    6. 将hosts文件和passwd文件打包放到host_passwd.tar.bz2 文件(tar cjvf host_passwd_tar.bz2 hosts passwd )
    7. 查看host_passwd.tar.bz2文件里的内容(tf);
    8. 将/boot/目录和/etc/passwd、/var/log目录备份到/lianxi目录下叫boot_pw_log.tar.xz(cJvf);
    9. 新建/bak目录,然后将/lianxi目录下的boot_pw_log.tar.xz解压到/bak目录下。
      (tar xf /lianxi/boot_pw_log.tar.xz -C /bak)

    备份的时候排除

    将/bak目录下的httpd-2.2.31目录,排除不备份到/lianxi/no_httpd.tar.gz目录里:

    # tar czvf /lianxi/no_httpd.tar.gz  /bak --exclude=/bak/httpd-2.2.31
    排除多个文件使用{}括起来,中间使用逗号分隔:
    # tar czvf /lianxi/no_httpd.tar.gz  /bak
    --exclude=/bak/{httpd-2.2.31,var}

    练习:写一个脚本实现备份/var/log目录下的所有文件到/bak目录下,要求文件名是包含当天日期,文件名例如:2015-12-27-16_30-log.tar.gz。同时要求删除七天前的备份文件,只保留最近7天的。

    分析:
    备份—》tar
    tar czvf /bak/log.tar.gz /var/log
    date +%F-%H_%M_%S
    find /bak -mtime +7 -exec rm -rf {} ;

    # date
    20151217日 星期四 10:23:46 CST
    # date +%F
    2015-12-17
    # date +%F-%H_%M
    2015-12-17-10_24

    PS:脚本文件—》其实就是里面放了很多条命令的文件,命令在执行的时候,从第1条开始执行,直到最后一条,如果中间有条件判断,根据相应的判断条件来进行了。
    答案:

    [root@chinaitsoft lianxi]# vim back_log.sh
    #!/bin/bash        
    #指定执行脚本的shell是使用bash
    b_time=`date +%F-%H_%M_%S`             
    #获得当时的时间
    tar czf /bak/$b_time-log.tar.gz  /var/log     
    #备份/var/log到/bak
    find /bak -mtime +7 -exec rm -rf {} ;    
    #删除7天前的文件
    
    [root@chinaitsoft lianxi]# bash back_log.sh  执行脚本
    tar: 从成员名中删除开头的“/”
    [root@chinaitsoft lianxi]#

    多执行几次脚本,多产生几个备份文件

    [root@chinaitsoft bak]# ls
    2015-12-17-10_38_12-log.tar.gz  2015-12-17-10_39_22-log.tar.gz
    2015-12-17-10_38_19-log.tar.gz  2015-12-17-10_39_23-log.tar.gz
    2015-12-17-10_38_21-log.tar.gz  2015-12-17-10_39_24-log.tar.gz
    2015-12-17-10_38_22-log.tar.gz  2015-12-17-10_40_17-log.tar.gz
    2015-12-17-10_39_21-log.tar.gz
    [root@chinaitsoft bak]# date
    20151217日 星期四 10:42:17 CST
    [root@chinaitsoft bak]# date -s 2015-12-30(调整系统的时间为2015-12-30)
    20151230日 星期三 00:00:00 CST
    [root@chinaitsoft bak]# date
    20151230日 星期三 00:00:01 CST
    [root@chinaitsoft lianxi]# bash back_log.sh 再次执行脚本看效果
    tar: 从成员名中删除开头的“/”
    [root@chinaitsoft lianxi]# bash back_log.sh 
    tar: 从成员名中删除开头的“/”
    [root@chinaitsoft lianxi]# cd /bak
    [root@chinaitsoft bak]# ls(会发现原来的备份文件被删除)
    2015-12-30-00_01_34-log.tar.gz  2015-12-30-00_01_36-log.tar.gz
    [root@chinaitsoft bak]#

    [ ] 判断文件是否存在

    # [ -d /bak ]    

    注意:

    1. 语法[] 前后要有空格;
    2. 作用是判断/bak目录是否存在,如果存在$?返回值为0 ,如果非0,就说明目录不存在。
    # echo $?   
    查看返回值
    • $?代表上一条命令执行是否成功的返回值,如果执行成功就为0,不成功就是非0
    [ -d /bak ]&&echo /bak is exist ||mkdir /bak
    • [ -d /bak ] 判断文件夹是否存在 (directory)

    • 命令 && command1 || command2 ,如果命令执行成功,则执行命令1,否则执行命令2

    • if [ -d /bak ] 条件如果成立(命令执行成功)执行echo /bak is exist ,否则执行mkdir /bak

    改良了的脚本:

    [root@chinaitsoft lianxi]# vim back_log.sh
    #!/bin/bash
    [ -d /bak ]&&echo "/bak is existing"||mkdir /bak
    b_time=`date +%F-%H_%M_%S`
    tar czf /bak/$b_time-log.tar.gz  /var/log  &>/dev/null&&echo "backup ok"||echo "backup failed"
    find /bak -mtime +7 -exec rm -rf {} ;
    • &>/dev/null 将命令的任何输出,不管正确的还是错误的都重定向到/dev/null文件;
    • /dev/null 文件,是一个黑洞文件,任何内容重定向到此,都会消失,不保存。
  • 相关阅读:
    剑指Offer-30.连续子数组的最大和(C++/Java)
    剑指Offer-29.最小的K个数(C++/Java)
    UVA 1616 Caravan Robbers 商队抢劫者(二分)
    UVA 10570 Meeting with Aliens 外星人聚会
    UVA 11093 Just Finish it up 环形跑道 (贪心)
    UVA 12673 Erratic Expansion 奇怪的气球膨胀 (递推)
    UVA 10954 Add All 全部相加 (Huffman编码)
    UVA 714 Copying Books 抄书 (二分)
    UVALive 3523 Knights of the Round Table 圆桌骑士 (无向图点双连通分量)
    codeforecs Gym 100286B Blind Walk
  • 原文地址:https://www.cnblogs.com/lpeng94/p/12546512.html
Copyright © 2011-2022 走看看