LInux-解压缩、打包、解包

910 阅读7分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第31天,点击查看活动详情

压缩和打包概念

  1. 压缩

    指通过某些算法,将文件尺寸进行相应的缩小,同时不损失文件的内容。

  2. 打包

    指将多个文件(或目录)合并成一个文件,方便传递或部署。

    在Linux系统中,文件的后缀名不重要,但是==针对于压缩文件的后缀名是必须==的,因为可以让其他的程序员根据文件的后缀名使用对应的算法进行解压。

  3. Linux常见的压缩文件后准名

    后缀解释
    *.gzgzip程序压缩的文件
    *.bz2bzip2 程序压缩的文件
    *.tartar命令打包的数据,并没有压缩过
    *.tar.gztar程序打包的文件,并且经过 gzip 的压缩
    *.tar.bz2tar程序打包的文件,并且经过 bzip2 的压缩

压缩/解压

gzip(常用)

压缩/解压命令

  • 压缩速度块, 压缩比较低

常用压缩选项(需要保留源文件需要使用重导向:>>):-cv

常用解压选项:-dv

语法:gzip 选项 filename

选项:

选项解释
-c将压缩的数据输出到标准输出(stdout)上
-d解压缩
-t可以用来检验一个压缩文件的一致性,看看文件有无错误
-v可以显示出原文件/压缩文件的压缩比等信息
-(1,2...9)压缩等级 1最快,但是压缩比最差; 9最慢,但是压缩比最好; 默认是6。
-l查看压缩文件的压缩比: gzip –l *.gz

使用案例

/home/gzip目录下有一个文件install.log

对其操作

  1. 压缩该文件,将压缩的数据输出到标准输出

    不会生成新的压缩文件,压缩完后的数据直接输出到了屏幕上

    [root@Demo02 gzip]# gzip -c install.log
    
  2. 压缩完显示压缩比等信息,此时源文件不在了,想保留源文件,需要使用重导向技术

    [root@Demo02 gzip]# gzip -v install.log 
    install.log:	 75.2% -- replaced with install.log.gz
    
    [root@Demo02 gzip]# ll
    总用量 12
    -rw-r--r--. 1 root root 11345 113 17:24 install.log.gz
    

    使用重导向技术

    [root@Demo02 gzip]# gzip -c install.log >> install.log.gz
    
    [root@Demo02 gzip]# ll
    总用量 60
    -rw-r--r--. 1 root root 45537 113 17:24 install.log
    -rw-r--r--. 1 root root 11345 113 17:28 install.log.gz
    
  3. 解压

    [root@Demo02 gzip]# gzip -d install.log.gz 
    
  4. 检查压缩后的文件是否有误

    什么也没有输出就是没有错

    [root@Demo02 gzip]# gzip -t install.log.gz 
    [root@Demo02 gzip]# 
    
  5. 提高压缩比(如果文件本身比较小可能体现不出来)

    使用默认的压缩,当时的压缩比为75.2%

    [root@Demo02 gzip]# gzip -cv9 install.log >> install.log.gz
    install.log:	 75.4%
    

bzip2

压缩/解压命令

  • gzip拥有更快的压缩性能。
  • bzip2拥有更高的压缩比,但压缩速度较慢。
  • 单纯从压缩比方面来说,那么bzip2 > gzip > compress

常用压缩选项(需要保留源文件需要使用重导向:>>):

常用解压选项:

语法:bzip2 选项 filename

选项:

选项解释
-c将压缩的过程产生的数据输出到标准输出(stdout)
-d解压缩
-k保留源文件,而不会删除原始的文件
-v可以显示出原文件/压缩文件案的压缩比等信息;
-(1,2,...,9)与gzip同样的,都是在计算压缩比的参数,-9最佳,-1最快

使用案例

/home/gzip目录下有一个文件install.log

对其操作

  1. 将其通过bzip2压缩

    [root@Demo02 gzip]# bzip2 -c install.log >> install.log.bz2
    

zip

压缩

  1. 压缩当前目录下所有文件

    zip -r xxx.zip ./*
    
  2. 将当前目录下的所有文件和文件夹全部压缩成myfile.zip文件,-r表示递归压缩子目录下所有文件

    zip -r myfile.zip ./*
    

解压

查看压缩文件中的内容

  1. cat:可以用来查看文本文件中的内容
  2. zcat:可以用来查看gzip算法压缩的压缩文件内容
  3. bcat:可以用来查看bzip2算法压缩的压缩文件内容

打包/解包:tar

tar:可以将一个文件/夹打包成一个文件。可以结合gzip、bzip2的算法对包文件进行相应的压缩和解压。

语法:

  • 压缩:tar [选项] newFileName.tar.gz sourceFileName
  • 解压:tar [选项] fileName.tar.gz [-C /path]

选项:

选项解释
-c压缩
-t查看打包文件的内容含有哪些文件
-x解打包或解压缩的功能,可以搭配-C(大写)在指定目录解开
-j通过bzip2的支持进行压缩/解压缩:此时文件最好为 *.tar.bz2
-z通过gzip的支持进行压缩/解压缩:此时文件最好为 *.tar.gz
-v在压缩/解压缩的过程中,将正在处理的文件名显示出来
-f filename-f 后面跟处理文件的全名称(路径+文件名+后缀名)
-C 目录:这个选项用在解压的时候,若要在特定目录解压,可以使用这个选项

  • ==使用命令进行打包、压缩的时候,使用了什么算法,文件后缀名就一定要与其对应。==

压缩

压缩常用选项:

  • 通过gzip算法:-zcvf
  • 通过bzip2算法:-jcvf
  1. 使用gzip的算法进行打包压缩

    [root@Demo02 gzip]# tar -zcvf install.log.tar.gz install.log
    install.log
    
    [root@Demo02 gzip]# ll
    总用量 72
    -rw-r--r--. 1 root root 45537 113 17:37 install.log
    -rw-r--r--. 1 root root 11449 113 17:56 install.log.tar.gz
    
  2. 使用bzip2的算法进行打包压缩

    [root@Demo02 gzip]# tar -jcvf install.log.tar.bz2 install.log
    install.log
    
    [root@Demo02 gzip]# ll
    总用量 72
    -rw-r--r--. 1 root root 45537 113 17:37 install.log
    -rw-r--r--. 1 root root  9721 113 17:58 install.log.tar.bz2
    
  3. 压缩指定目录下的文件,并输出到指定目录下

    后面跟的路径/文件名,会把该路径全部打包

    所以如果想要打包某个文件,最好进入该文件的路径下,第一个路径为压缩后的输出路径

    [root@Demo02 /]# tar -zcvf /home/gzip/install.log.tar.gz install.log 
    install.log
    
    [root@Demo02 /]# cd /home/gzip/
    [root@Demo02 gzip]# ll
    -rw-r--r--. 1 root root 11451 113 18:10 install.log.tar.gz
    

解压

解压常用选项:

  • 一般都是gzip格式的压缩包:-zxvf
  1. 将一个压缩包文件解压到当前目录下

    [root@Demo02 gzip]# tar -zxvf install.log.tar.gz 
    install.log
    
  2. 将一个压缩文件解压到指定目录下

    第一个参数:要解压的文件

    第二个参数:通过-C指定输出路径

    [root@Demo02 gzip]# tar -zxvf install.log.tar.gz -C ../tar
    install.log
    
    [root@Demo02 gzip]# ls ../tar
    install.log
    
  3. 只解压包中的某个文件

    前提:把/etc目录压缩到/home/gzip路径下

    /etc目录下有众多文件夹,可以指定把哪个文件夹解压出来

    [root@Demo02 gzip]# tar -zxvf etc.tar.gz etc/shells
    etc/shells
    
    [root@Demo02 gzip]# ll
    总用量 9740
    drwxr-xr-x. 2 root root    4096 113 18:18 etc
    [root@Demo02 gzip]# ls etc
    shells
    
  4. 配置jdk环境变量

    • 将jdk的tar包拷贝到服务器某个目录中,例如:/home/software

      [root@Demo02 software]# ls
      jdk-8u131-linux-x64.tar.gz
      
    • 将该tar包解压到当前目录下

      [root@Demo02 software]# tar -zxvf jdk-8u131-linux-x64.tar.gz 
      
      [root@Demo02 software]# ll
      drwxr-xr-x. 8 uucp  143      4096 315 2017 jdk1.8.0_131
      -rw-r--r--. 1 root root 185540433 113 18:28 jdk-8u131-linux-x64.tar.gz
      
    • 配置系统环境变量

      通过修改/etc/profile文件,配置JDK

      文件末尾添加如下内容,不能出错,不然其他的Linux命令可能会出问题(如果出现问题,通过单用户模式修改正确即可)

      export JAVA_HOME=/home/software/jdk1.8.0_131
      export PATH=$JAVA_HOME/bin:$PATH
      
    • 是环境变量生效

      [root@Demo02 software]# source /etc/profile
      
      [root@Demo02 software]# java -version
      java version "1.8.0_131"
      Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
      Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
      [root@Demo02 software]#