当前位置: 首页 > news >正文

17、Linux 文件压缩与解压

一、压缩和解压缩

        由于以前的计算机磁盘容量比较小,业内人士绞尽脑汁,终于开发出了一个能帮助用户节省磁盘的工具,就是压缩工具,我们知道计算机在存储数据的时候都是使用 bytes来计算的,但是实际上 1byte = 8bits,在日常使用中并不是所有的数据都能把这个 1byte 用完,有的可能用了三个 bits,有的可能用了四个 bits,而他们的 实际占用空间是 2bytes = 16bits,剩余的空间就浪费了,压缩工具就是通过算法,将占用三个bits的数据和占用四个bits的数据放在一个byte里,这样我们就能节省出来1byte,这种空间的节省,当你在压缩一个包含了很多文本文件的目录时是非常明显的。其实就像没有人知道早高峰的公交车里有多少人一样,一个人理论上占用的公交车内的空间,跟实际占用的空间,往往有很大差别,因为挤挤总能上去的。
压缩文件的好处有如下几点:
  • 文件更小,便于网络传输,效率高;
  • 避免杂乱,可以减少文件个数,多个文件一起压缩;
  • 有些文件不能直接传输,比如安装程序,压缩后就可以传输了

二、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 压缩
        compress 已经过时了,因为太老,个别版本的 linux 已经不支持了,linux 下的压缩工具还是以 gzip和 bzip2 以及后加入的 xz 作为主力,但是由于这些工具,最早不能压缩目录,只能针对单一文件进行压缩,所以在日常使用中,他们都是配合着 tar 这个打包工具,由 tar 把目录中的很多文件打包成一个文件,再经由对应的工具进行压缩,所以我们会看上面的那些tar.*的压缩包。
 

三、压缩工具的使用

        压缩比率:把原始文件压缩后,占用的磁盘空间和原文件的比率称压缩比率。
        注意:压缩比例越小,压缩效果越好,压缩时间越长。

3.1、gzip

[root@long90 workdir]# gzip -h
Usage: gzip [OPTION]... [FILE]...-c    保留源文件   -d    解压缩-h    显示帮助-t    检查压缩文件的数据一致性,用来确定压缩文件是否有错误-v    显示压缩包的相关信息,包括压缩比等-V    显示版本号-1   压缩最快,压缩比低-9   压缩最慢,压缩比高

实例:

[root@long90 workdir]# cp /etc/services ./
[root@long90 workdir]# ls
hello_linux  services
[root@long90 workdir]# gzip -v services
services:     79.4% -- replaced with services.gz     # 压缩比例 = 100% - 79.4% 
[root@long90 workdir]# ll -h /etc/services services.gz
-rw-r--r--. 1 root root 677K 5月  15 2020 /etc/services
-rw-r--r--  1 root root 140K 11月 25 09:46 services.gz
# 由于service文件本来就是一个文本文档,所以还可以使用zcat,zmore,zless去查看内容
[root@long90 workdir]# zcat services.gz
cloudcheck      45514/tcp               # ASSIA CloudCheck WiFi Management System
spremotetablet  46998/tcp               # Capture handwritten signatures
[root@long90 workdir]# gzip -d services.gz
[root@long90 workdir]# ls
hello_linux  services[root@long90 workdir]# gzip -1 -c services > services1.gz
[root@long90 workdir]# gzip -9 -c services > services2.gz
[root@long90 workdir]# ll -h
总用量 980K
-rw-r--r--. 1 root root    0 11月 23 00:48 hello_linux
-rw-r--r--  1 root root 677K 11月 25 09:46 services
-rw-r--r--  1 root root 160K 11月 25 10:08 services1.gz
-rw-r--r--  1 root root 139K 11月 25 10:09 services2.gz[root@long90 workdir]# zgrep -n ssh services1.gz
44:ssh             22/tcp                          # The Secure Shell (SSH) Protocol
45:ssh             22/udp                          # The Secure Shell (SSH) Protocol
551:x11-ssh-offset  6010/tcp                        # SSH X11 forwarding offset
593:ssh             22/sctp                 # SSH
1351:sshell          614/tcp                 # SSLshell
1352:sshell          614/udp                 #       SSLshell
1607:netconf-ssh     830/tcp                 # NETCONF over SSH
1608:netconf-ssh     830/udp                 # NETCONF over SSH
7178:sdo-ssh         3897/tcp                # Simple Distributed Objects over SSH
7179:sdo-ssh         3897/udp                # Simple Distributed Objects over SSH
7791:netconf-ch-ssh  4334/tcp                # NETCONF Call Home (SSH)
8473:snmpssh         5161/tcp                # SNMP over SSH Transport Model
8474:snmpssh-trap    5162/tcp                # SNMP Notification over SSH Transport Model
9126:tl1-ssh         6252/tcp                # TL1 over SSH
9127:tl1-ssh         6252/udp                # TL1 over SSH
10796:ssh-mgmt        17235/tcp               # SSH Tectia Manager
10797:ssh-mgmt        17235/udp               # SSH Tectia Manager

3.2、bzip2

[root@long90 workdir]# bzip2 -h-h           帮助-d           解压-z           压缩 默认值-k           保留源文件-v           查看版本信息-1 ..-9   同gzip相同
       bzip2 的使用与gzip相同,两种工具的区别就是压缩算法不同,bzip2的压缩比更好一些,bzip的包查看的时候使用的是 bzcat,bzmore,bzless,bzgrep 同gzip用法相同
[root@long90 workdir]# gzip -c services > services0.gz
[root@long90 workdir]# bzip2 -k services
[root@long90 workdir]# ll -h
总用量 948K
-rw-r--r--. 1 root root    0 11月 23 00:48 hello_linux
-rw-r--r--  1 root root 677K 11月 25 09:46 services
-rw-r--r--  1 root root 140K 11月 25 10:19 services0.gz
-rw-r--r--  1 root root 127K 11月 25 09:46 services.bz2

3.3、xz

        虽然 bzip2 的压缩效果相对比 gzip 已经提升很多,但是技术是永无止境的,于是出现了 xz,它的用法跟 gzip和 bzip2一样
[root@long90 workdir]# xz -h-d                            解压缩-t                            检查压缩文件的完整性-l                            查看压缩文件的相关信息-k                            保留源文件-c                            将信息输出到显示器上-0 ... -9                   指定压缩级别-h                            显示帮助
[root@long90 workdir]# xz -k services
[root@long90 workdir]# ll -h
总用量 1.1M
-rw-r--r--. 1 root root    0 11月 23 00:48 hello_linux
-rw-r--r--  1 root root 677K 11月 25 09:46 services
-rw-r--r--  1 root root 140K 11月 25 10:19 services0.gz
-rw-r--r--  1 root root 127K 11月 25 09:46 services.bz2
-rw-r--r--  1 root root 104K 11月 25 09:46 services.xz
[root@long90 workdir]# time gzip -c services > services.gz
real    0m0.026s
user    0m0.017s
sys    0m0.009s
[root@long90 workdir]# time bzip2 -k services
real    0m0.063s
user    0m0.052s
sys    0m0.010s
[root@long90 workdir]# time xz -k services
real    0m0.368s
user    0m0.347s
sys    0m0.020s
        我们可以使用 time 这个命令去对比一下时间 gzip,bzip2,xz 的时间分别是 0.026s,0.063s,0.368s,可以看到 xz 所使用的时间是比较长的,而这个时间会跟文件体积成正比,所以这三种压缩方式大家在使用的时候也要把时间成本考虑在内,除非你很富有。

3.4、tar

        大多数压缩工具只能针对单一文件进行操作,如果你要压缩目录的话就会很麻烦,这时候我们可以使用 tar 这个打包工具,将目录内的多个文件打包成一个文件,再进行压缩。
[root@long90 workdir]# tar --help
用法: tar [选项...] [FILE]...-C            解压到指定目录-c            建立tar包-t            查看tar包内的文件-x            解压tar包-p            不修改文件属性-f            指定文件名称-j            使用 bzip2 算法-J            使用 xz算法-z            使用 gzip 算法-P            允许压缩路径中包含有"/"-v            显示详细信息-?, --help 查看帮助--exclude     压缩过程中排除指定的文件
实例:打包压缩 /etc
[root@long90 workdir]# tar -czf etc.tar.gz /etc
[root@long90 workdir]# ls
etc.tar.gz  hello_linux  services  services.bz2  services.gz  services.xz
[root@long90 workdir]# tar xf etc.tar.gz
[root@long90 workdir]# ls
etc  etc.tar.gz  hello_linux  services  services.bz2  services.gz  services.xz
[root@long90 workdir]# tar tf etc.tar.gz
etc/nvme/hostnqn
etc/nvme/hostid
etc/man_db.conf
etc/nanorc
etc/locale.conf
# 查看 *.tar.gz 中包含哪些文件
[root@long90 workdir]# tar -tvf etc.tar.gz | more
drwxr-xr-x root/root         0 2022-11-25 09:30 etc/
lrwxrwxrwx root/root         0 2022-11-23 00:35 etc/mtab -> ../proc/self/mounts
-rw-r--r-- root/root       624 2022-11-24 09:36 etc/fstab
...
# 查找 *.tar.gz 中是否包含 shadow 文件或文件夹
[root@long90 workdir]# tar -tvf etc.tar.gz | grep shadow
-rw-r--r-- root/root       214 2022-06-04 07:11 etc/pam.d/sssd-shadowutils
---------- root/root       855 2022-11-24 20:41 etc/gshadow
---------- root/root       849 2022-11-24 20:41 etc/gshadow-
---------- root/root      1409 2022-11-24 20:59 etc/shadow-
---------- root/root      1404 2022-11-24 21:02 etc/shadow
[root@long90 workdir]# rm -rf etc
# 解压 *.tar.gz 中指定的文件。
[root@long90 workdir]# tar -xf etc.tar.gz etc/gshadow
[root@long90 workdir]# ls etc
gshadow

 

 

http://www.dtcms.com/a/460942.html

相关文章:

  • IDEA编译时报错OOM的解决方案
  • .NET驾驭Word之力:基于规则自动生成及排版Word文档
  • 本地web测试服务器快速域名映射工具
  • 自己搭建远程桌面服务器——私有化部署RustDesk
  • 机器人强化学习原理讲解二:关于机器人重置
  • 目标检测YOLO实战应用案例100讲-相机 ISP(三)
  • 网站无障碍建设标准we建站
  • Linux系统为普通用户设置sudo权限
  • 网络流量分析工具
  • 网站基站的建设网站建设学习哪家专业
  • 【渗透测试】ARP是什么?有什么作用?
  • JavaEE 初阶第二十八期:HTTP协议深度揭秘(二)
  • 【Linux命令从入门到精通系列指南】source 命令详解:在当前 Shell 中执行脚本的终极指南
  • 深入理解 OKHttp:设计模式、核心机制与架构优势
  • 电压互感器在电网中接线方式决定了一次消谐器如何安装
  • HAMi 2.7.0 发布:全面拓展异构芯片支持,优化GPU资源调度与智能管理
  • Linux中延迟相关函数的实现
  • 企业制作网站一般多少钱如何选择网站关键词
  • 记录一下Unity的BUG,Trial Version
  • 【bug日记】python找不到包
  • 23大数据 数据挖掘复习1
  • 微信小程序反编译教程
  • 使用AWS IAM和Python自动化权限策略分析与导出
  • 网站建设的总体目标是什么编程代码大全
  • AWS WAF 防护目录列表漏洞:完整实施指南
  • 【pycharm】识别uv路径
  • 当数据仓库遇见AI:金融风控的「认知大脑」正在觉醒
  • 【markdown】win11部署微软markitdown支持格式转换markdown
  • 微软发布Azure容器存储v2.0.0国际版
  • 建一个展示网站下班多少钱企业网站建设 cms