本文知识点:gzip、bzip2、xz、tar
- 压缩效率:gzip>bzip2>xz
- 压缩比:gzip<bzip2<xz
我们都知道对于Linux来说,文件扩展名并没有实质的作用,扩展名只是为了能够快速的判断它是什么类型的文件,从而使用对应的程序来使用它。压缩包文件亦是如此,常见的压缩包扩展名有:*.tar、*.gz、*.bz2、*.xz、*.tar.gz等。通过扩展名来判断是使用哪种压缩软件所压缩出来的,从而使用对应的压缩命令来解压文件。
简单列一下压缩程序与扩展名的对应关系:
*.gz | gzip程序压缩的文件 |
*.bz2 | bzip2程序压缩的文件 |
*.xz | xz程序压缩的文件 |
*.tar | tar程序打包的文件,非压缩 |
*.tar.gz | tar程序打包的文件,并用gzip压缩 |
*.tar.bz2 | tar程序打包的文件,并用bzip2压缩 |
*.tar.xz | tar程序打包的文件,并用xz压缩 |
1.gzip,zcat/zmore/zless/zgrep
[root@Ansible ~]# gzip --help Usage: gzip [OPTION]… [FILE]… 常用参数介绍: -c:将压缩的数据输出到屏幕上 -d:解压缩 -t:检查压缩包文件的一致性 -l:列出压缩文件的相关信息 -v:显示压缩比 number:number取值-1~-9,-1压缩速度最快,压缩比最差;-9压缩速度最慢,压缩比最高,默认取值-6
简单使用:
[root@Ansible study]# ll total 12 -rw-r--r--. 1 root root 11423 Nov 9 22:30 123.sh [root@Ansible study]# gzip -v 123.sh 123.xlsx: 23.3% -- replaced with 123.sh.gz #在默认情况下,源文件会被压缩成.gz文件,而源文件就不再存在了。 [root@Ansible study]# gzip -l 123.sh.gz compressed uncompressed ratio uncompressed_name 8789 11423 23.3% 123.sh
压缩文件不是能通过cat/less/more/grep直接读取的,而zcat/zmore/zless/zgrep可以用来读取gzip生成的压缩文件。
2.bzip2,bzcat/bzmore/bzless/bzgrep
用法几乎与gzip一样
3.xz,xzcat/xzmore/xzless/xzgrep
用法几乎与gzip一样
4.tar
gzip、bzip2、xz仅能对单一的文件进行压缩,即使对目录压缩,也是对目录中的文件分别进行压缩,并不会将目录打包。
[root@Ansible study]# tar [-zjJcCxvpPt] [-f name.tar] filename/dirname 常用参数介绍: -c:打包文件 -x:解压缩文件 -z:使用gzip进行压缩或解压缩 -j:使用bzip2进行压缩或解压缩 -J:使用xz进行压缩或者解压缩 -C:指定解压目录 -v:将压缩或解压缩打印在屏幕上 -p:保留源文件的权限和属性,常用于备份 -P:保留绝对路径,一般不建议使用,使用此参数的备份路径前会以/开头,解压缩时容易覆盖现有目录 -t:查看打包文件内含有哪些文件 -f:指定打包文件名 --exclude=file:排除文件不打包
常用选项,可根据实际情况-z、-j或者-J:
- 压缩:tar -zcv -f filename.tar.gz filename/dirname
- 查询:tar -ztv -f filename.tar.gz
- 解压缩:tar -zxv -f filename.tar.gz -C dest_dir
5.gzip、bzip2、xz压缩比与效率比较
对比real所消耗的时间:
[root@Ansible ~]# time tar -zcp -f /root/etc.tar.gz /etc/ tar: Removing leading `/' from member names #移除了目录前面的/ real 0m1.024s user 0m0.921s sys 0m0.095s [root@Ansible ~]# time tar -jcp -f /root/etc.tar.bz2 /etc/ tar: Removing leading `/' from member names real 0m2.765s user 0m2.548s sys 0m0.203s [root@Ansible ~]# time tar -Jcp -f /root/etc.tar.xz /etc/ tar: Removing leading `/' from member names real 0m12.471s user 0m11.796s sys 0m0.606s
压缩文件大小对比:
[root@Ansible ~]# ll -h etc.tar.* -rw-r--r--. 1 root root 9.8M Nov 10 19:59 etc.tar.gz -rw-r--r--. 1 root root 8.7M Nov 10 19:59 etc.tar.bz2 -rw-r--r--. 1 root root 7.0M Nov 10 19:59 etc.tar.xz
6.备份较新的文件
使用–newer-time参数即可
[root@Ansible ~]# tar -zcvp --newer-mtime="20200101" -f /root/etc.newer.tar.gz /etc/
需要注意的是此参数只是对文件的时间进行筛选,对目录是无效的,它会把所有的目录打包进来。一开始还以为–newer-time参数没起作用(ˉ▽ˉ;)…
[root@Ansible study]# ll total 12 drwxr-xr-x. 3 root root 16 Nov 10 21:24 1 -rw-r--r--. 1 root root 12 Nov 9 22:51 1.txt drwxr-xr-x. 2 root root 6 Nov 10 21:24 2 -rw-r--r--. 1 root root 10 Nov 9 22:51 2.txt drwxr-xr-x. 2 root root 6 Nov 10 21:24 3 -rw-r--r--. 1 root root 16 Nov 9 22:51 3.txt [root@Ansible study]# tar -zcv --newer-mtime="20201111" -f test.tar.gz ./ tar: Option --newer-mtime: Treating date `20201111' as 2020-11-11 00:00:00 ./ ./1/ ./1/11/ ./2/ ./3/ tar: ./1.txt: file is unchanged; not dumped tar: ./2.txt: file is unchanged; not dumped tar: ./3.txt: file is unchanged; not dumped [root@Ansible study]# tar -ztv -f test.tar.gz drwxr-xr-x root/root 0 2020-11-10 21:31 ./ drwxr-xr-x root/root 0 2020-11-10 21:24 ./1/ drwxr-xr-x root/root 0 2020-11-10 21:24 ./1/11/ drwxr-xr-x root/root 0 2020-11-10 21:24 ./2/ drwxr-xr-x root/root 0 2020-11-10 21:24 ./3/
「 文章如果对你有帮助,请点个赞哦^^ 」 
4+
若无特殊注明,文章均为本站原创或整理发布。
转载请注明本文地址:https://om.fangxiaoxiong.com/4253.html