完成tar (#17)

Reviewed-on: study-area-cn/study-area-cn#17
Co-authored-by: cxykevin <cxykevin@yeah.net>
Co-committed-by: cxykevin <cxykevin@yeah.net>
This commit is contained in:
cxykevin 2024-08-12 13:15:47 +08:00 committed by Hmtsai
parent 8908dd550a
commit 37cfe1b31e
3 changed files with 180 additions and 1 deletions

View File

@ -37,7 +37,7 @@
- [文件与路径](./learn_linux_basic/file_and_path/file_and_path.md)
- [文件权限管理](./learn_linux_basic/file_and_path/manage_file_premissons.md)
- [磁盘分区以及文件系统](./learn_linux_basic/file_and_path/diskpart_and_filesystem.md)
- [tar打包软件]()
- [tar打包软件](./learn_linux_basic/file_and_path/tar_command.md)
- [gzip与xz]()
- [备份]()
- [Shell与Shell Script]()

View File

@ -265,3 +265,7 @@ drwxrwxr-x 3 hmtsai wheel 4096 7月26日 18:33 foo1
- 将`foo1`文件夹的权限设置为`drwxrwxrwx`,并将完整日志打印到屏幕上。
- 将`test_chown`目录下的所有文件的权限设置为`755`,并且解释`755`在这里的含义,然后给出功能相同的使用字符模式的命令。
- 递归删除`foo1`文件夹,并且打印出`rm`命令每一步的操作。(可以参考`rm`命令的手册或者`rm --help`命令的输出)
---
> study-area-cn

View File

@ -0,0 +1,175 @@
# `tar` 打包软件
在使用Linux的过程中你可能会看见各种各样的压缩包文件比如`tar.gz`(最常见的 tar 压缩包格式)、`tar.bz2`、`tar.xz`、`tar`等等。这些文件都可以使用`tar`命令打包。
> 在linux上也有些常见的图形化压缩包管理器比如 `Ark`,但是它们远不及命令行工具的快速和稳定性。
tar压缩包都有一个显著的特征文件名中都带有一个 `.tar`tgz 等部分格式除外),但是后面的 `.gz` 等等又是什么呢其实tar 本身并不是一个压缩格式,它只是简单的把所有文件和文件夹打包到一起,而后面的 `.gz`、`.bz2`、`.xz` 等等才是压缩的格式。
> 关于其它格式的压缩包,比如`zip`、`rar`等,可以使用其它命令,比如`unzip`、`unrar`等。
绝大部分的linux发行版都预置了这个命令你通常无需格外安装直接使用便可。
## `tar` 命令
`tar`命令用于打包文件和目录,可以将多个文件和目录打包成一个文件,也可以将一个打包文件解压成多个文件和目录。
`tar`命令的基本语法如下:
```bash
tar [选项] [文件或目录]
```
下面是常见的选项:
- `-c`:创建新的压缩文件。
- `-x`:解压文件。
- `-t`:列出压缩文件中的所有文件。
- `-z`使用gzip压缩或解压 `.tar.gz` 格式)。
- `-j`使用bzip2压缩或解压 `.tar.bz2` 格式)。
- `-v`:显示操作的详细信息。
- `-f`:指定压缩包的文件名。
- `-C`:指定解压目录。
上面的内容看不懂也没关系,下面会一一介绍用法。
## 常见用法
### 打包文件为 .tar.gz
```bash
tar -zcvf archive.tar.gz file_or_dir1 [file_or_dir2 ...]
```
上面的命令会将 `file_or_dir1`、`file_or_dir2` 等文件或者目录打包成一个名为 `archive.tar.gz` 的压缩包。
> 在 tar 中,是可以把多个 `-` 选项连用的,例如 `-z``-c` 可以写成 `-zc`(顺序无所谓),但是需要保证像 `-f` 这样带有参数的选项放在最后。除了 tar 命令很多linux的基本命令都可以这么用包括我们之前学习的 cp, ls 等命令。
### 解压 .tar.gz 文件
```bash
tar -zxvf archive.tar.gz
```
上面的命令会将 `archive.tar.gz` 压缩包解压到当前目录。
> 这两个用法应该和是我们平时见得最多的用法了。熟练掌握这几个用法你就可以安装绝大部分的压缩包形式的linux软件了。
## 完整用法
接下来,我们来一起看看 tar 都有什么魔力吧。
> 下面会有一个常见的参数 `-v`,表示显示操作的详细信息。它会列出操作的所有文件。如果不加上这个参数,我们就看不到任何输出。当然,你也可以省略。
首先,我们进行压缩包操作,都要有个压缩包吧,所以下面的所有命令,都要加入 `-f 你的压缩包名字` 这个选项指定操作的压缩包文件。
### 压缩格式
我们前面提到了tar只是个打包的格式并不能压缩。但是tar可以调用其它的压缩工具比如gzip、bzip2、xz等来对打包的文件进行压缩。
下面是一些常用的参数:
- `-z`使用gzip压缩或解压 `.tar.gz` 格式)。
- `-j`使用bzip2压缩或解压 `.tar.bz2` 格式)。
- `-J`使用xz压缩或解压 `.tar.xz` 格式)。
> 若列出文件,可以省略压缩格式,后面会讲到。
### 创建压缩包
要创建压缩包,我们可以使用 `-c` 选项。
例如上文的
```bash
tar -zcvf archive.tar.gz file_or_dir1 [file_or_dir2 ...]
```
就是创建一个名为 `archive.tar.gz` 的压缩包,使用 gzip 压缩格式。
### 列出压缩包中的文件
有了压缩包,我们该怎么验证,或者别人发来了一个压缩文件,我们怎么查看里面的内容呢?
我们可以使用 `-t` 选项。
```bash
tar -ztvf archive.tar.gz
```
上面的命令会列出 `archive.tar.gz` 压缩包中的所有文件。
### 解压压缩包
解压压缩包,我们可以使用 `-x` 选项。
例如上文的
```bash
tar -zxvf archive.tar.gz
```
上面的命令会将 `archive.tar.gz` 压缩包解压到当前目录。
> 值得注意的是,这个操作不会新建一个文件夹。所以在解压之前,建议先看一看压缩包内是否有一层文件夹。尤其是当前目录文件比较多时,容易把文件解压到错误的位置。
### 指定解压目录
如果我们需要改变解压的位置,我们可以使用 `-C` 选项,例如解压到新建的文件夹。
例如上文的
```bash
tar -zxvf archive.tar.gz -C ./archive
```
上面的命令会将 `archive.tar.gz` 压缩包解压到当前目录下的 `archive` 文件夹中。
### 添加文件
如果我们需要向压缩包中添加文件,我们可以使用 `-r` 选项。
例如上文的
```bash
tar -rvf archive.tar.gz file_or_dir1 [file_or_dir2 ...]
```
上面的命令会将 `file_or_dir1`、`file_or_dir2` 等文件或者目录添加到 `archive.tar.gz` 压缩包中。
### 删除文件
如果我们需要从压缩包中删除文件,我们可以使用 `--delete` 选项。
```bash
tar -vf archive.tar.gz --delete file_or_dir
```
上面的命令会从 `archive.tar.gz` 压缩包中删除 `file_or_dir`
### 更新文件
如果我们需要更新压缩包中的文件,我们可以使用 `-u` 选项。这个选项类似于 `-r`,只不过是替换。
```bash
tar -uf archive.tar.gz file_or_dir1 [file_or_dir2 ...]
```
> tar 的用法很多,但是常见的用法也就那么几种。多看,多用,你很快就能掌握。
## 课后作业
tar 是一个非常强大的工具。这个命令使用十分复杂,这里也难以介绍完全。下面的课后作业可以让你基本理解这个命令:
1. 使用前文提到的 `nano` 新建两三个个文件,文件名和内容都随意。
2. 使用 tar 命令以 gzip 格式压缩到一个压缩文件。
3. 把这个文件发给小伙伴,当然也可以发到论坛里。
4. 使用 tar 命令查看并且解压这个压缩包里的文件
5. 使用 cat 命令,看看文件里写的是什么
---
> study-area-cn