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 文件,是一个黑洞文件,任何内容重定向到此,都会消失,不保存。
  • 相关阅读:
    C# .NET Socket封装
    Web页面实现后台数据处理进度与剩余时间的显示
    彻底解决“从客户端中检测到有潜在危险的Request.Form值”
    自己封装的Windows7 64位旗舰版,微软官网上下载的Windows7原版镜像制作,绝对纯净版
    Oracle导入导出命令
    Oracle创建用户、表空间并设置权限
    Web Service 和WCF的比较
    Win10下IIS配置图解、MVC项目发布图解、IIS添加网站图解
    图表控件MsChart使用demo
    Excel中的宏--VBA的简单例子
  • 原文地址:https://www.cnblogs.com/lpeng94/p/12546512.html
Copyright © 2011-2022 走看看