zoukankan      html  css  js  c++  java
  • linux专题一之文件归档和压缩(tar、file、zip)

      本文主要从以下几个方便来说明文件的归档和压缩,同时比较几种不同压缩方法的压缩比率及特点。

    • 文件归档命令tar,tar.gz源码包的安装管理
    • 创建tar包-解压-查询tar包内容
    • zip命令的用法

         为什么要压缩?

         1.     方便使用、查询、阅读

         2.     易于管理 (批量删除文件)

    如图:主机A要跟主机B传输一个大小为10G的文件估计传送100s.

     

    如果直接传输会大量的占用流量带宽.导致公司的内网访问速度缓慢.

    传输前压缩-->传输后解压

    我把10G的文件压缩成5G,传送时间是50s.

    文件压缩的好处:

    1. 节约硬盘的资源.
    2. 加快文件传输的速率.

    1.文件归档命令

    1.1. tar命令的使用

     tar 文件.是把几个文件和(或)目录集合在一个文件夹里。是创建备份和归档的最佳工具

    作用:打包、压缩文件

    [root@xiaolyu ~]# tar --help

    Usage: tar [OPTION...] [FILE]...

    GNU `tar' saves many files together into a single tape or disk archive, and can

    restore individual files from the archive.

     

    Examples:

      tar -cf archive.tar foo bar  # Create archive.tar from files foo and bar.  创建存档

      tar -tvf archive.tar         # List all files in archive.tar verbosely.列出所有文件

      tar -xf archive.tar          # Extract all files from archive.tar. 从archive.tar提取所有文件

    tar 选项 包的名称  目标文件/目录

    [root@xiaolyu ~]# tar  cvf aa.tar a.out who.out  touch.txt  #归档

    # c  create 创建

    #v  详细

    #f  filename

    [root@xiaolyu ~]# tar tvf  aa.tar    #查看包里的文件

    [root@xiaolyu ~]# tar xf aa.tar #解包

    1.2 file命令

    linux对于文件的扩展名没有像windows要求的那么严格,所以在使用linux的过程中经常会遇到有些文件根本就没有扩展名,哪么我们应该如何去判断没有扩展名的文件,到底是文件还是目录呢?

     

    作用:确定文件类型

    语法:file  文件名

    [root@xiaolyu ~]# touch a.txt
    [root@xiaolyu ~]# file a.txt
    a.txt: empty
    [root@xiaolyu ~]# file /etc/passwd
    /etc/passwd: ASCII text
    [root@xiaolyu ~]# file /home/berners
    /home/berners: directory
    [root@xiaolyu ~]# file /etc/init.d/network
    /etc/init.d/network: Bourne-Again shell script, ASCII text executable
    [root@xiaolyu ~]#

    例:把两个目录或目标+文件打包成一个软件包

    [root@xiaolyu ~]# tar cvf bb.tar /boot/  /etc/passwd

    1.3 不解包,查看tar中的内容:

    [root@xiaolyu ~]# tar tvf bb.tar

    操作-解包:

    [root@localhost ~]# tar xvf bb.tar   #将bb.tar 解压

    注意: 解包过程中如果不指定解包路径,那么会按照原路径解包,会覆盖原文件,这一点要特别小心,尤其是原路径下的文件在打包后修改过。

     

    操作-解压指定路径:

    -C #指定解压的路径位置

    [root@xiaolyu ~]# tar xvf aa.tar -C /home/berners/  #将bb.tar 解压到/home/berners目录下

    [root@xiaolyu ~]# ls
    aa.tar    Documents    kernel.txt    Pictures    Templates
    anaconda-ks.cfg   Downloads    Music    Public    Videos
    Desktop    initial-setup-ks.cfg    passwd.txt    redhat.txt    who.out
    [root@xiaolyu ~]# tar xf aa.tar -C /home/berners
    [root@xiaolyu ~]# ls /home/berners
    a.out touch.txt who.out
    [root@xiaolyu ~]#

     

    操作-对比文件的大小:

    [root@xiaolyu ~]# du -sh aa.tar
    20K aa.tar
    [root@xiaolyu ~]# ll -h /home/berners/aa.tar
    -rw-r--r-- 1 root root 20K 8月 14 11:22 /home/berners/aa.tar
    [root@xiaolyu ~]#

     

    2. tar  归档 + 压缩

    gzip  bzip2  zip tar

    一、压缩格式:gz, bz2, xz, zip, Z

    格式(文件名格式): .tar.gz   或  .tgz

    语法格式:tar  zcvf   newfile.tar.gz   SOURCE

    root@xuegod61 ~]# tar zcf aa.tar.gz /home/berners/    #压缩

     

    2.1 比较tar zcf 压缩前后文件的大小。

    [root@xiaolyu ~]# ll -h aa.tar*

    -rw-r--r-- 1 root root 20K 8月 14 10:37 aa.tar   //压缩前20k。
    -rw-r--r-- 1 root root 3.7K 8月 14 12:51 aa.tar.gz //压缩后3.7k。

    用tar zcf压缩文件, 压缩前(20k)/压缩后(3.7k) = 5.4 倍。

    可能你要说我的文件比较小,那我来弄一个大的文件比较一下:

    [root@xiaolyu ~]# du -sh share.tar*
    1.2G share.tar
    457M share.tar.gz
    [root@xiaolyu ~]#

     这个文件比较大,压缩前和压缩后比率为 1.2*1024/457 = 2.69 倍。

    结论:tar zcf 这个压缩比率还是很低的。而且文件越大,越缩比率越低。

    2.2 解压

    语法格式:tar zxvf xx.tar.gz  .

    v可以省略,v用来表示操作过程是否显示。

    [root@xiaolyu ~]# tar zxf aa.tar.gz -C /home/lisi
    [root@xiaolyu ~]# ls -l /home/berners
    total 36
    -rw-r--r-- 1 root root 20480 8月 14 11:22 aa.tar
    -rwxr-xr-x 1 root root 8547 8月 13 19:46 a.out
    -rw-r--r-- 1 dabai xiaobai 0 8月 10 07:27 touch.txt
    -rw-r--r-- 1 root root 143 8月 13 12:23 who.out
    [root@xiaolyu ~]# ls -l /home/lisi
    total 0
    drwxr-xr-x 3 root root 20 8月 14 13:31 home
    [root@xiaolyu ~]# cd home
    [root@xiaolyu home]# ls
    berners
    [root@xiaolyu home]# cd berners
    [root@xiaolyu berners]# ls -l
    total 36
    -rw-r--r-- 1 root root 20480 8月 14 11:22 aa.tar
    -rwxr-xr-x 1 root root 8547 8月 13 19:46 a.out
    -rw-r--r-- 1 dabai xiaobai 0 8月 10 07:27 touch.txt
    -rw-r--r-- 1 root root 143 8月 13 12:23 who.out

    3. 归档+压缩 :bz2

    格式(文件名格式): .tar.bz2

    语法格式:tar  jcvf   newfile.tar.bz2   SOURCE

    4. zip软件包解压缩命令

    4.1 zip是压缩程序,unzip是解压程序。

    压缩文件

    [root@localhost ~]# zip passwd.zip /etc/passwd

     

    -r  压缩目录

    格式”zip 选项 名称  源”

    [root@localhost ~]# zip -r grub2.zip /boot/grub2/

    [root@localhost ~]# ll -h grub2.*

    -rw-r--r-- 1 root root 7.7M Feb 17 07:40 grub2.tar

    -rw-r--r-- 1 root root 2.5M Feb 17 08:02 grub2.tar.bz2

    -rw-r--r-- 1 root root 3.1M Feb 17 07:56 grub2.tar.gz

    -rw-r--r-- 1 root root 3.2M Feb 17 08:11 grub2.zip

    4.2 解压

    [root@localhost ~]# unzip grub2.zip -d /opt/

     

    -d指定路径

    ---------------------------------------------以下内容参考:http://blog.hehehehehe.cn/a/17148.htm

    Linux下如何解压.tar.bz2格式的压缩包 老版本的linux要两步,一步是解压缩,一步是解包
    bzip2 -d **.tar.bz2 //将文件解压成**.tar
    tar -xf **.tar //解包
    现在新出的linux版本,只要一步就可以解压完毕
    tar -xf **.tar.bz2

    linux下tar.gz、tar、bz2、zip等解压缩、压缩命令小结


    Linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的。生成tar包后,就可以用其它的程序来进
    行压缩了,所以首先就来讲讲tar命令的基本用法:
    tar命令的选项有很多(用man tar可以查看到),但常用的就那么几个选项,下面
    来举例说明一下:
    # tar -cf all.tar *.jpg
    这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包
    ,-f指定包的文件名。
    # tar -rf all.tar *.gif
    这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的
    意思。
    # tar -uf all.tar logo.gif
    这条命令是更新原来tar包all.tar中logo.gif文件,-u是表示更新文件的意思。

    # tar -tf all.tar
    这条命令是列出all.tar包中所有文件,-t是列出文件的意思
    # tar -xf all.tar
    这条命令是解出all.tar包中所有文件,-x是解开的意思
    以上就是tar的最基本的用法。为了方便用户在打包解包的同时可以压缩或解压
    文件,tar提供了一种特殊的功能。这就是tar可以在打包或解包的同时调用其它的压
    缩程序,比如调用gzip、bzip2等。
    1) tar调用gzip
      gzip是GNU组织开发的一个压缩程序,.gz结尾的文件就是gzip压缩的结果。与gzip
    相对的解压程序是gunzip。tar中使用-z这个参数来调用gzip。下面来举例说明一下

    # tar -czf all.tar.gz *.jpg
    这条命令是将所有.jpg的文件打成一个tar包,并且将其用gzip压缩,生成一个
    gzip压缩过的包,包名为all.tar.gz
    # tar -xzf all.tar.gz
    这条命令是将上面产生的包解开。
    2) tar调用bzip2
      bzip2是一个压缩能力更强的压缩程序,.bz2结尾的文件就是bzip2压缩的结果。
    与bzip2相对的解压程序是bunzip2。tar中使用-j这个参数来调用gzip。下面来举例
    说明一下:
    # tar -cjf all.tar.bz2 *.jpg
    这条命令是将所有.jpg的文件打成一个tar包,并且将其用bzip2压缩,生成一个
    bzip2压缩过的包,包名为all.tar.bz2
    # tar -xjf all.tar.bz2
    这条命令是将上面产生的包解开。
    3)tar调用compress
      compress也是一个压缩程序,但是好象使用compress的人不如gzip和bzip2的人
    多。.Z结尾的文件就是bzip2压缩的结果。与 compress相对的解压程序是uncompress
    。tar中使用-Z这个参数来调用compress。下面来举例说明一下:
    # tar -cZf all.tar.Z *.jpg
    这条命令是将所有.jpg的文件打成一个tar包,并且将其用compress压缩,生成
    一个uncompress压缩过的包,包名为all.tar.Z
    # tar -xZf all.tar.Z
    这条命令是将上面产生的包解开

    有了上面的知识,你应该可以解开多种压缩文件了,下面对于tar系列的压缩文
    件作一个小结:
    1)对于.tar结尾的文件
    tar -xf all.tar
    2)对于.gz结尾的文件
    gzip -d all.gz
    gunzip all.gz
    3)对于.tgz或.tar.gz结尾的文件
    tar -xzf all.tar.gz
    tar -xzf all.tgz
    4)对于.bz2结尾的文件
    bzip2 -d all.bz2
    bunzip2 all.bz2
    5)对于tar.bz2结尾的文件
    tar -xjf all.tar.bz2
    6)对于.Z结尾的文件
    uncompress all.Z
    7)对于.tar.Z结尾的文件
    tar -xZf all.tar.z

    另外对于Window下的常见压缩文件.zip和.rar,Linux也有相应的方法来解压它
    们:
    1)对于.zip
      linux下提供了zip和unzip程序,zip是压缩程序,unzip是解压程序。它们的参
    数选项很多,这里只做简单介绍,依旧举例说明一下其用法:
    # zip all.zip *.jpg
    这条命令是将所有.jpg的文件压缩成一个zip包
    # unzip all.zip
    这条命令是将all.zip中的所有文件解压出来
    2)对于.rar
    要在linux下处理.rar文件,需要安装RAR for Linux,可以从网上下载,但要记住,RAR for Linux 不是免费的;可从http://www.rarsoft.com/download.htm下载RARfor Linux 3.2.
    0,然后安装:
    # tar -xzpvf rarlinux-3.2.0.tar.gz
    # cd rar
    # make
    这样就安装好了,安装后就有了rar和unrar这两个程序,rar是压缩程序,unrar 是解压程序。它们的参数选项很多,这里只做简单介绍,依旧举例说明一下其用法:

    # rar a all *.jpg
    这条命令是将所有.jpg的文件压缩成一个rar包,名为all.rar,该程序会将.rar
    扩展名将自动附加到包名后。
    # unrar e all.rar
    这条命令是将all.rar中的所有文件解压出来
    到此为至,我们已经介绍过linux下的tar、gzip、gunzip、bzip2、bunzip2、compress 、 uncompress、 zip、unzip、rar、unrar等程式,你应该已经能够使用它们对.tar 、.gz、.tar.gz、.tgz、.bz2、.tar.bz2、. Z、.tar.Z、.zip、.rar这10种压缩文
    件进行解压了,以后应该不需要为下载了一个软件而不知道如何在Linux下解开而烦恼了。而且以上方法对于Unix也基本有效。
    本文介绍了linux下的压缩程式tar、gzip、gunzip、bzip2、bunzip2、compress 、uncompress、 zip、 unzip、rar、unrar等程式,以及如何使用它们对.tar、.gz 、.tar.gz、.tgz、.bz2、.tar.bz2、.Z、. tar.Z、.zip、.rar这10种压缩文件进行
    操作。

    以下补充

    tar

    -c: 建立压缩档案
    -x:解压
    -t:查看内容
    -r:向压缩归档文件末尾追加文件
    -u:更新原压缩包中的文件

    这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。

    -z:有gzip属性的
    -j:有bz2属性的
    -Z:有compress属性的
    -v:显示所有过程
    -O:将文件解开到标准输出

    下面的参数-f是必须的
    -f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。
    # tar -cf all.tar *.jpg这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包,-f指定包的文件名。
    # tar -rf all.tar *.gif
    这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。
    # tar -uf all.tar logo.gif
    这条命令是更新原来tar包all.tar中logo.gif文件,-u是表示更新文件的意思。
    # tar -tf all.tar
    这条命令是列出all.tar包中所有文件,-t是列出文件的意思
    # tar -xf all.tar
    这条命令是解出all.tar包中所有文件,-x是解开的意思
    压缩
    tar –cvf jpg.tar *.jpg //将目录里所有jpg文件打包成tar.jpg
    tar –czf jpg.tar.gz *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用gzip压缩,生成一个gzip压缩过的包,命名为jpg.tar.gz
    tar –cjf jpg.tar.bz2 *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用bzip2压缩,生成一个bzip2压缩过的包,命名为jpg.tar.bz2
    tar –cZf jpg.tar.Z *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用compress压缩,生成一个umcompress压缩过的包,命名为jpg.tar.Z
    rar a jpg.rar *.jpg //rar格式的压缩,需要先下载rar for linux
    zip jpg.zip *.jpg //zip格式的压缩,需要先下载zip for linux

    解压
    tar –xvf file.tar //解压 tar包
    tar -xzvf file.tar.gz //解压tar.gz
    tar -xjvf file.tar.bz2 //解压 tar.bz2
    tar –xZvf file.tar.Z //解压tar.Z
    unrar e file.rar //解压rar
    unzip file.zip //解压zip

    总结
    1、*.tar 用 tar –xvf 解压
    2、*.gz 用 gzip -d或者gunzip 解压
    3、*.tar.gz和*.tgz 用 tar –xzf 解压
    4、*.bz2 用 bzip2 -d或者用bunzip2 解压
    5、*.tar.bz2用tar –xjf 解压
    6、*.Z 用 uncompress 解压
    7、*.tar.Z 用tar –xZf 解压
    8、*.rar 用 unrar e解压
    9、*.zip 用 unzip 解压

    参考:http://blog.hehehehehe.cn/a/17148.htm

  • 相关阅读:
    86. Partition List
    328. Odd Even Linked List
    19. Remove Nth Node From End of List(移除倒数第N的结点, 快慢指针)
    24. Swap Nodes in Pairs
    2. Add Two Numbers(2个链表相加)
    92. Reverse Linked List II(链表部分反转)
    109. Convert Sorted List to Binary Search Tree
    138. Copy List with Random Pointer
    为Unity的新版ugui的Prefab生成预览图
    ArcEngine生成矩形缓冲区
  • 原文地址:https://www.cnblogs.com/jasmine-Jobs/p/5769469.html
Copyright © 2011-2022 走看看