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 文件,是一个黑洞文件,任何内容重定向到此,都会消失,不保存。
原文地址:https://www.cnblogs.com/lpeng94/p/12546512.html