国庆节马上就要过去了,然而笔者的作业还没完成(太真实了)。现在的代码提交都要进行打包(降低带宽占用+减少接收方磁盘使用率),于是我寻思着能否利用Linux下的工具进行打包,遂有此文。
一. Linux系统中常见的压缩命令
命令 | 优点 | 缺点 |
gzip | 压缩时间短; 压缩文件也能用WinRAR和7Zip解压 | 压缩效率最低 |
bzip2 | 一种比较中庸的选择 | 名字太难记了 |
xz | 压缩能力最强 | 压缩时间太长了 |
(虽然书上是这么说的,但是有时我用time测试出来的时间bzip2比gzip做的又快又好)
这些命令的参数都差不多,常用的有这三个:
- -c :将压缩过程中产生的数据输出到屏幕上。
- -d :解压缩的参数(也就是说,上述三个命令不仅能压缩文件,还能解压文件)
- -v :可以输出压缩比信息。
使用的方法:
command filename
注意:
- 默认状态下生成的压缩文件的名称格式是filename.gz/bz2/xz。
- 压缩以后,源文件就不复存在了。
二. Linux下打包命令
一中介绍的三个命令有着非常致命的缺陷——就是文件只能一个一个压缩。然而我们常用的Windows下的压缩软件都是能把文件夹直接打包压缩的,所以有没有一个命令能把Linux下的文件直接打包好呢?当然有,那就是我们的tar命令。
tar命令的作用是将多个文件合并为一个文件。而且原来的文件不会消失,名字也要重新取(这点和之前三个压缩命令很不一样)
tar的命令行参数很多,最重要的无非就那几个:
命令行参数 | 作用 |
---|---|
-c/-t/-x | 选择模式:压缩/查询/解压 |
-z/-j/-J | 对应压缩命令(见上) |
-C/-p/-P等 | 稍微有一点技巧性的命令行参数(见下) |
好,下面来介绍一下所谓有技巧性的命令行参数,这里以具体的情景展开:
- 是否覆盖原来的文件(-P):你要知道我们tar命令是不会让原来的文件消失的。如果带着根目录打包,最后解压出来的也是绝对路径,这样就会把原来的文件给覆盖掉。-P参数,是通过把/去掉,使绝对路径变成相对路径,从而不会影响到原来的文件。
- 我想把解压后的文件放到另外一个目录(-C):刚刚提到我们解压出来的是相对路径。那么如果不指定解压目录的话,就放在原来的文件夹中了,-C参数,就是指定解压的目录。
- 我想保留原来文件的权限(-p):很多对文件的操作(比如cp)都会在无意之中改变文件的权限,指定-p参数,就不需要担心这种事情了。
- 仅解压单一文件:找到单你想解压的文件名,放在该命令的末尾即可。
- 不打包目录下的某些文件:--exclude=FILE
- 仅备份比某个时刻还要新的文件:tar里面没整这个,这是find的命令行参数:--newer(mtime和ctime),--newer-mtime(仅mtime)——(现在你知道mtime的重要了吧)
总结一下,一般而言,最简单使用tar命令,只需要记住以下三个即可:
- tar -jcv -f filename filename.tar.bz2——压缩
- tar -jtv -f filename.tar.bz2——查询
- tar -jxv -f filename.tar.bz2——解压
(P.S. 这里有一个小小的技巧:在Linux下,命令行参数的顺序没什么关系,甚至可以写在一起,除非是像以上这种后面还可以接参数的情况,这时候我们可以把该参数单独提出来,防止弄错)