zoukankan      html  css  js  c++  java
  • 第十天 1-9 rhel7-文件的归档和压缩

    大纲:
    文件的归档和压缩
    1、tar命令的使用及参数解析
    tar、gz、bz/bz2文件的创建、查看及解压
    zip/unzip命令的使用

    一、文件的归档和压缩

    在我们的计算机中,经常会遇到有好多文件名相似或作用相似的文件,所有文件都摆放到一起
    看着很乱,而且不易于查找和管理,这是,我们会对功能或名字相似的文件分别放在不同的文件夹中,便于管理和浏览,把这些文件都放在文件夹中的操作就叫做归档!!!!

    归档的好处:
    1.方便使用、查询、阅读
    2.易于管理 (批量删除文件)

    为什么要压缩?

    如图:主机A要跟主机B传输一个大小为10G的文件估计传送100s.
    如果直接传输会大量的占用流量带宽.导致公司的内网访问速度缓慢.
    传输前压缩--传输后解压

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

    文件压缩的好处:
    1.节约硬盘的资源.
    2.加快文件传输的速率.

    1.1 文件的归档
    在Linux中我们通常使用tar命令,将文件归档
    归档文件的类型有:tar、gz、bz/bz2、Z、zip等

    tar、gz、bz2/bz文件的创建、查看及解压---tar命令的使用
    我们可以使用命令man tar 或 tar --help命令查看帮助信息,
    查看命令如何使用:

    [root@xiaogan ~]# 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  # 创建tar包,将foo和bar归档到archive.tar中
      tar -tvf archive.tar        # 查看archive.tar文件中归档的文件有哪些
      tar -xf archive.tar          # 将archive.tar文件解包

    -A # 向压缩包文件中添加tar包文件 append tar files to an archive
    -c # 创建
    -r # 将要归档的文件添加到本文件的末尾 append files to the end of an archive
    -t # 列出压缩包中文件目录
    -u # 对tar包中文件进行升级(只对tar包中有改动的文件进行添加)
    only append files newer than copy in archive
    -d # 比较tar包与文件系统中的不通,删除tar包中的不通内容
    -x # 解包 extract files from an archive

    -f # 指定创建or解包归档文件的名字
    -v # 显示详细信息、or显示进度
    -k # 解包时,跳过已经存在的文件,不覆盖
    -m # 解包时,设定文件的修改时间为现在

    -z # gz文件创建及解压参数 filter the archive through gzip
    -j # bz/bz2文件创建及解压参数 filter the archive through bzip2
    -J # xz文件创建及解压参数 filter the archive through xz
    -C # --directory=DIR指定解压文件路径 change to directory DIR
    zip文件的创建、查看及解压---zip、unzip命令的使用

    zip --help

    [root@xiaogan ~]# zip --help
    Copyright (c) 1990-2008 Info-ZIP - Type 'zip "-L"' for software license.
    Zip 3.0 (July 5th 2008). Usage:
    zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [zipfile list] [-xi list]
      The default action is to add or replace zipfile entries from list, which
      can include the special name - to compress standard input.
      If zipfile and list are omitted, zip compresses stdin to stdout.
      -f  freshen: only changed files  -u  update: only changed or new files
      -d  delete entries in zipfile    -m  move into zipfile (delete OS files)
      -r  recurse into directories    -j  junk (don't record) directory names
      -0  store only                  -l  convert LF to CR LF (-ll CR LF to LF)
      -1  compress faster              -9  compress better
      -q  quiet operation              -v  verbose operation/print version info
      -c  add one-line comments        -z  add zipfile comment
      -@  read names from stdin        -o  make zipfile as old as latest entry
      -x  exclude the following names  -i  include only the following names
      -F  fix zipfile (-FF try harder) -D  do not add directory entries
      -A  adjust self-extracting exe  -J  junk zipfile prefix (unzipsfx)
      -T  test zipfile integrity      -X  eXclude eXtra file attributes
      -y  store symbolic links as the link instead of the referenced file
      -e  encrypt                      -n  don't compress these suffixes
      -h2  show more help


    格式:zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [zipfile list] [-xi list]
    unzip --help

    [root@xiaogan ~]# unzip --help
    UnZip 6.00 of 20 April 2009, by Info-ZIP.  Maintained by C. Spieler.  Send
    bug reports using http://www.info-zip.org/zip-bug.html; see README for details.
    
    Usage: unzip [-Z] [-opts[modifiers]] file[.zip] [list] [-x xlist] [-d exdir]
      Default action is to extract files in list, except those in xlist, to exdir;
      file[.zip] may be a wildcard.  -Z => ZipInfo mode ("unzip -Z" for usage).
    
      -p  extract files to pipe, no messages    -l  list files (short format)
      -f  freshen existing files, create none    -t  test compressed archive data
      -u  update files, create if necessary      -z  display archive comment only
      -v  list verbosely/show version info      -T  timestamp archive to latest
      -x  exclude files that follow (in xlist)  -d  extract files into exdir
    modifiers:
      -n  never overwrite existing files        -q  quiet mode (-qq => quieter)
      -o  overwrite files WITHOUT prompting      -a  auto-convert any text files
      -j  junk paths (do not make directories)  -aa treat ALL files as text
      -U  use escapes for all non-ASCII Unicode  -UU ignore any Unicode fields
      -C  match filenames case-insensitively    -L  make (some) names lowercase
      -X  restore UID/GID info                  -V  retain VMS version numbers
      -K  keep setuid/setgid/tacky permissions  -M  pipe through "more" pager
    See "unzip -hh" or unzip.txt for more help.  Examples:
      unzip data1 -x joe  => extract all files except joe from zipfile data1.zip
      unzip -p foo | more  => send contents of foo.zip via pipe into program more
      unzip -fo foo ReadMe => quietly replace existing ReadMe if archive file newer

    实验:

    1、归档文件创建、查看及解包

    [root@xiaogan ~]# tar -cf grub2.tar /boot/grub2/
    tar: Removing leading `/' from member names #详见注释
    [root@xiaogan ~]# tar -tf grub2.tar
    boot/grub2/
    boot/grub2/themes/
    boot/grub2/themes/system/
    ......
    boot/grub2/fonts/unicode.pf2
    boot/grub2/grubenv
    boot/grub2/grub.cfg
    [root@xiaogan ~]# ls
    anaconda-ks.cfg  Documents  grub2.tar            Music    Public  Templates
    Desktop          Downloads  initial-setup-ks.cfg  Pictures  soft    Videos
    [root@xiaogan ~]# tar -xf grub2.tar
    [root@xiaogan ~]# ls
    anaconda-ks.cfg  Desktop    Downloads  initial-setup-ks.cfg  Pictures  soft      Videos
    boot            Documents  grub2.tar  Music                Public    Templates
    [root@xiaogan ~]# ls boot
    grub2
    [root@xiaogan ~]# 

    2、gz压缩文件的创建、查看及解包

    [root@xiaogan ~]# tar -zcf grub2.tar.gz /boot/grub2/
    tar: Removing leading `/' from member names #详见注释
    [root@xiaogan ~]# ls
    anaconda-ks.cfg  Desktop    Downloads  grub2.tar.gz          Music    Public  Templates
    boot            Documents  grub2.tar  initial-setup-ks.cfg  Pictures  soft    Videos
    [root@xiaogan ~]# tar -tvf grub2.tar.gz #查看命令效果,与实验一对比有木有发现,加V和不加V的区别?!
    drwx------ root/root        0 2016-07-27 21:54 boot/grub2/
    drwxr-xr-x root/root        0 2016-07-27 21:45 boot/grub2/themes/
    drwxr-xr-x root/root        0 2015-10-13 00:57 boot/grub2/themes/system/
    ......
    -rw-r--r-- root/root  2560080 2016-07-27 21:53 boot/grub2/fonts/unicode.pf2
    -rw-r--r-- root/root      1024 2016-07-27 21:54 boot/grub2/grubenv
    -rw-r--r-- root/root      4257 2016-07-27 21:54 boot/grub2/grub.cfg
    [root@xiaogan ~]# rm -rf boot
    [root@xiaogan ~]# ls
    anaconda-ks.cfg  Documents  grub2.tar    initial-setup-ks.cfg  Pictures  soft      Videos
    Desktop          Downloads  grub2.tar.gz  Music                Public    Templates
    [root@xiaogan ~]# tar -zxf grub2.tar.gz
    [root@xiaogan ~]# ls
    anaconda-ks.cfg  Desktop    Downloads  grub2.tar.gz          Music    Public  Templates
    boot            Documents  grub2.tar  initial-setup-ks.cfg  Pictures  soft    Videos
    [root@xiaogan ~]# ls boot/grub2/
    device.map  fonts  grub.cfg  grubenv  i386-pc  locale  themes
    [root@xiaogan ~]#

    3、bz/bz2压缩文件的创建、查看及解包

    [root@xiaogan ~]# tar -jcf grub2.tar.bz2 /boot/grub2/
    tar: Removing leading `/' from member names #详见注释
    [root@xiaogan ~]# ls
    anaconda-ks.cfg  Desktop    Downloads  grub2.tar.bz2  initial-setup-ks.cfg  Pictures  soft      Videos
    boot            Documents  grub2.tar  grub2.tar.gz  Music                Public    Templates
    [root@xiaogan ~]# tar -tf grub2.tar.bz2 
    boot/grub2/
    boot/grub2/themes/
    boot/grub2/themes/system/
    ......
    boot/grub2/fonts/unicode.pf2
    boot/grub2/grubenv
    boot/grub2/grub.cfg
    [root@xiaogan ~]# ls
    anaconda-ks.cfg  Desktop    Downloads  grub2.tar.bz2  initial-setup-ks.cfg  Pictures  soft      Videos
    boot            Documents  grub2.tar  grub2.tar.gz  Music                Public    Templates
    [root@xiaogan ~]# rm -rf boot
    [root@xiaogan ~]# ls
    anaconda-ks.cfg  Documents  grub2.tar      grub2.tar.gz          Music    Public  Templates
    Desktop          Downloads  grub2.tar.bz2  initial-setup-ks.cfg  Pictures  soft    Videos
    [root@xiaogan ~]# tar -jxf grub2.tar.bz2 
    [root@xiaogan ~]# ls
    anaconda-ks.cfg  Desktop    Downloads  grub2.tar.bz2  initial-setup-ks.cfg  Pictures  soft      Videos
    boot            Documents  grub2.tar  grub2.tar.gz  Music                Public    Templates
    [root@xiaogan ~]# ls boot/grub2/
    device.map  fonts  grub.cfg  grubenv  i386-pc  locale  themes
    [root@xiaogan ~]#

    注释:tar: Removing leading `/' from member names

    不是错误,是tar删除了绝对路径最开始 / 而进行的提示。

    压缩包里面的文件是绝对路径很容易害死人。

    我就因为解压一个 cpio 包,里面文件竟然是绝对路径文件而不得不重装系统。

    4、zip/unzip命令的使用
    创建:(压缩目录或文件)

    [root@xiaogan ~]# zip -r boot.zip boot
      adding: boot/ (stored 0%)
      adding: boot/grub2/ (stored 0%)
      adding: boot/grub2/themes/ (stored 0%)
      adding: boot/grub2/themes/system/ (stored 0%)
      adding: boot/grub2/device.map (deflated 25%)
    ......
      adding: boot/grub2/fonts/unicode.pf2 (deflated 56%)
      adding: boot/grub2/grubenv (deflated 89%)
      adding: boot/grub2/grub.cfg (deflated 68%)
    [root@xiaogan ~]# zip passwd.zip /etc/passwd
      adding: etc/passwd (deflated 61%)

    解压:

    [root@xiaogan ~]# mkdir test
    [root@xiaogan ~]# unzip -d ./test boot.zip
    Archive:  boot.zip
      creating: ./test/boot/
      creating: ./test/boot/grub2/
      creating: ./test/boot/grub2/themes/
      creating: ./test/boot/grub2/themes/system/
      inflating: ./test/boot/grub2/device.map  
      creating: ./test/boot/grub2/i386-pc/
      inflating: ./test/boot/grub2/i386-pc/acpi.mod 
    ......
      inflating: ./test/boot/grub2/locale/en@piglatin.mo  
      creating: ./test/boot/grub2/fonts/
      inflating: ./test/boot/grub2/fonts/unicode.pf2  
      inflating: ./test/boot/grub2/grubenv  
      inflating: ./test/boot/grub2/grub.cfg  
    [root@xiaogan ~]# unzip passwd.zip -d ./test/
    Archive:  passwd.zip
      inflating: ./test/etc/passwd      
    [root@xiaogan ~]#

    4、比较四种创建方式的不同

    [root@xiaogan ~]# ls -lh *.tar* *.zip
    -rw-r--r-- 1 root root 3.2M 8月  10 23:03 boot.zip
    -rw-r--r-- 1 root root 7.7M 8月  10 21:42 grub2.tar
    -rw-r--r-- 1 root root 2.5M 8月  10 22:06 grub2.tar.bz2
    -rw-r--r-- 1 root root 3.1M 8月  10 22:05 grub2.tar.gz
    -rw-r--r-- 1 root root 1.1K 8月  10 23:03 passwd.zip

    有木有注意到?!三种创建归档文件的方式的不同?!

    tar不压缩
    gz文件压缩,但是压缩效率没有tar.bz2效果好!!!


    1.2 file命令

    在Linux系统中,对文件拓展名的应用不如windows运用的那么好,我们通常可以使用
    ls -l命令,查看文件的类型,也可以通过file命令来查看文件的类型。

    1.2.1 用法及参数解析
    用法: file [选项...] [文件...]
    -b #在列出辨识结果时,不显示文件名
    -c #详细显示命令执行过程,便于排错或分析程序执行的情形
    -C # 检查指定的文件(缺省为/etc/magic文件)有无格式错误。此验证一般不进行
    -m #
    -d #将任何缺省系统测试应用到文件
    -z #探测压缩过的文件类型

    [root@xiaogan ~]# file -z grub2.tar.gz 
    grub2.tar.gz: POSIX tar archive (GNU) (gzip compressed data, from Unix, last modified: Wed Aug 10 22:05:35 2016)

    -L #直接显示符号连接所指向文件的类别

    [root@xiaogan ~]# ls /etc/sysconfig/selinux 
    /etc/sysconfig/selinux
    [root@xiaogan ~]# file -L /etc/sysconfig/selinux 
    /etc/sysconfig/selinux: ASCII text
    [root@xiaogan ~]# file /etc/sysconfig/selinux 
    /etc/sysconfig/selinux: symbolic link to `../selinux/config'

    -f <文件名称> #从指定的文件中读取要分析的文件名列表

    -F <分隔符号> #设定名称文件中文件之间的分隔号,缺省为一行一个文件

    [root@xiaogan ~]# touch a.txt
    [root@xiaogan ~]# echo grub2.tar > a.txt
    [root@xiaogan ~]# echo grub2.tar.gz >> a.txt
    [root@xiaogan ~]# echo grub2.tar.bz2 >> a.txt
    [root@xiaogan ~]# file -f a.txt 
    grub2.tar:    POSIX tar archive (GNU)
    grub2.tar.gz:  gzip compressed data, from Unix, last modified: Wed Aug 10 22:05:35 2016
    grub2.tar.bz2: bzip2 compressed data, block size = 900k

    -I #如果文件不是普通文件,则不尝试对文件类型进行分来

    -v #在标准输出设备中显示版本信息并退出


    1.2.2 file命令返回结果以及含义:
    empty 空文件
    English text 英文正式文件
    directory 目录文件
    assembler program text 汇编语言程序的文本文件
    ascii text ASCII编码的文本文件
    command text 命令语言编写的命令正文程序
    c program c语言正文程序
    relocation text 用于连接的目标文件
    executable 可执行的目标代码文件

  • 相关阅读:
    java generic type
    android avoiding-memory-leaks
    a various of context
    LruCache
    Java Reference
    SQL join
    Eclipse java中一个工程引用另一个工程的类
    java 匿名内部类的方法参数需要final吗?
    java的final
    如何将每一条记录放入到对应的范围中
  • 原文地址:https://www.cnblogs.com/xiaogan/p/5759249.html
Copyright © 2011-2022 走看看