首先我们应还先要明白一点,压缩打包其实是两个步骤,打包/解包and压缩/解压。打包只是将所有的文件打包成一个文件,他们的内存相对而言是比较大的,占用空间。而压缩是再打包的基础上对目录或文件进行的文件大小的压缩。
打包就好比将羽绒服装进的衣服服装袋里,他的大小是不会变小的,而压缩就好比将装进羽绒服的袋子密封并且抽出其中的空气,这样这个袋子就会变得小。
准备工作:
# 清空指定目录内容
cd /export/ && rm -rf *
# 创建测试文件
touch 1.txt 2.txt 3.txt
# 创建有内容的测试目录
mkdir -p /export/aaa/
touch /export/aaa/4.txt /export/aaa/5.txt
# 查看结果
tree /export
3.1.1 打包类似将 冬天的衣服 放到 袋
打包之后的大文件 需要以 .tar 结尾.
tar 打包命令格式
# 将 一系列文件 打包成 一个大文件
tar -cvf 打包名.tar 被打包的目录
tar -cvf 打包名.tar 被打包的文件1 被打包的文件2 被打包的文件3
| 命令 | 英文 | 含义 |
| ---- | ----------------- | ------------------------------------------------------------ |
| c | create | 生成档案文件, 创建打包文件 |
| v | verbosely(啰嗦的) | 像 '唐僧' 一样报告进度 |
| f | file | 指定档案的文件名称, f后面一定是 `.tar` 文件, 所以必须放到左后 |
练习1: 将1.txt、2.txt、3.txt 打包成 123.tar文件
练习2: 将有内容的aaa目录 打包成 aaa.tar 文件
[root@node01 export]# tar -cvf 123.tar 1.txt 2.txt 3.txt
1.txt
2.txt
3.txt
[root@node01 export]# ll
total 16
-rw-r--r--. 1 root root 10240 Jul 31 06:04 123.tar
-rw-r--r--. 1 root root 0 Jul 31 06:03 1.txt
-rw-r--r--. 1 root root 0 Jul 31 06:03 2.txt
-rw-r--r--. 1 root root 0 Jul 31 06:03 3.txt
drwxr-xr-x. 2 root root 4096 Jul 31 06:03 aaa
[root@node01 export]# tar -cvf aaa.tar aaa/
aaa/
aaa/4.txt
aaa/5.txt
[root@node01 export]# ll
total 28
-rw-r--r--. 1 root root 10240 Jul 31 06:04 123.tar
-rw-r--r--. 1 root root 0 Jul 31 06:03 1.txt
-rw-r--r--. 1 root root 0 Jul 31 06:03 2.txt
-rw-r--r--. 1 root root 0 Jul 31 06:03 3.txt
drwxr-xr-x. 2 root root 4096 Jul 31 06:03 aaa
-rw-r--r--. 1 root root 10240 Jul 31 06:04 aaa.tar
[root@node01 export]# rm -rf *.txt aaa
[root@node01 export]# ll
total 24
-rw-r--r--. 1 root root 10240 Jul 31 06:04 123.tar
-rw-r--r--. 1 root root 10240 Jul 31 06:04 aaa.tar
[root@node01 export]#
[root@node01 export]# tree
.
├── 123.tar
└── aaa.tar
3.1.2 解包类似将 冬天的衣服 从 袋子里取出来
tar 解包命令格式
# 将一个打包后的 分解成 一系列小文件, 分解位置为 当前目录
tar -xvf 打包名.tar
# 将一个打包后的 分解成 一系列小文件, 分解位置为 指定目录
tar -xvf 打包名.tar -C 解包路径位置
命令 英文 含义
x extract (提取) 解包
C (大写C) directory (目录) 默认保存到当前目录, 通过`-C` 更改解压目录, 注意: 解压目录必须存在
练习1: 将 123.tar 解压到 当前目录中
练习2: 将 aaa.tar 解包到 /export/test/a1/b1/c1/ 目录中
[root@node01 export]# ll
total 24
-rw-r--r--. 1 root root 10240 Jul 31 06:04 123.tar
-rw-r--r--. 1 root root 10240 Jul 31 06:04 aaa.tar
[root@node01 export]# tar -xvf 123.tar
1.txt
2.txt
3.txt
[root@node01 export]# ll
total 24
-rw-r--r--. 1 root root 10240 Jul 31 06:04 123.tar
-rw-r--r--. 1 root root 0 Jul 31 06:03 1.txt
-rw-r--r--. 1 root root 0 Jul 31 06:03 2.txt
-rw-r--r--. 1 root root 0 Jul 31 06:03 3.txt
-rw-r--r--. 1 root root 10240 Jul 31 06:04 aaa.tar
[root@node01 export]# mkdir -p /export/test/a1/b1/c1
[root@node01 export]# tree
.
├── 123.tar
├── 1.txt
├── 2.txt
├── 3.txt
├── aaa.tar
└── test
└── a1
└── b1
└── c1
4 directories, 5 files
[root@node01 export]# tar -xvf aaa.tar -C /export/test/a1/b1/c1
aaa/
aaa/4.txt
aaa/5.txt
[root@node01 export]# tree
.
├── 123.tar
├── 1.txt
├── 2.txt
├── 3.txt
├── aaa.tar
└── test
└── a1
└── b1
└── c1
└── aaa
├── 4.txt
└── 5.txt
3.2 第二步: 使用gzip格式 压缩 和 解压缩打包 和 压缩 是两件事
类似与 先将冬天衣服放到压缩袋, 再抽取里面的空气
在 Linux 中, 最常用的压缩文件格式是 xxx.tar.gz
在 tar 命令中有一个选项 -z 可以调用 gzip , 从而可以方便的实现压缩和解压缩的功能
命令格式如下:
# 压缩文件
tar -zcvf 打包压缩文件名.tar.gz 被压缩的文件/目录
# 解压缩文件(记忆敲门: 至孝潍坊)
tar -zxvf 打包文件.tar.gz
# 解压缩到指定路径
tar -zxvf 打包文件.tar.gz -C 目录路径
tar 的选项说明
| 命令 | 英文 | 含义 |
| ---- | ----- | --------------------- |
| z | gzip | 使用gzip压缩和解压缩 |
| j | bzip2 | 使用bzip2压缩和解压缩 |
需求1: 将1.txt、2.txt、3.txt 打包压缩成 123.tar.gz文件(gzip压缩格式)
需求2: 将有内容的aaa目录 打包成 aaa.tar.gz 文件(gzip压缩格式)
需求3: 将 123.tar.gz 解压到 当前目录中(gzip压缩格式)
需求4: 将 aaa.tar.gz 解包到 /export/bbb 目录中(gzip压缩格式)
需求1和需求2答案
```
[root@node01 export]# tree
.
├── 1.txt
├── 2.txt
├── 3.txt
└── aaa
├── 4.txt
└── 5.txt
1 directory, 5 files
[root@node01 export]# tar -zcvf 123.tar.gz 1.txt 2.txt 3.txt
1.txt
2.txt
3.txt
[root@node01 export]# tar -zcvf aaa.tar.gz aaa/
aaa/
aaa/4.txt
aaa/5.txt
[root@node01 export]# ll
total 12
-rw-r--r--. 1 root root 122 Jul 31 06:11 123.tar.gz
-rw-r--r--. 1 root root 0 Jul 31 06:10 1.txt
-rw-r--r--. 1 root root 0 Jul 31 06:10 2.txt
-rw-r--r--. 1 root root 0 Jul 31 06:10 3.txt
drwxr-xr-x. 2 root root 4096 Jul 31 06:10 aaa
-rw-r--r--. 1 root root 142 Jul 31 06:11 aaa.tar.gz
```
清空无用内容
```
[root@node01 export]# tree
.
├── 123.tar.gz
├── 1.txt
├── 2.txt
├── 3.txt
├── aaa
│ ├── 4.txt
│ └── 5.txt
└── aaa.tar.gz
1 directory, 7 files
[root@node01 export]# rm -rf *.txt aaa/
[root@node01 export]# tree
.
├── 123.tar.gz
└── aaa.tar.gz
```
需求3和需求4 答案
```shell
[root@node01 export]# tree
.
├── 123.tar.gz
├── 1.txt
├── 2.txt
├── 3.txt
└── aaa.tar.gz
0 directories, 5 files
[root@node01 export]# mkdir -p /export/bbb
[root@node01 export]# tar -zxvf aaa.tar.gz -C /export/bbb/
aaa/
aaa/4.txt
aaa/5.txt
[root@node01 export]# tree
.
├── 123.tar.gz
├── 1.txt
├── 2.txt
├── 3.txt
├── aaa.tar.gz
└── bbb
└── aaa
├── 4.txt
└── 5.txt
``
小结:
打包压缩: tar -zcvf 打包之后的文件名.tar.gz 被打包压缩的目录或文件名
解包解压缩: tar -zxvf 打包之后的文件名.tar.gz [ -C 指定解包位置 ]