Linux文件压缩
这一部分比较简单,主要就是几条命令的记忆。另外linux下的几条命令(不包括zip)都是针对“文件”来使用的,即使操作对象是“文件夹”,实际上也是分别压缩文件夹下的每一个文件,所以要想压缩整个文件夹的时候我们首先需要将其打包,使用tar
指令,将文件夹打包成一个文件(默认是不进行压缩的)。不过现在tar打包的时候也可以使用参数指定压缩方法,如:
- -z 使用gzip压缩
- -j 使用bzip2压缩
- -J 使用xz进行压缩
这几种压缩方式,压缩率依次增加,但是花费的时间代价也越多,xz可能要比gzip多花十倍时间。
压缩解压缩命令
gzip
gzip可以解压compress,zip,gzip压缩的软件,创建的文件则为*.gz。
|
|
gzip压缩的时候,会直接吧源文件压缩,即压缩完之后就只剩下.gz文件了所以可以使用-c 之后重定向到新文件中。
gzip -c files > files.gz
,如果压缩的是纯文本文件还可以使用zcat,zmore zless,zgrep等命令进行查看。
bzip2
bzip2 提供了更高的压缩率,使用方式也基本相同。
|
|
同样如果压缩的是纯文本内容,可以使用 bzcat/bzmore/bzless/bzgrep来进行查看。
xz
比bzip2有者更高的压缩比,压缩耗时更长。用法也基本一样。
|
|
打包指令tar
之前说了,上面的几条压缩指令都是对于单个文件来执行的,要想压缩整个文件夹,我们需要先将文件夹打包,这就涉及到tar指令了,目前的tar在打包的同时也可以指定压缩方式,以上面几种压缩方式进行压缩。
|
|
命令示例:
- 压缩:
tar -jcvf file.tar.bz2
- 查询:
tar -jtvf file.tar.bz2
(加上v就能查看权限和属性) - 解压:
tar -jxvf file.tar.bz2 -C /dir
- 解压单一文件 先通过 -jtvf列出文件并找到要解压的文件然后使用
tar -jxvf files.tgz targetfile
即可。 - 使用–exclude= 可以排除目录或者文件,多个目录需要重复写多次。
- 仅备份比某个时刻新的文件, 使用–newer-mtime/–newer (只有newer的话还会判断ctime)可以找出指定时刻之后的文件并进行备份,可以使用这个来做增量备份(我之后已更改也会利用这个做一个存档的增量备份与还原脚本)。
tar -zcvf /home.tgz --newer-mtime="2020/11/11" /home/*
我们称仅打包得到的文件为tarfile,打包加压缩得到的文件为tarball。tar还可以将文件打包到其他地方,如一次性写入设备(磁带)无法使用cp来复制,就得使用tar来打包了。
额外补充 dd
另外补充一下dd这条命令,我们值卡创建一个文件使用到了dd命令,不过dd不止可以用来创建一个空白的文件,也可以用来进行复制备份(不压缩),还可以将iso文件的内容写道磁盘/U盘上。
dd命令可以直接读取磁盘的内容(直接读取扇区)
|
|
不过由于dd是一个扇区一个扇区的读/写,所以即使扇区中只有部分空间具有数据,也会原样复制,所以dd备份出来的文件和原来的文件系统是一样大的(即使原文件系统只使用了部分空间),而诸如xfsdump等备份指令会重新组织文件,会忽略空的部分。另外,由于dd是按扇区来复制,所以超级块等信息也会被复制一份,这样dd出的备份是没办法直接挂载在同一个文件系统内的,我们可能还需要做一些符合当前文件系统要求的操作,诸如UUID等属性,才能挂载到当前文件系统下。