vlambda博客
学习文章列表

linux最全的压缩命令整理

1. gzip

gzip命令创建的文件后缀名为.gz

[dmtsai@study ~]$ gzip [-cdtv#] 文件名
[dmtsai@study ~]$ zcat 文件名.gz
选项与参数:
-c :将压缩的数据输出到屏幕上,可通过数据流重导向来处理;
-d :解压缩的参数;
-t :可以用来检验一个压缩文件的一致性~看看文件有无错误;
-v :可以显示出原文件/压缩文件的压缩比等信息;
-# :# 为数字的意思,代表压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!默认是 -6
范例一:找出 /etc 下面 (不含子目录) 容量最大的文件,并将它复制到 /tmp ,然后以 gzip 压缩
1.1 压缩文件

使用gzip压缩文件,源文件会直接压缩,所以压缩前先备份一份。-v显示压缩的百分比。压缩名称是文件名.gz

[root@zhanghao-server ~]# gzip -v backup.sh
backup.sh: 8.1% -- replaced with backup.sh.gz
[root@zhanghao-server ~]# ls
anaconda-ks.cfg backup backup.sh.gz data

1.1.1 读取压缩文件

压缩纯文本文件后,可以使用zcat进行读取

[root@zhanghao-server ~]# zcat backup.sh.gz
#!/bin/bash

DATA_DIR=
BACKUP_DIR=

zgrep截取

[root@zhanghao-server ~]# zgrep -n 'bash' backup.sh.gz
1:#!/bin/bash
解压

有两种方式,gzip -d和gunzip

$ gzip -d backup.sh.gz

2. bzip2

bzip2效果要比gzip好用

bzip2: 
选项与参数:
-c :将压缩的过程产生的数据输出到屏幕上!
-d :解压缩的参数
-k :保留原始文件,而不会删除原始的文件喔!
-z :压缩的参数 (默认值,可以不加)
-v :可以显示出原文件/压缩文件的压缩比等信息;
-# :与 gzip 同样的,都是在计算压缩比的参数, -9 最佳, -1 最快!
2.1

和gzip一样,bzip2是在源文件上进行压缩的,操作前备份,后缀名为.bz2

[root@zhanghao-server ~]# bzip2 -v backup.sh
backup.sh: 0.451:1, 17.730 bits/byte, -121.62% saved, 37 in, 82 out.
[root@zhanghao-server ~]# ll -h
total 8.0K
-rw-------. 1 root root 1.8K Oct 3 15:54 anaconda-ks.cfg
drwxr-xr-x. 4 root root 60 Oct 9 13:16 backup
-rw-r--r--. 1 root root 82 Oct 8 10:45 backup.sh.bz2
drwxr-xr-x. 3 root root 33 Oct 8 10:45 data

#### 设置压缩级别
$ bzip2 -9 -c backup.sh > backup.sh.bz2
2.1.1 bzcat读取

[root@zhanghao-server ~]# bzcat backup.sh.bz2
#!/bin/bash

DATA_DIR=
BACKUP_DIR=
2.1.2 解压


$ bzip2 -d backup.sh.bz2
2.1.3 压缩保留源文件

[root@zhanghao-server ~]# bzip2 -v -k backup.sh
backup.sh: 0.451:1, 17.730 bits/byte, -121.62% saved, 37 in, 82 out.
[root@zhanghao-server ~]# ls
anaconda-ks.cfg backup backup.sh backup.sh.bz2 data
[root@zhanghao-server ~]#

3. xz

xz也是支持zxcat命令的

选项与参数:
-d :就是解压缩啊!
-t :测试压缩文件的完整性,看有没有错误
-l :列出压缩文件的相关信息
-k :保留原本的文件不删除~
-c :同样的,就是将数据由屏幕上输出的意思!
-# :同样的,也有较佳的压缩比的意思!

3.1 压缩文件

[root@zhanghao-server ~]# xz -v backup.sh
backup.sh (1/1)
100 % 96 B / 37 B = 2.595
[root@zhanghao-server ~]# ls
anaconda-ks.cfg backup backup.sh.xz data

4. tar打包

上面是对纯文件进行处理的。如果我们是对一个目录打包称为一个压缩包,那就是用tar指令。

选项与参数:
-c :创建打包文件,可搭配 -v 来察看过程中被打包的文件名(filename)
-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 -jcv -f filename.tar.bz2

  • 查询

tar -jtv -f filename.tar.bz2

  • 解压

tar -jxv -f filename.tar.bz2

4.1 压缩

  • 压缩/etc/下面所有文件,保留原格式

tar -zpcv -f /root/etc.tar.gz /etc

4.2 查看tar中文件

tar -ztv -f /root/etc.tar.gz

4.3 打包过程中排除某个目录

[root@zhanghao-server backup]# ls
data data_2G nihao passwd
[root@zhanghao-server backup]# cd ..
[root@zhanghao-server ~]# ls
anaconda-ks.cfg backup backup.sh.xz data etc.tar.gz
[root@zhanghao-server ~]# tar -zcv -f /root/backup.tar.gz --exclude=/root/backup/data /root/backup
tar: Removing leading `/' from member names
/root/backup/
/root/backup/nihao/
/root/backup/nihao/nihao
/root/backup/passwd
/root/backup/data_2G
[root@zhanghao-server ~]# tar -ztv -f /root/backup.tar.gz
drwxr-xr-x root/root 0 2018-10-09 13:16 root/backup/
drwxr-xr-x root/root 0 2018-10-08 10:45 root/backup/nihao/
-rw-r--r-- root/root 0 2018-10-08 10:45 root/backup/nihao/nihao
-rw-r--r-- root/root 1118 2018-10-08 10:45 root/backup/passwd
-rw-r--r-- root/root 1073741824 2018-10-09 13:16 root/backup/data_2G

4.4 根据时间备份

将比某日的时间新的文件进行打包

. 先由 [find](../Text/index.html#find) 找出比 /etc/passwd 还要新的文件
[root@study ~]# find /etc -newer /etc/passwd
....(过程省略) ....
# 此时会显示出比 /etc/passwd 这个文件的 mtime 还要新的文件名,
# 这个结果在每部主机都不相同!您先自行查阅自己的主机即可,不会跟鸟哥一样!
[root@study ~]# ll /etc/passwd
-rw-r--r--. 1 root root 2092 Jun 17 00:20 /etc/passwd
# 2\. 好了,那么使用 tar 来进行打包吧!日期为上面看到的 2015/06/17
[root@study ~]# tar -jcv -f /root/etc.newer.then.passwd.tar.bz2 \
> --newer-mtime="2015/06/17" /etc/*
tar: Option --newer-mtime: Treating date `2015/06/17' as 2015-06-17 00:00:00
tar: Removing leading `/' from member names
/etc/abrt/
....(中间省略) ....
/etc/alsa/
/etc/yum.repos.d/
....(中间省略) ....
tar: /etc/yum.repos.d/CentOS-fasttrack.repo: file is unchanged; not dumped
# 最后行显示的是“没有被备份的”,亦即 not dumped 的意思!
# 3\. 显示出文件即可
[root@study ~]# tar -jtv -f /root/etc.newer.then.passwd.tar.bz2 | grep -v '/$'
# 通过这个指令可以调用出 tar.bz2 内的结尾非 / 的文件名!就是我们要的啦!

4.5 tar流式传输

通过标准输入输出数据流重定向和管道的方式实现,将处理文件一边打包一边解压到目标目录中去。