Linux文件管理:打包与压缩

打包与压缩的概念介绍
归档,也称为打包,指的是一个文件或目录的集合,而这个集合被存储在一个文件中。归档文件没有经过压缩,因此,它占用的空间是其中所有文件和目录的总和。通常,归档总是会和系统(数据)备份联系在一起。
压缩是指利用算法将文件进行处理,已达到保留最大文件信息,而让文件体积变小的目的。其基本原理为,通过查找文件内的重复字节,建立一个相同字节的词典文件,并用一个代码表示。比如说,在压缩文件中,有不止一处出现了 "Andrew Notes",那么,在压缩文件时,这个词就会用一个代码表示并写入词典文件,这样就可以实现缩小文件体积的目的。
由于计算机处理的信息是以二进制的形式表示的,因此,压缩软件就是把二进制信息中相同的字符串以特殊字符标记,只要通过合理的数学计算,文件的体积就能够被大大压缩。把一个或者多个文件用压缩软件进行压缩,形成一个文件压缩包,既可以节省存储空间,有方便在网络上传送。
如果你能够理解文件压缩的基本原理,那么很容易就能想到,对文件进行压缩,很可能损坏文件中的内容,因此,压缩又可以分为有损压缩和无损压缩。无损压缩很好理解,指的是压缩数据必须准确无误;有损压缩指的是即便丢失个别的数据,对文件也不会造成太大的影响。有损压缩广泛应用于动画、声音和图像文件中,典型代表就是影碟文件格式 mpeg、音乐文件格式 mp3 以及图像文件格式 jpg。
采用压缩工具对文件进行压缩,生成的文件称为压缩包,该文件的体积通常只有原文件的一半甚至更小。需要注意的是,压缩包中的数据无法直接使用,使用前需要利用压缩工具将文件数据还原,此过程又称解压缩。
Linux 下,常用归档命令有 2 个,分别是 tar 和 dd(相对而言,tar 的使用更为广泛);常用的压缩命令有很多,比如 gzip、zip、bzip2 等。这些命令的详细用法,后续文件会做一一介绍。
注意,tar 命令也可以作为压缩命令,也很常用。
压缩的好处
节省磁盘空间占用率
节省网络传输带宽消耗
网络传输更快
常见的Linux压缩包
格式 | 压缩工具 |
.zip | zip压缩工具 |
.gz | gzip压缩工具,只能压缩文件,会删除源文件(通常配合tar使用) |
.tar | 归档 |
.bz2 | bzip2压缩工具,只能压缩文件,会删除源文件(通常配合tar使用)(不常用) |
.tar.gz | 先使用tar命令归档打包,然后使用gzip压缩 |
.tar.bz2 | 先使用tar命令归档打包,然后使用bzip压缩 |
gzip压缩工具
#安装gzip压缩工具:yum install -y gzip
gzip [选项] 文件名
-r + 目录 指定一个目录 将目录下的所有文件都压缩成gz包 并不打包目录
-d 解压文件
# 例:
[root@localhost mail]# touch file1
[root@localhost mail]# gzip file1
[root@localhost mail]# ll
total 4
-rw-r--r--. 1 root root 26 Aug 26 11:31 file1.gz 压缩完变成.gz的包出来了
-rw-rw----. 1 xxx mail 0 Aug 24 17:07 xxx
-rw-rw----. 1 zls mail 0 Aug 18 11:34 zls
特性:
1、gzip打包完之后,源文件被删了
相应解压后,压缩包没了,源文件出来
2、gzip打包 每一个文件都是独立的压缩包
# 3、gzip只能压缩文件 不能压缩目录
4、zcat可以查看包内容
[root@localhost dir1] # touch xxx{1..10}
[root@localhost dir1]# ll
total 0
-rw-r--r--. 1 root root 0 Aug 26 11:49 xxx1
-rw-r--r--. 1 root root 0 Aug 26 11:49 xxx10
-rw-r--r--. 1 root root 0 Aug 26 11:49 xxx2
-rw-r--r--. 1 root root 0 Aug 26 11:49 xxx3
-rw-r--r--. 1 root root 0 Aug 26 11:49 xxx4
-rw-r--r--. 1 root root 0 Aug 26 11:49 xxx5
-rw-r--r--. 1 root root 0 Aug 26 11:49 xxx6
-rw-r--r--. 1 root root 0 Aug 26 11:49 xxx7
-rw-r--r--. 1 root root 0 Aug 26 11:49 xxx8
-rw-r--r--. 1 root root 0 Aug 26 11:49 xxx9
[root@localhost dir1]# gzip /root/dir1 没加-r不行
gzip: /root/dir1 is a directory -- ignored
[root@localhost dir1]# gzip -r /root/dir1
[root@localhost dir1]# ll
total 40
-rw-r--r--. 1 root root 26 Aug 26 11:49 xxx10.gz
-rw-r--r--. 1 root root 25 Aug 26 11:49 xxx1.gz
-rw-r--r--. 1 root root 25 Aug 26 11:49 xxx2.gz
-rw-r--r--. 1 root root 25 Aug 26 11:49 xxx3.gz
-rw-r--r--. 1 root root 25 Aug 26 11:49 xxx4.gz
-rw-r--r--. 1 root root 25 Aug 26 11:49 xxx5.gz
-rw-r--r--. 1 root root 25 Aug 26 11:49 xxx6.gz
-rw-r--r--. 1 root root 25 Aug 26 11:49 xxx7.gz
-rw-r--r--. 1 root root 25 Aug 26 11:49 xxx8.gz
-rw-r--r--. 1 root root 25 Aug 26 11:49 xxx9.gz
[root@localhost dir1]# gzip -d /root/dir1/xxx1 解压文件xxx1
[root@localhost dir1]# ll
total 36
-rw-r--r--. 1 root root 0 Aug 26 11:49 xxx1
-rw-r--r--. 1 root root 26 Aug 26 11:49 xxx10.gz
-rw-r--r--. 1 root root 25 Aug 26 11:49 xxx2.gz
-rw-r--r--. 1 root root 25 Aug 26 11:49 xxx3.gz
-rw。。。。。。。。
zip压缩工具,unzip解压缩工具 (类似windows的zip解压软件)
#安装:
[root@localhost dir1]# yum install -y zip unzip
#语法:
zip [选项] 压缩包包名(给人看的) 文件1 文件2...
(自己起的名xxx.zip)
#选项
-r 递归处理,将目录下的所有文件压缩成一个包 (要到这个目录的上一级压缩)
不加r 去打包一个目录的话 则会打包一个空目录
所以如果目录李有文件 一定要+r
比如:
[root@localhost ~]# zip dir1.zip dir1 不加r
adding: dir1/ (stored 0%)
[root@localhost ~]# zipinfo -1 dir1.zip 查看内容
dir1/
[root@localhost ~]# zip -r dir1.zip1 dir1 加r
adding: dir1/ (stored 0%)
adding: dir1/xxx2.gz (deflated 20%)
......
[root@localhost ~]# zipinfo -1 dir1.zip1
dir1/
dir1/xxx2.gz
dir1/xxx3.gz
......
#特性
1.zip压缩后,源文件还在
unzip解压完包后,包不会消失,文件也会出来
2.zip可以压缩多个文件进一个包里
3.zip可以打包目录 前提是+r 不然会打包一个空目录
#怎么解压:unzip + 包名
1.unzip -d 指定的路径 包名
可以指定解压到指定的目录
tar Linux最常用工具,支持文件和目录的压缩归档
# 语法
tar [选项] 要放到的位置/包名 要压缩的文件
例如:
mkdir /client_backup
[root@web01 /client_backup]# cd /etc && tar zcf /client_backup/xxx.tar.gz passwd
[root@web01 /etc]# cd /client_backup/
[root@web01 /client_backup]# ll
total 4
-rw-r--r-- 1 root root 579 Oct 18 18:10 xxx.tar.gz
# 选项
-c 给文件做归档
-f 接包名
-z 以gzip格式压缩归档文件(.tar.gz)
-v 显示过程
-x:解压、解打包归档文件
-C:指定到解压的目录
-t:在不解压的情况下,列出文件
-j:以bzip2格式压缩归档文件(.tar.bz2)
-J:以xz的格式压缩归档文件
-X:排除不想要的文件 (写一个文件,将需要排除的文件 名放在文件中)
-h:打包软连接文件
cf 单纯打包
xf 解打包
# 常用打包与压缩组合
czf //打包tar.gz格式(最常用)
cjf //打包tar.bz格式
cJf //打包tar.xz格式
xzf //解压tar.gz格式
xjf //tar.bz格式
xf 自动选择解压模式
tf 查看压缩包内容
#拓展
--hard-derference 打包硬链接
--exclude 在打包的时候写入排除文件/目录
#注意的点
1 其他的选项可以不分先后,但是f永远放在选项的最后,接包名
2 万能的解包或解压 tar -xf
3 无论打包还是解压包,源文件不会消失,包不会消失
4 不能以绝对路径打包,避免在解压的时候会覆盖原目录文件
例子
打包/data目录
[root@nfs /]# tar zcf data_backup.tar.gz data
[root@nfs /]# ll
total 20
lrwxrwxrwx. 1 root root 7 Sep 9 18:09 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 Sep 9 18:15 boot
drwxr-xr-x 2 www www 6 Nov 3 17:26 data
-rw-r--r-- 1 root root 108 Nov 3 20:54 data_backup.tar.gz
#打包/tmp下所有文件
[root@zls ~]# cd /
[root@zls /]# find tmp/ -type f | xargs tar czf tmp.tar.gz
#打包/tmp下所有文件
[root@zls /]# tar czf tmp.tar.gz | xargs find tmp/ -type f
#打包/tmp下所有文件
[root@zls /]# tar czf tmp.tar.gz $(find tmp/ -type f)
#排除
#排除单个文件
[root@zls /]# tar czf etc.tar.gz --exclude=etc/services etc/
#排除多个文件
[root@zls /]# tar czf etc.tar.gz --exclude=etc/services --exclude=etc/rc.local etc/
[root@zls /]# tar czf etc.tar.gz --exclude=etc/{services,passwd,shadow,gshadow,group}
#将需要排除的文件写入文件中,指定需要排除的文件列表, 最后进行打包压缩
[root@zls /]# tar czfX etc.tar.gz paichu.list etc/
相关推荐
-
PHP8种变量类型的详细讲解2025-02-22 00:32:24
-
php+apache 和 php+nginx的区别2025-02-22 00:21:27
-
PHP:与workerman结合实现定时任务2025-02-22 00:15:57
-
Nginx的Rewrite规则与实例2025-02-22 00:15:39
-
MySql中身份证字段的简单脱敏介绍2025-02-22 00:15:36