文件压缩
计算机使用byte单位来计量。实际上,计算机最小的计量单位是bit。1byte = 8 bit。如果记录1这个数字,00000001,1会在最右边占一个1个bit
其他7个bit会被填上0。其实在这个例子中那7个bit是“空的”。为了要满足目前我们的操作系统数据的访问,会将该数据转为byte形态记录了。而一些
聪明的设计师就利用一些复杂的计算方式,将这些没有使用到的空间“丢”出来,让文件占用的空间变小。这就是压缩的技术。
另外一种压缩技术也很有趣,它是将重复的数据进行统计记录的,比如,如果你的数据为“111……”,共有100个1时,那么压缩技术会记录为“100个1”
而不是真的有100个1存在。这样也能够精简文件记录的内容。
简单地说,你可以将它想象成,文件里面有相当多的“空间”存在,并不是完全填满的,而“压缩”的技术就是将这些“空间”填满,让整个文件占用量下降。
这些压缩过的文件无法直接被操作系统所使用,因此,若要使用这些被压缩过的文件数据,必须将它“还原”成未压缩前的样子,这就是所谓的“解压缩0”。
压缩前与压缩后的文件所占用的磁盘空间大小,就被称为“压缩比”。
在Linux环境中,压缩文件的扩展名大多是*.tar,*.tar.gz,*.tgz,*.gz,*.Z,*.bz2,为什么会有这样的扩展名,不是说Linux的扩展名没有什么作用吗?
这是因为Linux的压缩命令非常多,且不同的命令所用的压缩技术并不相同,当然彼此之间可能就无法相互压缩/解压缩文件。所以,当你下载到某个压缩文件
时,自然就要知道该文件是由哪种压缩命令所制作出来了。
gzip,zcat
gzip是应用最广泛的要命令了,gzip可以解开compress、zip与gzip等软件所压缩的文件。gzip新建的压缩文件为*.gz的文件名。
当使用gzip压缩时,默认状态下原本的文件会被压缩称为.gz的文件名,原文件就不存在了。
gzip的压缩已经优化过了,虽然gzip提供1~9的压缩等级,不过使用默认的6就非常好用了。cat可以读取纯文本文件,那个zcat可以读取纯文本文件被压缩
后的压缩文件。
bzip2,bzcat
bzip2是为了取代gzip并提供更加的压缩比而来的。bzip2是很不错的东西,竟然比gzip还要好。
使用gzip扩展名自动创建为.gz。bzip2扩展名为.bz2。如果想要读取压缩文件的内容呢?是否一定要解压缩?当然不需要。使用bzcat这个命令
来读取内容即可。当你要解开一个压缩文件时,这个文件的名称为.bz,.bz2,.tbz,tbz2等,那么就可以尝试使用bzip2来解压缩。
打包命令
虽然gzip、bzip2也能够针对目录进行压缩,不过这两个命令对目录的压缩指的是将目录内所有文件“分别”进行压缩的操作。这种将多个文件或目录包成一个大文件的命令
功能,我们可以称呼它是一种“打包命令”。tar可以将多个目录或文件打包成一个太大文件,同时还可以通过gzip/bzip2的支持,该文件同时进行压缩。
tar
最简单使用tar就只要记忆如下的内容即可:
- 压缩: tar -jcv -f filename.tar.bz2要被压缩的文件或目录名称
- 查询: tar -jtv -f filename.tar.bz2
- 解压缩: tar -jxv -f filename.tar.bz2 -C 预解压缩的目录
filename.tar.bz2是我们自己取的文件名,tar不会主动产生创建的文件名,要自定义。所以扩展名就很重要了,如果不加[-j]|[-z],文件名最好为.tar即可
如果是-j参数,代表有bzip2的支持,因此文件名最好取为*.tar.bz2,因为bzip2会产生bz2的扩展名。至于如果是加上了-z的gzip的支持,那文件名最好
取为*.tar.gz。
使用tar加入-j或者-z的参数备份/etc/目录
我们知道bzip2也即-j这个参数来制作备份时,能够得到比较好的压缩比。"-p"这个参数的原因是为了保存原文件的权限与属性。
查阅tar文件的数据内容(可查看文件名)
查看文件名:
加上-v这个参数时,详细的文件权限/属性都会被列出来。如果只是想知道文件名唯一,就将-v去掉。从上面的数据我们可以
发现一件很有趣的事情,那就是每个文件名都没有了根目录了。那为什么要删掉目录呢?主要是为了安全,我们使用tar备份的数据
可能会需要解压缩回来使用,在tar所记录的文件就是解压缩后的实际文件名。如果去掉根目录,假设你将备份数据在/tmp中解开,那
么解压缩的文件名变成“/tmp/etc/xxx”。但如果没有去掉根沐,解压缩后的文件名就会是绝对路径,即解压缩后的数据一定会被放置到
/etc/xxx去。如此一来,你的原来的/etc/下面的数据就会被备份数据所覆盖掉了。
如果你确定是需要保留根目录到tar文件中(备份),那么可以使用-P(大写这个参数)
将数据解压缩
在当前目录下进行解压缩的操作:
指定解压的目录:
进解开单一文件:
打包目录,但不包含该目录下的某些文件
假设想打包/etc/和/root这几个重要的目录,但不想要打包/root/etc*开头的文件,假设这个新的打包文件为/root/system.tar.bz2,
如果想要两行输入时,最后面加上反斜杠()并立刻按下[Enter],就能够到第二行继续输入了。
仅备份比某个时刻还要新的文件
某些情况下想要备份新的文件,不想备份旧文件。此时--newer-mtime这个参数就很重要。其实这是两个参数“--newer”表示后续
日期包含“mtime”与“ctime”,而"--newer-mtime"仅是mtime而已。
基本名称
tar打包出来的文件有没有进行压缩得到的文件称为不同。如果仅是打包而已,就是“tar -cv -f file.tar” 这个文件我们称呼为tarfile。如果还进压缩的支持
例如 “tar -jcv -f file.tar.bz2”时,我们称呼为tarball。这只是一个基本称呼。tar除了可以将数据打包成文件职位,还能够将文件打包到特别的设备。