gzip
gzip是个使用广泛的压缩程序,文件经它压缩过后,其名称后面会多出".gz"的扩展名。但是他也有显著的缺点,只能压缩单个文件。
[root@localhost b]# ls
a.txt b.txt c.txt
#压缩a.txt
[root@localhost b]# gzip a.txt
[root@localhost b]# ls
a.txt.gz b.txt c.txt
#读取a.txt.gz中的内容
[root@localhost b]# zcat a.txt.gz
aaaa
aaaa
aaaa
#解压a.txt.gz
[root@localhost b]# gzip -d a.txt.gz
[root@localhost b]# ls
a.txt b.txt c.txt
#压缩该目录下所有的文件
[root@localhost b]# gzip *
[root@localhost b]# ls
a.txt.gz b.txt.gz c.txt.gz
#流重定向
gzip -c test.log >test.log.gz
# -# :压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!预设是 -6
gzip -9 文件名
tar
tar可以将很多文件打包成为一个文件,同时还可以通过gzip/bzip方式将该文件压缩。
注意:c/x/t仅能存在一个!不可同时存在!因为不可能同时压缩和解压缩。
参数 | 参数说明 |
-c | create,新建一个打包文件 |
-x | 解压打包文件 |
-t | 查看tarfile里面的文件 |
-z | 是否用gzip压缩或解压 |
-j | 是否用bzip2压缩或解压 |
-v | 压缩或解压过程中显示文件,常用,不建议在背景中执行过程 |
-f | 使用文件名,f是参数结尾,后面不能再加参数,后跟文件名 |
-p | 使用原文件的原来属性(属性不会依据使用者而改变) |
-P | 可以使用绝对路径来压缩! |
-N | 比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件中! |
--exclude FILE | 在压缩的过程中,不要将FILE打包 |
例一:打包和解包(仅打包不解压)
#将文件夹b中的所有文件打包成a.tar
[root@localhost ~]# tar -cvf a.tar b
b/
b/a.txt
b/b.txt
b/c.txt
#删除文件夹b
[root@localhost ~]# rm -rf b
[root@localhost ~]# ls
a.tar
#解压打包文件a.tar
[root@localhost ~]# tar -xvf a.tar
b/
b/a.txt
b/b.txt
b/c.txt
[root@localhost ~]# ls
a.tar b
例二:以gzip格式打包压缩和解压
#以gzip格式打包压缩文件夹b
[root@localhost ~]# tar -zcvf a.tar.gz b
b/
b/a.txt
b/b.txt
b/c.txt
#查看压缩包内有什么文件
[root@localhost ~]# tar -ztvf a.tar.gz
drwxr-xr-x root/root 0 2020-07-14 18:07 b/
-rw-r--r-- root/root 15 2020-07-14 16:24 b/a.txt
-rw-r--r-- root/root 15 2020-07-14 16:25 b/b.txt
-rw-r--r-- root/root 16 2020-07-14 16:25 b/c.txt
#解压a.tar.gz
[root@localhost ~]# tar -zxvf a.tar.gz
b/
b/a.txt
b/b.txt
b/c.txt
查看可知打包后压缩为10240,压缩后大小为196。
例三:
# 这个 -p 的属性是很重要的,尤其是当您要保留原本档案的属性时!
[root@linux ~]# tar -zcvpf /tmp/etc.tar.gz /etc
#把2020年7月14日之后的文件打包压缩
[root@localhost ~]# tar -N '2020-07-14' -zvcf b.tar.gz b
tar: 选项 --after-date: 将日期 ‘2020-07-14’ 当作 2020-07-14 00:00:00
b/
b/a.txt
b/b.txt
b/c.txt
b/d.txt
b/e.txt
#我要备份 /home, /etc ,但不要 /home/hydra1
[root@linux ~]# tar --exclude /home/hydra1 -zcvf myfile.tar.gz /home/* /etc