From 37cfe1b31e222222938f90b89ab0479babcb7f4f Mon Sep 17 00:00:00 2001 From: cxykevin Date: Mon, 12 Aug 2024 13:15:47 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90tar=20(#17)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-on: https://git.hmtsai.cn/study-area-cn/study-area-cn/pulls/17 Co-authored-by: cxykevin Co-committed-by: cxykevin --- src/SUMMARY.md | 2 +- .../file_and_path/manage_file_premissons.md | 4 + .../file_and_path/tar_command.md | 175 ++++++++++++++++++ 3 files changed, 180 insertions(+), 1 deletion(-) create mode 100644 src/learn_linux_basic/file_and_path/tar_command.md diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 2c4f2fe..a26d16b 100755 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -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]() diff --git a/src/learn_linux_basic/file_and_path/manage_file_premissons.md b/src/learn_linux_basic/file_and_path/manage_file_premissons.md index 7e7414a..3866b74 100755 --- a/src/learn_linux_basic/file_and_path/manage_file_premissons.md +++ b/src/learn_linux_basic/file_and_path/manage_file_premissons.md @@ -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 diff --git a/src/learn_linux_basic/file_and_path/tar_command.md b/src/learn_linux_basic/file_and_path/tar_command.md new file mode 100644 index 0000000..98508e6 --- /dev/null +++ b/src/learn_linux_basic/file_and_path/tar_command.md @@ -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