新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
linux下的一些压缩和归档命令一、常见的压缩/解压缩工具compress
创新互联建站IDC提供业务:德阳电信服务器托管,成都服务器租用,德阳电信服务器托管,重庆服务器租用等四川省内主机托管与主机租用业务;数据中心含:双线机房,BGP机房,电信机房,移动机房,联通机房。
/
uncomprss
后缀:.zgzip
/
gunzip
后缀:.gzbzip2
/
bunzip2
后缀:.bz2zip
/
unzip
后缀:.zip注:第一种compress已经不太常见,后面三种都是现在比较流行的压缩/解压缩工具二、具体使用1)gzip$gzip
filename
//压缩一个文件,但是压缩后原来的文件会被删除$gunzip
fielname.gz
//解压后.gz文件会被删除$gzip
-d
filename.gz
//相当于gunzip
filename.gz$gzip
-c
filename
filename.gz
//用来实现既压缩原文件又保留原文件$gzip
-n
filename
//自定义压缩级别(级别1-9压缩比例由低到高,越高压缩速度越慢,默认为6)$zcat
filename.gz
//不解压的情况下查看压缩文件的内容注:gzip无法压缩目录(如果压缩目录,就对目录中的文件进行逐个压缩)2)bzip,压缩比相对gzip大一些,使用的格式和gzip类似,但有以下几个地方不同$bzip
-k
filename
//压缩后保留原文件$bzip2
-k
filname.bz2
//解压缩时保留原文件$bzcat
filename.bz2
//不用解压缩直接查看压缩文件的内容注:bzip也只能对单个文件压缩,不能压缩目录3)zip,可以同时归档并且压缩$zip
test.zip
filename1
filename2
filename3
//同时把几个文件压缩在一个文件里面(压缩不删除原文件,解压缩也不删除原压缩文件)注:zip可以对目录进行压缩,压缩后的文件名可以自定义4)tar,文件归档命令(本身不做任何压缩)$tar
-cf
test.tar
filename1
filename2
filename3
//必须指定归档后的文件名,-c:进行归档,-f:指定文件名$tar
-tf
test.tar
//查看归档文件的内容$tar
-xf
test.tat
//展开归档文件的内容$tar
-cvf
test.tar
filename1
filename2
filename3
//归档这三个文件,-v:显示归档过程信息$tar
-xvf
test.tar
//展开归档文件,并显示过程信息三、归档工具tar盒gzip,bzip2配合使用$tar
-zcvf
test.tar.gz
filename1
filename2
filename3
//归档并压缩这三个文件$tar
-zxvf
test.tar.gz
//解压缩并解档$tar
-jcvf
test.tar.bz2
filename1
filename2
filename3
//归档并压缩这三个文件$tar
-jxvf
test.tar.bz2
//解压缩并
解档$tar
-jxvf
test.tar.bz2
-C
/tmp
//-C:指定解压到的目录,默认为当前目录
tar命令用于对文件打包压缩或解压:
$ tar [选项] [文件]
以下是tar命令的常用参数:
tar是个打包的命令,它的作用是将一堆的文件或目录归档成一个.tar结尾的文件。生成tar包后,就可以用其他的压缩程序来对tar包进行压缩。
我们在上面看到的 -z 参数就是对tar包用Gzip程序进行了压缩,最后才生成了 .tar.gz 结尾的压缩包。如果不用 -z 参数而使用 -j 参数,也就是用bzip2程序压缩tar包,最后就会生成 .tar.bz2 结尾的压缩包。
使用tar命令打包压缩的一个好处是,它会保留原始文件的权限和属性。
我们经常会在windows系统上使用 .zip 格式的压缩文件,在linux中也可以将文件和目录压缩成zip格式,或者解压zip格式的压缩包。
但是zip的缺点是不能保留文件的权限和属性,解压后需要我们自己用chmod重新设置文件的权限。
高通量数据分析过程中涉及的中间文件,在存储量允许的前提下,可以将其暂存备查。通常可以将这些文件归档或压缩后保存,并打上日期标签,长时间未使用的非重要数据可考虑删除以腾出存储空间。在此总结Linux系统常用的归档与压缩指令。
归档 即将多个文件(目录)打包为一个文件,但并不对文件进行压缩。
从归档文件中提取指定文件
从压缩文件中提取指定文件
参考:
1. Linux tar 命令
2. 如何从一个tar包中或者tar.gz包中提取某个文件
归档:把多个文件组合到一个文件中。归档好处是,把文件数目变少,有利于降多个文件作为电子邮件附件发送,以及备份文件。
压缩:利用算法将文件有损或无损地处理,以达到保留最多文件信息,而令文件体积变小。压缩好处就是节约硬盘空间,以及减小电子邮件附件的大小,提高传输效率。
归档工具:tar cpio
tar是Unix和类Unix系统上的打包工具,可以将多个文件合并为一个文件,最初的设计目的是将文件备份到磁带上(tape archive),因而得名tar。
压缩工具:zip,gzip,uncompress,bzip2
tar中主要用到的参数
c 创建归档
x 提取归档
t 测试或列出归档内容
v 显示详细信息
f 指出要创建或提取的归档文件名称
z 使用gzip压缩类型
j 使用bz2压缩类型
r 追加
gzip :
#gzip filename //压缩一个文件,但是压缩后原文件会被删除
#gunzip filename.gz //解压后.gz的文件会被删除
#gzip -d filename.gz //相当于命令gunzip file.gz
#gzip -c filename filename.gz //用来实现即压缩原文件又保留原文件
#gzip -n filename //自定义压缩级别
#zcat filename.gz //不解压缩的情况下查看压缩文件的内容
bzip:
#bzip2 -k filename //压缩后保留原文件
#bzip2 -k filename.bz2 //解压缩是保留原文件
#bzcat filename.bz2 //不用解压缩直接查看压缩文件内容
bzip也是只能对单个文件压缩,不能压缩目录
zip :可以同时归档并且压缩
#zip message.zip file1 file2 file3 //同时把几个文件压缩在一个文件里面
zip这个工具可以对目录进行压缩,压缩后的名字可以自己指定
tar 的功能类似于 Windows 中的 WinRAR。它可以将多个目录或文件打包成一个大文件,在打包的过程中还可以透过 gzip/bzip2/xz 的支持,对文件进行压缩 1 。
tar 的选项参数很多,主要用到的有以下这些:
还是太多,记不住怎么办? 记住下面这些最常用的命令即可:
总结一下:z 为gzip;j 为bzip2;J 为xz。c 为压缩;t 为查询;x 为解压缩。最后跟着 vf。f 一定要是最后一个,如果放在其他选项之前,tar 就会把文件名搞错。比如 tar -zcfv xxx 命令,tar 指令就会认为压缩文件名为 v!
压缩的文件名称要根据压缩算法加上响应的后缀:
只有知道了压缩算法,我们才能解的出来,你说是吗?所以文件名规范很重要。
假设我们需要备份 /etc 文件夹,把它打成一个压缩包 1 。这在实际应用中很常见,因为 /etc 文件夹存放了系统主要配置文件。在英文中完整单词是etc.,也就是后面会带上一个句点,表示“等等”之意。
接下来,我们分别使用 gzip、bzip2与 xz 算法对 /etc 文件夹进行打包压缩。
gzip 压缩指令: time tar -zpcvf /root/etc.tar.gz /etc
bzip2压缩指令: time tar -jpcvf /root/etc.tar.bz2 /etc
xz 压缩指令: time tar -Jpcvf /root/etc.tar.xz /etc
从 real 中可以看出: gzip 的压缩速度最快,而 xz 的压缩速度最慢。
从大小上来看,xz 的压缩率最高,而gzip 压缩率最差。
压缩率高,自然需要时间成本。因此需要压缩的文件夹很大,那么就要多多考虑时间成本咯。因为 gzip 压缩速度快,这也是 *.tar.gz 比较流行的原因之一。
假设有这样一种场景:我们需要打包某个文件夹(/root),但这个文件夹中的某个文件或者子文件夹不想打包进去(带 etc 前缀)。也就是希望这个文件夹部分打包,部分不打包。可以执行以下指令:
tar -zcvf /root/test.tar.gz --exclude=/root/etc* --exclude=/root/test.tar.gz /root
加了 --exclude=/root/test.tar.gz 是为了排除自身,否则压缩包中会包含一个大小为 0 的自身文件,这恐怕不是我们希望看到的:
通过 tar -ztvf test.tar.gz 就可以查看刚刚新打的压缩包中所包含的文件列表:
使用命令 tar -ztvf etc.tar.gz 查看刚刚打好的压缩包。注意要使用匹配的解压缩算法才能正确解压,比如示例中是 gz 作为后缀,所以加了 -z 选项表示使用 gzip 算法进行解压。
部分输出内容:
可以看到该命令把文件的权限、账户以及归属组也一并打印出来了。
而且还有一点很关键,这些文件都没有根目录。如果没有拿掉根目录,解压缩后的文件名就会是绝对路径, 亦即解压缩后的数据一定会被放置 到 /etc/xxx 去 1 !这样系统的 /etc 文件夹就会被覆盖,后果很严重。所以,tar 打包指令默认都会去除放入包中文件的根目录。除非通过 -P 显示要求保留这些文件的根目录。
(1)完全解压
利用 tar -zxvf etc.tar.gz -C /tmp 命令把 etc.tar.gz 解压到 /tmp。解压成功后,就会在 /tmp 下看到 /etc 文件夹。
如果需要在本地路径下直接解开,那直接执行 tar -zxvf etc.tar.gz 即可。
(2)部分解压
假设我们需要把压缩包(etc.tar.gz)中的 vconsole.conf 解压出来。可以先执行以下命令,查询出该文件所对应的相对路径:
tar -ztvf etc.tar.gz | grep ‘console’
拿到需要解压的文件路径之后,就可以执行 tar -zxvf etc.tar.gz etc/vconsole.conf
进入当前目录的 etc 文件夹,就可以看到 vconsole.conf 已经被解压出来了:
【1】 鸟哥. 鸟哥的Linux私房菜 基础学习篇[M]. 第四版. 北京: 人民邮电出版社,2018:359-362.