在Windows下通常我们用WinRAR、7zip之类的处理压缩,解压缩文件,Linux下也有一些常见的工具,简单区分一下打包和压缩的概念
通常打包压缩是一套组合操作,会一块实现
Linux最常见的压缩格式是 .tar.gz
,虽然Linux不根据文件的后缀格式来区分文件的类型,但是为了人类可读性好,通常都会加上后缀格式
我们在进行打包压缩的时候,通常建议的做法是先 cd
切换到对应的目录,然后在打包压缩,这样尽可能让别人拿到这个压缩包的时候,一解压得到的是一个不包含 .tar.gz
后缀格式的目录,清晰易懂
压缩
tar zcf dir1.tar.gz dir/
解压缩
tar xf dir1.tar.gz
tar --help
Usage: tar [OPTION...] [FILE]... 这里的FILE是要准备要压缩的目录或文件
GNU `tar' saves many files together into a single tape or disk archive, and can
restore individual files from the archive.
Main operation mode:
-c, --create create a new archive 新建压缩包
-t, --list list the contents of an archive 列出压缩包的内容
-x, --extract, --get extract files from an archive 解压
Other options:
-f, --file=ARCHIVE use archive file or device ARCHIVE 后面接新建压缩包的名称
-z, --gzip filter the archive through gzip 内部调用gzip进行压缩
-v, --verbose verbosely list files processed
-C, --directory=DIR change to directory DIR 解压到指定目录
Examples:
tar -zcf archive.tar.gz dir1/ # Create archive.tar.gz from files dir1/
tar -tvf archive.tar.gz # List all files in archive.tar.gz verbosely
tar -xf archive.tar.gz # Extract all files from archive.tar.gz
tar --gunzip --create --file=hello.tar.gz hello/
[root@node1 tartest]# file hello.tar.gz
hello.tar.gz: gzip compressed data, from Unix, last modified: Sat Mar 14 22:36:21 2020
01
=================================
# tar cvf ./xxx.test.tar /tmp/ceph-ansible
# tar tf ./xxx.test.tar | head
tmp/ceph-ansible/
tmp/ceph-ansible/group_vars/
tmp/ceph-ansible/group_vars/rgws.yml.sample
tmp/ceph-ansible/group_vars/mdss.yml.sample
tmp/ceph-ansible/group_vars/mgrs.yml.sample
tmp/ceph-ansible/group_vars/rhcs.yml.sample
tmp/ceph-ansible/group_vars/mons.yml.sample
tmp/ceph-ansible/group_vars/zone.yml.sample
可以看到这样搞出来,解压后根目录是 tmp,而我们如果这样
# tar cvf ./xxx.test.tar -C /tmp ceph-ansible
# tar tf ./xxx.test.tar | head
ceph-ansible/
ceph-ansible/group_vars/
ceph-ansible/group_vars/rgws.yml.sample
ceph-ansible/group_vars/mdss.yml.sample
ceph-ansible/group_vars/mgrs.yml.sample
ceph-ansible/group_vars/rhcs.yml.sample
ceph-ansible/group_vars/mons.yml.sample
这样解压后的根目录直接是 ceph-ansible ,一般情况下,这样是我们想要的
man gzip
gzip 用来压缩文件,只能压缩文件不能直接压缩目录,需要用tar先打包,然后再用gzip来压缩,不过更常见的做法是如前文所示,直接在tar命令里使用-z参数,打包压缩二合一,一步到位
用gzip来压缩文件,会直接原地处理文件,原始文件不再保留,而是替换成新的带有 .gz 后缀的文件,解压单独使用gzip压缩的文件,需要使用gunzip来解压,不能使用 tar xf 来解压
gzip这个命令并没有太多使用的场景,通常即便是只压缩一个文件,我们也是用 tar zcf
[root@node1 tartest]# for i in {1..5}; do echo $i > ${i}.txt; done
[root@node1 tartest]# ls
1.txt 2.txt 3.txt 4.txt 5.txt
[root@node1 tartest]# gzip *
[root@node1 tartest]# ls
1.txt.gz 2.txt.gz 3.txt.gz 4.txt.gz 5.txt.gz
[root@node1 tartest]# file 1.txt.gz
1.txt.gz: gzip compressed data, was "1.txt", from Unix, last modified: Sat Mar 14 22:41:22 2020
[root@node1 tartest]# gunzip *
[root@node1 tartest]# ls
1.txt 2.txt 3.txt 4.txt 5.txt
[root@node1 tartest]# zcat 1.txt.gz
1
[root@node1 tartest]# ls
1.txt 2.txt 3.txt 4.txt 5.txt
[root@node1 tartest]# gzip -v *.txt
1.txt: -100.0% -- replaced with 1.txt.gz
2.txt: -100.0% -- replaced with 2.txt.gz
3.txt: -100.0% -- replaced with 3.txt.gz
4.txt: -100.0% -- replaced with 4.txt.gz
5.txt: -100.0% -- replaced with 5.txt.gz
zip 格式的压缩文件是windows和linux通用的格式,可以直接压缩文件和目录
不过这个命令的实际使用场景还是较少,所有Linux操作系统我们基本都用 .tar.gz 压缩就够了, Mac OS X 系统一样可以用 .tar.gz,windows上随便下载个压缩工具各类压缩格式也都支持,不过 zip 格式的压缩包仍然是常见的格式,有时候别人扔给你一个 zip 压缩包或者自己从网上下载一个 zip 压缩包,也需要拿到Linux上去解压
unzip 是用来解压zip压缩包的,这两个命令系统中默认不一定有,可使用yum直接安装
yum install zip unzip
使用示例
-r recurse into directories
zip -r dir.zip dir/
[root@node1 ziptest]# file dir.zip
dir.zip: Zip archive data, at least v1.0 to extract
unzip dir.zip
-q quiet mode (-qq => quieter) Just be quiet!
-d extract files into exdir 解压到指定目录
unzip -q /web-arch-shell/dedecms.zip -d /code/