Linux文件管理:打包与压缩

图片[1]-Linux文件管理:打包与压缩-不念博客

打包与压缩的概念介绍

归档,也称为打包,指的是一个文件或目录的集合,而这个集合被存储在一个文件中。归档文件没有经过压缩,因此,它占用的空间是其中所有文件和目录的总和。通常,归档总是会和系统(数据)备份联系在一起。

压缩是指利用算法将文件进行处理,已达到保留最大文件信息,而让文件体积变小的目的。其基本原理为,通过查找文件内的重复字节,建立一个相同字节的词典文件,并用一个代码表示。比如说,在压缩文件中,有不止一处出现了 “Andrew Notes”,那么,在压缩文件时,这个词就会用一个代码表示并写入词典文件,这样就可以实现缩小文件体积的目的。

由于计算机处理的信息是以二进制的形式表示的,因此,压缩软件就是把二进制信息中相同的字符串以特殊字符标记,只要通过合理的数学计算,文件的体积就能够被大大压缩。把一个或者多个文件用压缩软件进行压缩,形成一个文件压缩包,既可以节省存储空间,有方便在网络上传送。

如果你能够理解文件压缩的基本原理,那么很容易就能想到,对文件进行压缩,很可能损坏文件中的内容,因此,压缩又可以分为有损压缩和无损压缩。无损压缩很好理解,指的是压缩数据必须准确无误;有损压缩指的是即便丢失个别的数据,对文件也不会造成太大的影响。有损压缩广泛应用于动画、声音和图像文件中,典型代表就是影碟文件格式 mpeg、音乐文件格式 mp3 以及图像文件格式 jpg。

采用压缩工具对文件进行压缩,生成的文件称为压缩包,该文件的体积通常只有原文件的一半甚至更小。需要注意的是,压缩包中的数据无法直接使用,使用前需要利用压缩工具将文件数据还原,此过程又称解压缩。

Linux 下,常用归档命令有 2 个,分别是 tar 和 dd(相对而言,tar 的使用更为广泛);常用的压缩命令有很多,比如 gzip、zip、bzip2 等。这些命令的详细用法,后续文件会做一一介绍。

注意,tar 命令也可以作为压缩命令,也很常用。

压缩的好处


节省磁盘空间占用率
节省网络传输带宽消耗
网络传输更快

常见的Linux压缩包

格式压缩工具
.zipzip压缩工具
.gzgzip压缩工具,只能压缩文件,会删除源文件(通常配合tar使用)
.tar归档
.bz2bzip2压缩工具,只能压缩文件,会删除源文件(通常配合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/
© 版权声明
THE END
喜欢就支持一下吧
点赞150赞赏 分享
评论 抢沙发
头像
欢迎光临不念博客,留下您的想法和建议,祝您有愉快的一天~
提交
头像

昵称

取消
昵称代码图片

    暂无评论内容