文件与文件系统的压缩
Linux系统常见的压缩命令
几个常见的压缩文件扩展名
- *.Z:compress程序压缩的文件
- *.zip:zip程序压缩的文件
- *.gz:gzip程序压缩的文件
- *.bz2:bzip2程序压缩的文件
- *.xz:xz程序压缩的文件
- *.tar:tar程序打包的文件,并没有压缩过
- *.tar.gz:tar程序打包的文件,并且经过gzip的压缩
- *.tar.bz2:tar程序打包的文件,并且经过bzip2的压缩
- *.tar.xz:tar程序打包的文件,并且经过xz的压缩
gzip,zcat/zmore/zless/zgrep
gzip可以解压缩compress、zip、gzip等软件所压缩的文件,gzip建立的压缩文件为*.gz
gzip [-cdtv#] 文件名
- -c:将压缩的数据输出到屏幕上,可通过数据流重定向来处理
- -d:解压缩的参数
- -t:可以用来检验一个压缩文件的一致性,看看文件有无错误
- -v:可以显示出原文件/压缩文件的压缩比等信息
- -#:#是数字的意思,代表压缩等级,-1最快,但是压缩比最差,-9最慢,但是压缩比最好,默认是-6
找出/etc下面容量最大的文件,并且复制到/tmp里面,然后以gzip进行压缩
使用gzip的时候默认情况下原本的文件会被压缩成为.gz后缀的文件,源文件就不存在了
由于services是文本文件,请将其压缩文件的内容读取出来
zcat services.gz
将services.gz解压缩
与gzip -v相反,gzip -d解压缩后会把原来的压缩文件删除
将services用最高压缩比压缩并保留源文件
找出‘http’这个关键字在services.gz中出现在哪几行
bzip2,bzcat/bzmore/bzless/bzgrep
如果说gzip是为了替换compress并提供更好的压缩比而成立的,那么bzip2是为了替换gzip并提供更佳的压缩比而成立的
bzip2 [-cdkzv#] 文件名
bzcat 文件名.bz2
- -c:将压缩的过程产生的数据输出到屏幕上
- -d:解压缩的参数
- -k:保留原始文件,而不会删除原来的文件
- -z:压缩的参数(默认值)
- -v:可以显示出源文件/压缩文件的压缩比等信息
- -#:与gzip一致,-9最佳,-1最快
将services文件用bzip2压缩
xz,xzcat/xzmore/xzless/xzgrep
xz拥有比bzip2更高的压缩比
xz [-dtlkc#] 文件名
xcat 文件名.xz
- -d:就是解压缩
- -t:测试压缩文件的完整性,看看有无错误
- -l:列出压缩文件的相关信息
- -k:保留原本的文件不删除
- -c:在屏幕上输出
- -#:#是数字,-9最佳,-1最快
如果时间不是首要的考虑,那么xz这种有更高压缩比的工具更适合使用,如果要考虑时间的问题,那还是用gzip吧
打包命令:tar
tar可以将多个目录或文件打包成一个大文件,同时还可以通过gzip、bzip2、xz的支持
常用选项与参数
打包与压缩:tar [-z|-j|-J] [cv] [-f 待建立新的文件名] filename
查看文件名:tar [-z|-j|-J] [tv] [-f 已有的tar文件名]
解压缩:tar [-z|-j|-J] [xv] [-f 已有的tar文件名] [-C 目录]
- -c:建立打包文件,可搭配-v来查看过程中被打包的文件名
- -t:查看打包文件的内容含有哪些文件名,重点在查看文件名
- -x:解包或解压缩的功能,可以搭配-C在特定目录解压,特别留意的是**-c、-t、-x不可同时出现在一串命令行中**
- -z:通过gzip的支持进行压缩/解压缩:此时文件名最好为:***.tar.gz **
- -j:通过bzip2的支持进行压缩/解压缩:此时文件名最好为:***.tar.bz2 **
- -J:通过xz的支持进行压缩/解压缩哦:此时文件名最好为:***.tar.xz ,特别留意,-z、-j、-J不可以同时出现在遗传命令行中**
- -v:在压缩/解压缩的过程中,将正在处理的文件名显示出来
- -f filename:-f后面要立刻接要被处理的文件名,建议-f单独写一个选项(比较不会忘记)
- -C 目录:这个选项用在解压缩,如果要在特定目录解压缩,可以使用这个选项
- -p(小写):保留备份数据的原本权限和属性,常用于备份(-c)重要的配置文件
- -P(大写):保留绝对路径,就是允许备份数据中含有根目录存在的意思
- –exclude=FILE:在压缩过程中,不要将FILE打包
我常用的解压缩命令:tar -xvzf filename,加入了-z,支持gzip
- 压缩:tar -jcv -f filename.tar.bz2 要被压缩的文件或目录
- 查询:tar -jtv -f filename.tar.bz2
- 解压缩:tar -jxv -f filename.tar.bz2 -C 要解压缩的目录
使用tar加入-z、-j或-J的参数来备份/etc/目录
time tar -zpcv -f /root/etc.tar.gz /etc(-p保留原本文件的权限与属性)
time tar -jpcv -f /root/etc.tar.bz2 /etc
time tar -Jpcv -f /root/etc.tar.xz /etc
可以看到xz压缩后的文件大小相比其他两个是最小的,但是时间雀食优点久
为什么要去掉根目录?
我们使用tar备份的数据可能会需要就压缩回来使用,此时tar记录的文件名就是解压缩后的实际文件名,用/etc/xxx举例子,如果拿掉根目录,我们在/tmp下解开就会变成/tmp/etc/xxx,而如果不去掉根目录,解压出来就会是绝对路径,即解压后的文件会被放到/etc/xxx中,把原来etc下的数据覆盖掉。所以不要随便用-P参数
将备份的数据解压缩,并考虑特定目录的解压缩操作(-C的应用)
在本目录下进行解压缩的操作:tar -jxv -f /root/etc.tar.bz2,但是如果我想让其在/tmp目录下解压缩,那就得cd/tmp再执行上述命令,会显得有点麻烦,这时可以使用-C的选项:tar -jxv -f /root/etc.tar.bz2 -C /tmp
仅解开单一文件
管道|配合grep可以截取关键词,
tar -jtv -f /root/etc.tar.bz2 | grep 'shadow'
语法:
tar -jtv -f 打包文件.tar.bz2 待解开文件名
tar -jtv -f /root/etc.tar.bz2 etc/shadow
打包某目录但不含该目录下的某些文件
tar -jcv -f 打包文件.tar.bz2 --exclude=不包含的文件名
基本名称
tarfile:tar打包出来的文件.tar后缀的就是tarfile
tarball:带有别的压缩的支持例如.tar.bz2格式的,就是tarball
利用管道命令与数据流
将/etc整个目录进行打包的同时在/tmp下解开
tar -cvf - /etc | tar -xvf -
-就表示这个被打包的文件