加入收藏 | 设为首页 | 会员中心 | 我要投稿 我爱制作网_沈阳站长网 (https://www.024zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

linux压缩 巴哥犬:鸟哥的Linux私房菜之压缩与打包

发布时间:2022-09-20 15:29:53 所属栏目:Linux 来源:
导读:  Linux中常见的压缩指令

  Linux中几个常见的压缩文件扩展名(不同的指令/程序压缩出的格式不一样)

  gzip与zcat

  gzip程序能够解压缩compress、zip与gzip等软件压缩的档案。 与Windows不一样的
  Linux中常见的压缩指令
 
  Linux中几个常见的压缩文件扩展名(不同的指令/程序压缩出的格式不一样)
 
  gzip与zcat
 
  gzip程序能够解压缩compress、zip与gzip等软件压缩的档案。 与Windows不一样的是,它压缩后将不保留源文件,并且使用gzip压缩的档案,可用Windows的WinRAR解压缩。
 
  gzip [-cdtv#] filename
  zcat filename.gz  
  -c:将压缩的数据输入到屏幕上,可用数据流重导向来处理
  -d:解压缩的参数
  -t:可以用来检验一个压缩文件的一致性,查看档案是否存在错误
  -v:可以显示原档案/压缩档案的压缩比
  -#:压缩等级,-1速度最快压缩比最差;-9速度最慢压缩比好;预设是-6
  ex1:将/etc/man.config复制到/tmp下并用gzip压缩
  [hp@localhost tmp]$ cd /tmp
  [hp@localhost tmp]$ cp /etc/man.config test
  [hp@localhost tmp]$ gzip -v test
  test:    56.1% -- replaced with test.gz
  [hp@localhost tmp]$ ls | grep test            
  test.gz    
  [hp@localhost tmp]$ zcat test.gz        //读取压缩文件的内容,cat读取会乱码
  #
  # Generated automatically from man.conf.in by the
  # configure script.
  // 解压缩
  [hp@localhost tmp]$ gzip -d test.gz
  [hp@localhost tmp]$ ls | grep test*
  test
  ex2:将test档案用最佳压缩比-9来压缩 并且将源档案保存
  [hp@localhost tmp]$ gzip -9 -c test > test.gz
  [hp@localhost tmp]$ ls | grep test
  test
  test.gz
  //其实压缩比一般不做改变,重点是-c和数据流重导向符号>的使用            
  bzip2与bzcat
 
  如果说gzip是为了取代compress而成立的,那么bzip2的目的就是取代gzip,压缩比比gzip还要好,用法与gzip类似。可以解开.bz2,.bz,.tbz,.tbz2扩展名的压缩文件。
 
  bzip2 [-cdkzv#]
  -c:将压缩过程产生的数据输入到屏幕上
  -d:解压缩的参数
  -k:保留源文件
  -z:压缩的参数
  -v:=gzip
  -#:=gzip
  [hp@localhost tmp]$ bzip2 -z -k test
  [hp@localhost tmp]$ ls -l | grep test
  -rw-r--r-- 1 hp   hp   4617 Oct 12 19:36 test
  -rw-r--r-- 1 hp   hp   2049 Oct 12 19:36 test.bz2
  -rw-rw-r-- 1 hp   hp   2051 Oct 12 19:48 test.gz
  打包指令:tar
 
  前面所提到的大多都是针对某一个档案进行压缩,虽然gzip和bzip2也能压缩目录,但它们是对目录中的档案一个一个进行压缩,而不像WinRAR将许多数据打包成一个档案。
 
  所谓打包,指的是将多个档案或目录包成一个大档案的指令功能。tar就具有这样的打包功能,并且还能透过gzip和bzip2的支持,将档案进行压缩。由于tar广泛的使用,WinRAR还支持.tar.gz文档的解压缩。
 
  tar [-j|-z] [cv] [-f 建立的档名] filename           //打包与压缩
  tar [-j|-z] [tv] [-f 建立的档名]           //查看档名
  tar [-j|-z] [xv] [-f 建立的档名] [-C 目录]           //解压缩
  -j:通过bzip2来压缩/解压缩,此时的档名为*.tar.bz2
  -z:通过gzip来压缩/解压缩,此时的档名为*.tar.gz
  -v:在压缩/解压缩中,将过程中正在处理的文件名显示处理
  -c:建立打包档案,可搭配-v查看被打包的filename(注意:这是小写的c)
  -t:查看被打包的档案有哪些
  -x:解打包与解压缩,搭配-C指定目录解开,注意-c-x-t不能同时出现在一条指令
  -C:(大写)用在解压缩,指定目录
  -f:后接要被处理的档名
  其他的后续练习中将会用到:
  -p:保留备份数据的原始权限与属性,常用于备份(-c)重要的配置文件
  -P:保留绝对路径,即允许备份数据中含有根目录
  --exclude=FILE:在压缩的过程中,不要将FILE打包
  以bzip2程序为例,较为常用的tar指令串可以这样理解:
 
  filename就是我们自己取的档名,因为tar不会自动建立档名,我们需要预定义,特别要注意的是扩展名,只打包的话.tar,-j的话.tar.bz2,-z的话.tar.gz。-f后面要立即接filename,如果将参数放在一起写要注意:
 
  //使用tar备份/etc/的目录
  [root@localhost ~]# tar -zpcvf test.tar.gz /etc/
  [root@localhost ~]# tar -jpcvf test.tar.bz2 /etc/
  [root@localhost ~]# ls -l |grep test
  -rw-r--r-- 1 root root  8254546 Oct 12 22:48 test.tar.bz2
  -rw-r--r-- 1 root root 12844552 Oct 12 22:47 test.tar.gz
  // gzip压缩完12M,bzip2压缩完8M
  //使用-p会将目录的属性和权限全部一起打包
  //查看备份的数据
  [root@localhost ~]# tar -jtvf test.tar.bz2  //-v显示档案的完整属性
  [root@localhost ~]# tar -jtf test.tar.bz2   
  etc/alternatives/print-lp
  etc/alternatives/print-lprman
  etc/alternatives/print-lprm
  etc/alternatives/print
  etc/auto.net
  我们查看所打包的数据中有哪些档案时linux压缩,会发现所有的档案路径都没有根目录,这主要是出于备份安全的考虑,因为大多压缩的备份数据还是会解压缩使用的,tar记录的文档名就是解压缩后的文档名,如果添加根目录【-P】,则解压缩后的档名是绝对路径,即/etc/xxx,那么你原先/etc下的数据就会被覆盖;不添加根目录,如果你在/tmp下解压缩,就会是/tmp/etc/xxx。
 
  [root@localhost ~]# tar -jcpPvf test2.tar.bz2 /etc/
  [root@localhost ~]# ls -l |grep test
  -rw-r--r-- 1 root root  8256537 Oct 12 23:04 test2.tar.bz2
  -rw-r--r-- 1 root root  8254546 Oct 12 22:48 test.tar.bz2
  -rw-r--r-- 1 root root 12844552 Oct 12 22:47 test.tar.gz
  [root@localhost ~]# tar -jtf test2.tar.bz2 //有根目录
  /etc/alternatives/print-lprman
  /etc/alternatives/print-lprm
  /etc/alternatives/print
  /etc/auto.net
  // 解压缩到/tmp目录下
  [root@localhost ~]# tar -jxvf test.tar.bz2 -C /tmp
  [root@localhost ~]# ls -l /tmp | grep etc
  drwxr-xr-x 88 root root 4096 Oct 12 19:00 etc
  //如何只解压缩一个档案
  [root@localhost ~]# tar -jtf test.tar.bz2 | grep shadow
  etc/gshadow-
  etc/shadow             //仅想解压缩etc/shadow
  etc/gshadow
  etc/shadow-
  //在指令后面加上要解压缩的档名就行
  [root@localhost ~]# tar -jxvf test.tar.bz2 etc/shadow
  etc/shadow
  [root@localhost ~]# ll etc
  total 8
  -r-------- 1 root root 1035 Oct  8 23:29 shadow
  //打包某目录,但不包含该目录下的某些档案--exclude
  [root@localhost ~]# tar -jcvf test.tar.bz2 --exclude=/etc/shadow* /etc/
  在Linux中,我们习惯将仅打包的数据*.tar称作tarfile,而将压缩后的*.tar.gz/*.tar.bz2称为tarball。
 

(编辑:我爱制作网_沈阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!