Linux6.0 文件与文件系统的压缩


文件与文件系统的压缩

Linux系统常见的压缩命令

几个常见的压缩文件扩展名

  • *.Z:compress程序压缩的文件
  • *.zip:zip程序压缩的文件
  • *.gz:gzip程序压缩的文件
  • *.bz2:bzip2程序压缩的文件
  • *.xz:xz程序压缩的文件
  • *.tar:tar程序打包的文件,并没有压缩过
  • *.tar.gz:tar程序打包的文件,并且经过gzip的压缩
  • *.tar.bz2:tar程序打包的文件,并且经过bzip2的压缩
  • *.tar.xz:tar程序打包的文件,并且经过xz的压缩

gzip,zcat/zmore/zless/zgrep

gzip可以解压缩compress、zip、gzip等软件所压缩的文件,gzip建立的压缩文件为*.gz

gzip [-cdtv#] 文件名

  • -c:将压缩的数据输出到屏幕上,可通过数据流重定向来处理
  • -d:解压缩的参数
  • -t:可以用来检验一个压缩文件的一致性,看看文件有无错误
  • -v:可以显示出原文件/压缩文件的压缩比等信息
  • -#:#是数字的意思,代表压缩等级,-1最快,但是压缩比最差,-9最慢,但是压缩比最好,默认是-6

找出/etc下面容量最大的文件,并且复制到/tmp里面,然后以gzip进行压缩

image-20231014160747430

使用gzip的时候默认情况下原本的文件会被压缩成为.gz后缀的文件,源文件就不存在了

由于services是文本文件,请将其压缩文件的内容读取出来

zcat services.gz

image-20231014161910303

将services.gz解压缩

image-20231014162305319

与gzip -v相反,gzip -d解压缩后会把原来的压缩文件删除

将services用最高压缩比压缩并保留源文件

image-20231014162553924

找出‘http’这个关键字在services.gz中出现在哪几行

image-20231014162830349

bzip2,bzcat/bzmore/bzless/bzgrep

如果说gzip是为了替换compress并提供更好的压缩比而成立的,那么bzip2是为了替换gzip并提供更佳的压缩比而成立的

bzip2 [-cdkzv#] 文件名

bzcat 文件名.bz2

  • -c:将压缩的过程产生的数据输出到屏幕上
  • -d:解压缩的参数
  • -k:保留原始文件,而不会删除原来的文件
  • -z:压缩的参数(默认值)
  • -v:可以显示出源文件/压缩文件的压缩比等信息
  • -#:与gzip一致,-9最佳,-1最快

将services文件用bzip2压缩

image-20231014232939310

image-20231014232954549

xz,xzcat/xzmore/xzless/xzgrep

xz拥有比bzip2更高的压缩比

xz [-dtlkc#] 文件名

xcat 文件名.xz

  • -d:就是解压缩
  • -t:测试压缩文件的完整性,看看有无错误
  • -l:列出压缩文件的相关信息
  • -k:保留原本的文件不删除
  • -c:在屏幕上输出
  • -#:#是数字,-9最佳,-1最快

如果时间不是首要的考虑,那么xz这种有更高压缩比的工具更适合使用,如果要考虑时间的问题,那还是用gzip吧

打包命令:tar

tar可以将多个目录或文件打包成一个大文件,同时还可以通过gzip、bzip2、xz的支持

常用选项与参数

打包与压缩tar [-z|-j|-J] [cv] [-f 待建立新的文件名] filename

查看文件名tar [-z|-j|-J] [tv] [-f 已有的tar文件名]

解压缩tar [-z|-j|-J] [xv] [-f 已有的tar文件名] [-C 目录]

  • -c:建立打包文件,可搭配-v来查看过程中被打包的文件名
  • -t:查看打包文件的内容含有哪些文件名,重点在查看文件名
  • -x:解包或解压缩的功能,可以搭配-C在特定目录解压,特别留意的是**-c、-t、-x不可同时出现在一串命令行中**
  • -z:通过gzip的支持进行压缩/解压缩:此时文件名最好为:***.tar.gz **
  • -j:通过bzip2的支持进行压缩/解压缩:此时文件名最好为:***.tar.bz2 **
  • -J:通过xz的支持进行压缩/解压缩哦:此时文件名最好为:***.tar.xz ,特别留意,-z、-j、-J不可以同时出现在遗传命令行中**
  • -v:在压缩/解压缩的过程中,将正在处理的文件名显示出来
  • -f filename:-f后面要立刻接要被处理的文件名,建议-f单独写一个选项(比较不会忘记)
  • -C 目录:这个选项用在解压缩,如果要在特定目录解压缩,可以使用这个选项
  • -p(小写):保留备份数据的原本权限和属性,常用于备份(-c)重要的配置文件
  • -P(大写):保留绝对路径,就是允许备份数据中含有根目录存在的意思
  • –exclude=FILE:在压缩过程中,不要将FILE打包

我常用的解压缩命令:tar -xvzf filename,加入了-z,支持gzip

  • 压缩:tar -jcv -f filename.tar.bz2 要被压缩的文件或目录
  • 查询:tar -jtv -f filename.tar.bz2
  • 解压缩:tar -jxv -f filename.tar.bz2 -C 要解压缩的目录

使用tar加入-z、-j或-J的参数来备份/etc/目录

time tar -zpcv -f /root/etc.tar.gz /etc(-p保留原本文件的权限与属性)

image-20231015012110133

time tar -jpcv -f /root/etc.tar.bz2 /etc

image-20231015012415881

time tar -Jpcv -f /root/etc.tar.xz /etc

image-20231015013022287

可以看到xz压缩后的文件大小相比其他两个是最小的,但是时间雀食优点久

为什么要去掉根目录?

我们使用tar备份的数据可能会需要就压缩回来使用,此时tar记录的文件名就是解压缩后的实际文件名,用/etc/xxx举例子,如果拿掉根目录,我们在/tmp下解开就会变成/tmp/etc/xxx,而如果不去掉根目录,解压出来就会是绝对路径,即解压后的文件会被放到/etc/xxx中,把原来etc下的数据覆盖掉。所以不要随便用-P参数

将备份的数据解压缩,并考虑特定目录的解压缩操作(-C的应用)

在本目录下进行解压缩的操作:tar -jxv -f /root/etc.tar.bz2,但是如果我想让其在/tmp目录下解压缩,那就得cd/tmp再执行上述命令,会显得有点麻烦,这时可以使用-C的选项:tar -jxv -f /root/etc.tar.bz2 -C /tmp

仅解开单一文件

管道|配合grep可以截取关键词,

tar -jtv -f /root/etc.tar.bz2 | grep 'shadow'

语法:

tar -jtv -f 打包文件.tar.bz2 待解开文件名

tar -jtv -f /root/etc.tar.bz2 etc/shadow

打包某目录但不含该目录下的某些文件

tar -jcv -f 打包文件.tar.bz2 --exclude=不包含的文件名

基本名称

tarfile:tar打包出来的文件.tar后缀的就是tarfile

tarball:带有别的压缩的支持例如.tar.bz2格式的,就是tarball

利用管道命令与数据流

将/etc整个目录进行打包的同时在/tmp下解开

tar -cvf - /etc | tar -xvf -

-就表示这个被打包的文件


文章作者: Feliks
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Feliks !
评论
  目录