Linux下文件的打包、解压缩工具及用法——tar,gzip,bzip2,unzip,rar

 黑渐神|he-jason.com   2018-12-25 12:05   121 人阅读  Linux下文件的打包、解压缩工具及用法——tar,gzip,bzip2,unzip,rar已关闭评论

  在Linux环境下,对于文件的操作更多通过命令行指令而不是单纯的鼠标点击,而文件管理中一个重要的操作便是压缩和加压操作。通过文件的压缩和解压,可以使得文件占用更少的存储空间,也可以让文件传输更加便捷。本文主要介绍Linux下常用的打包指令和解压缩指令,并介绍不同的压缩文件拓展名的区别。

索引

文件后缀
压缩命令——gzip、bzip2
打包指令——tar
zip文件相关命令 -- unzip
rar文件相关命令 -- rar
7z文件相关命令 -- p7zip、7zr

文件后缀的含义

  随着压缩技术的发展,Linux环境下提供的压缩指令和格式开始变多。为了便于用户区分不同压缩文件使用的不同压缩技术,进而使用合适的指令进行操作,一般使用后缀标识文件在压缩或打包过程中所使用的压缩技术。常见的后缀有以下几种:  


  *.Z // compress程序压缩产生的文件(现在很少使用)   *.gz // gzip程序压缩产生的文件   *.bz2 // bzip2程序压缩产生的文件   *.zip     //   zip压缩文件   *.rar     //   rar压缩文件   *.7z      //  7-zip压缩文件   *.tar // tar程序打包产生的文件   *.tar.gz // 由tar程序打包并由gzip程序压缩产生的文件   *.tar.bz2 // 由tar程序打包并由bzip2程序压缩产生的文件

  依据不同的压缩格式,linux 环境下可使用多种不同的命令进行文件的压缩和解压操作。其中,gzip、bzip2、tar、unzip、unrar 等指令是在打包和压缩过程中较为常用的指令。

压缩命令——gzip、bzip2

  gzip

  gzip可以压缩产生后缀为 .gz 的压缩文件,也可以用于解压gzip、compress等程序压缩产生的文件。不带任何选项和参数使用gzip或只带有参数 - 时,gzip从标准输入读取输入,并在标准输出输出压缩结果。

  gzip的常用指令选项如下:  

  基础格式: gzip [Options] file1 file2 file3
  指令选项:(默认功能为压缩)
  -c       //将输出写至标准输出,并保持原文件不变
  -d       //进行解压操作
  -v       //输出压缩/解压的文件名和压缩比等信息
  -digit     //digit部分为数字(1-9),代表压缩速度,digit越小,则压缩速度越快,但压缩效果越差,digit越大,则压缩速度越慢,压缩效果越好。默认为6.

  注意,使用 gzip 指令压缩/解压文件均会使得源文件消失,即源文件会被直接解压/压缩而不保留备份。若想要保留原文件可以使用 -c 参数结合数据流重定向操作(见下例)。

    gzip exp1.txt exp2.txt     //分别将exp1.txt和exp2.txt压缩,且不保留原文件。注意对于多个文件参数是将多个文件分别进行压缩,而不是压缩在一起。参考下文 tar 指令。

    gzip -dv exp1.gz       //将exp1.gz解压,并显示压缩比等信息。

    gzip -cd exp1.gz > exp.1   //将exp1.gz解压的结果放置在文件exp.1中,并且原压缩文件exp1.gz不会消失

  特别注意第三条实例, -d 指示解压缩,-c 参数是将结果输出至标准输出,通过 > 符号,将原本输出至标准输出的解压结果重定向至exp.1中,既解压了文件,原压缩文件也没有消失。

  注:对应于 gzip,可以使用 gunzip 进行解压操作,效果类似gzip -d xx,同时可以使用zcat读取压缩文件的内容并显示在标准输出,功能类似于 gzip -c xx.

  bzip2

  bzip2是采用更好压缩算法的压缩程序,一般可以提供较之gzip更好的压缩效果。其具有与gzip相似的指令选项,压缩产生 .bz2 后缀的压缩文件。

  bzip2的常用指令选项如下:

  基础格式: bzip2 [Options] file1 file2 file3
  指令选项:(默认功能为压缩)
  -c       //将输出写至标准输出
  -d       //进行解压操作
  -v       //输出压缩/解压的文件名和压缩比等信息
  -k       //在压缩/解压过程中保留原文件
  -digit     //digit部分为数字(1-9),代表压缩速度,digit越小,则压缩速度越快,但压缩效果越差,digit越大,则压缩速度越慢,压缩效果越好。默认为6.

    bzip2 exp1.txt exp2.txt     //分别将exp1.txt和exp2.txt压缩,且不保留原文件。

    bzip2 -dv exp1.bz2       //将exp1.bz2解压,并显示压缩比等信息。

    bzip2 -kd exp1.bz2        //将exp1.bz2解压,并且原压缩文件exp1.bz2不会消失

  注:对应于 bzip2,可以使用 bunzip2 进行解压操作,效果类似bunzip2 -d xx,同时可以使用bzcat读取压缩文件的内容并显示在标准输出,功能类似于 bzip2 -c xx.

打包指令——tar

  上文已经提到,gzip 或 bzip2 带有多个文件作为参数时,执行的操作是将各个文件独立压缩,而不是将其放在一起进行压缩。这样就无法产生类似于Windows环境下的文件夹打包压缩的效果。(gzip与bzip2也可以使用文件夹作为参数,使用 -f 选项,但也是将其中的每个文件独立压缩)。为了实现打包压缩的效果,可以使用命令 tar 进行文件的打包操作(archive),再进行压缩。

  tar 指令可以将文件打包成文件档案(archive)存储在磁盘/磁带中,打包操作一般伴随压缩操作,也可以使用 tar 指令对打包压缩后的文件解压。

  tar 常用命令参数如下:
复制代码

  基本格式:tar [Options] file_archive  //注意tar的第一参数必须为命令选项,即不能直接接待处理文件

  常用命令参数:
  //指定tar进行的操作,以下三个选项不能出现在同一条命令中
  -c        //创建一个新的打包文件(archive)
  -x        //对打包文件(archive)进行解压操作
  -t        //查看打包文件(archive)的内容,主要是构成打包文件(archive)的文件名

  //指定支持的压缩/解压方式,操作取决于前面的参数,若为创建(-c),则进行压缩,若为解压(-x),则进行解压,不加下列参数时,则为单纯的打包操作
  -z        //使用gzip进行压缩/解压,一般使用.tar.gz后缀
  -j        //使用bzip2进行压缩/解压,一般使用.tar.bz2后缀

  //指定tar指令使用的文件,若没有压缩操作,则以.tar作为后缀
  -f filename   //-f后面接操作使用的文件,用空格隔开,且中间不能有其他参数,推荐放在参数集最后或单独作为参数
         //文件作用取决于前面的参数,若为创建(-c),则-f后为创建的文件的名字(路径),若为(-x/t),则-f后为待解压/查看的打包压缩文件名

  //其他辅助选项
  -v        //详细显示正在处理的文件名
  -C Dir      //将解压文件放置在 -C 指定的目录下
  -p(小写)     //保留文件的权限和属性,在备份文件时较有用
  -P(大写)     //保留原文件的绝对路径,即不会拿掉文件路径开始的根目录,则在还原时会覆盖对应路径上的内容
  --exclude=file //排除不进行打包的文件

  常见的tar指令操作如下:
复制代码

 压缩:

   tar -cvjpf etc.tar.bz2 /etc  //-c为创建一个打包文件,相应的-f后面接创建的文件的名称,使用了.tar.bz2后缀,-j标志使用bzip2压缩,最后面为具体的操作对象/etc目录
 
 查看:
   tar -tvjf etc.tar.bz2     //-t为查看操作,则-f对应所查看的文件的名称,文件后缀显示使用bzip2进行压缩,所以加入-j选项,-v会显示详细的权限信息

 解压
   tar -xvjf etc.tar.bz2     //-x为解压操作,则-f指定的是解压使用的文件,文件后缀显示使用bzip2进行压缩,所以加入-j选项,即使用bzip2解压
                     //若只解压指定打包文件中的一个文件,在上述指令的最后加上待解压文件名作为参数即可

复制代码

  注意:使用tar打包的文件会保存原有的文件路径,并默认取出了所有成员文件路径的根目录,如下图

  

  这样做的目的在于,当用户在某一目录如/home/haha目录下进行解压操作时,tar会将解压出来的文件路径与当前目录拼接,即为 /home/haha/etc/emacs,从而将文件解压在当前目录下。(如果还有印象,目录名也可以使用 -C 选项指定)但若是打包压缩时不取出文件路径的根目录,则会按照存储的绝对路径如/etc/emacs解压文件,可能将/etc文件下的相应文件覆盖掉,当然在进行备份和恢复时该操作是有效的。tar提供 -P选项来保留文件路径的根目录。

zip文件相关命令 -- unzip

  unzip 命令与之前的 tar 指令类似,具有对 zip 文件进行查看、测试和解压的功能。
复制代码

  基本格式:unzip [Options] file[.zip]    //不接任何Options时,默认将指定的file文件解压至当前文件夹,可同时接受多个文件参数

  常用命令参数:
  //压缩文件内容查看
  -Z        //以形如 ls -l 的格式显示目标文件内容,实际原理是命令第一个参数为-Z时,其余参数会被视为 zipinfo 的参数,并产生对应效果  
  -Z1        //仅显示压缩文件内容的文件名,更多显示可查看 zipinfo 命令的 man 帮助
  -l        //显示压缩文件中包括时间、占用空间和文件名等信息,内容上较 -Z 更简单

  //文件测试
  -t        //在内存中解压文件并进行文件的完整性校验(CRC校验)

  //解压缩参数,注意unzip默认即为解压操作
  -f        //注意与 tar 命令不同,unzip指定 -f 参数时,则将磁盘上已经存在且内容新于对应磁盘文件的压缩内容解压出来
  -n        //解压缩时不覆盖已存在的文件(而是跳过)
  -q        //安静模式,仅解压缩而不输出详细信息
  -d dir      //将文件解压至dir指定的文件夹中

  可以使用unzip命令对zip文件进行相关的操作。

  (1)查看压缩文件的所有文件名(注意 -Z 选项表示之后所有的参数被视为 zipinfo 的参数并输出相应结果) -> unzip -Z1 file.zip

  (2)测试文件的完整性 -> unzip -t file.zip

  (3)将文件解压至当前用户的主目录 -> unzip -q file.zip -d ~

rar文件相关命令 -- rar

  ubuntu环境下,默认的系统配置无法处理 rar 压缩文件,可通过包管理工具 apt 安装和卸载 rar 压缩文件的相关命令 rar 。

sudo apt-get install rar    //安装 rar
sudo apt-get remove rar     //卸载 rar   

  rar 命令的使用方法可参见 rar 的 man page。简单而言,rar 命令包括 command 、switch 和 target 三个部分,其中 command 指定当前 rar 命令的行为,switch 可用于指定其某部分功能的启停,而 target 则指定命令的操作对象。

基本格式:rar <command> [-<switch>] file.rar [files][path]
    command:        //指定 rar 命令执行的具体动作
     a                       //若指定的 file.rar 文件不存在,则将 files 指定的文件添加(压缩)至 file.rar 中 
     e                       //解压文件至当前目录,注意所有的文件均被解压至当前目录,原有的目录结构不会被保留
     l                       //列出压缩文件的内容,与 v 基本相同,但不包括文件路径
     t                       //测试压缩文件
     v                       //显示压缩文件的详细资料
     x                       //将文件解压至 path 指定的路径下

    switch:         //针对 rar 某部分功能的启停,每个 switch 以 - 开始,通过空格键隔开
     -r                     //对子目录递归使用
     -o+                    //覆盖已存在的文件
     -o-                    //不覆盖已存在的文件
     -x<file>               //去除指定的文件

  使用举例:

  rar a -r experiment.rar ~/experiment/  //将目录 ~/experiment/ 添加(压缩)至文件 experiment.rar 文件,注意这里要使用 -r ,否则只会添加 ~/experiment/ 目录下的所有文件,而不会处理其中的子目录的内容

  rar l experment.rar          //查看 rar 文件的信息

  rar x experment.rar ~/test/       //将文件 experiment.rar 文件解压至指定的文件夹

  该部分参考:让Ubuntu 16.04可以压缩/解压缩RAR文件

  7z文件相关的压缩指令 ——p7zip

  Ubuntu 环境下默认不包含对 .7z 压缩文件的处理程序,需要用户自行安装对应的压缩/解压工具,这里笔者使用的是 p7zip 工具。通过 apt install 安装对应的工具。

sudo apt install p7zip        //安装 7-zip 工具

  在安装完成后,可以直接使用 p7zip 命令对文件进行操作,其为一个用于 7-zip 格式处理的脚本,仅能处理 7z 格式的文件,其主要功能通过在内部执行 7za 或 7zr 命令实现。

  p7zip 命令的用法:

基本格式:p7zip [options][ file ]
          //没有 options 参数时,p7zip 默认将每一个输入的 file 参数压缩为 file.7z 文件,并删除源文件
    -d        //执行解压操作,对应的文件参数应以 .7z 作为后缀,解压后源压缩文件会被删除
    -k        //不删除输入文件,即进行压缩/解压时不会删除源文件

  使用实例:

  p7zip a.txt b.txt    //将生成两个压缩文件 a.txt.7z 和 b.txt.7z

  p7zip -d -k a.txt.7z   //解压源文件 a.txt.7z,并保留该压缩文件

  7zr 命令的用法:

  p7zip 命令的基础功能实际上可由 7zr 命令实现,7zr 命令可提供更大自由度的操作,下面时关于该命令的简单记录。


基本用法: 7zr <command> <switches> <archive_name><file_names> command: //command 用于指定命令的动作,包括解压,压缩等 a //添加文件至压缩文件 d //从压缩文件中删除文件 e //解压缩文件(这里默认不保持原目录结构) l          //显示压缩文件内容 x //解压文件,解压会保持完整的路径结构 switches: //switches 可指定一些额外的参数 -ai //处理时包括某些压缩文件 -ax       //处理时不包括某些压缩文件 -o        //设置压缩/解压结果的输出目录 -sdel      //压缩完成后删除源文件
本文地址:https://www.he-jason.com/he-jason/talkops/744.html
版权声明:本文为原创文章,版权归 黑渐神|he-jason.com 所有,欢迎分享本文,转载请保留出处!
双11拉新分百万红包

评论已关闭!