From a965413fc7477f934c0818713b40f751b753e036 Mon Sep 17 00:00:00 2001 From: cxykevin Date: Sun, 18 Aug 2024 15:19:43 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90gzip=20(#19)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/file_and_path/file_and_path.md | 8 +-- src/file_and_path/gzip_and_xz.md | 72 +++++++++++++++++++++ src/file_and_path/manage_file_premissons.md | 12 ++-- src/file_and_path/tar_command.md | 3 +- src/linux_common_sense.md | 3 +- 5 files changed, 85 insertions(+), 13 deletions(-) create mode 100644 src/file_and_path/gzip_and_xz.md diff --git a/src/file_and_path/file_and_path.md b/src/file_and_path/file_and_path.md index 6c75c91..13fa7b5 100644 --- a/src/file_and_path/file_and_path.md +++ b/src/file_and_path/file_and_path.md @@ -33,10 +33,10 @@ - `/tmp` 存放一些临时文件,通常被挂载到了内存 - `/usr` 包含系统核心文件,其中的`bin`目录包含的上述除`cd`外的所有命令,`sbin`也是(仅限 root 的命令),这两个文件夹还被映射到了根目录同名文件夹。 - `/var` 可变动的文件(variable) - - `/var/mail` (本地邮件信箱) - - `/var/spool/news` (新闻组) - - `/var/run` (程序相关文件) - - `/var/lock` (程序锁相關) + - `/var/mail` (本地邮件信箱) + - `/var/spool/news` (新闻组) + - `/var/run` (程序相关文件) + - `/var/lock` (程序锁相關) - `/sys` 也是一个重要的设备目录 - `/home` 用户目录,相当于 `C:\Users`(MacOS:`/Users`) diff --git a/src/file_and_path/gzip_and_xz.md b/src/file_and_path/gzip_and_xz.md new file mode 100644 index 0000000..c0b76c1 --- /dev/null +++ b/src/file_and_path/gzip_and_xz.md @@ -0,0 +1,72 @@ +# GZip 与 XZ + +上篇文章中,我们介绍了 `tar` 命令,它可以将多个文件打包成一个文件。但是,文件的总体积并没有改变。我们还提到了 `tar` 命令可以调用 `gzip` 和 `xz` 进一步压缩这个文件,使其占用更小的磁盘空间。现在我们就来看看 `gzip` 或 `xz` 命令本身吧。 + +> 这两个命令只能压缩单个文件,而不能压缩目录。 + +## GZip + +> gzip是若干种文件压缩程序的简称,通常指GNU计划的实现,此处的gzip代表GNU zip。也经常用来表示gzip这种文件格式。gzip是一种在Linux系统中常见的命令行压缩工具。它使用DEFLATE压缩算法来减小文件的大小,使文件更易于存储和传输。 +> +> 事实上,在许多软件中,包括在你浏览互联网的过程中,gzip已经被广泛使用。说不定,你现在正在阅读的网页就是gzip压缩过的。 + +使用 `gzip` 命令压缩的文件的后缀和前面提到的 `.tar.gz` 一样,都是 `.gz` 结尾的压缩文件。 + +下面是 `gzip` 命令的一些常用选项: + +- `-c`:将压缩后的数据输出到终端(但是你看不懂的乱码),而不是覆盖原始文件。通常配合后面会讲到的 `>` 与 `|` 使用。 +- `-r`:递归压缩目录,包括子目录中的文件。注意:这里的递归是对每一个文件单独压缩,而不是对整个目录压缩成一个文件。 +- `-v`:显示压缩或解压缩的详细信息。 +- `-d`:解压缩文件。`gunzip` 命令等同于 `gzip -d`。 +- `-f`:强制压缩或解压缩,会覆盖原有的文件。 +- `-k`:不删除原始文件。 +- `-1` 到 `-9`:表示压缩等级,`-1` 表示最低压缩等级,速度快,`-9` 表示最高压缩等级,压缩率高。默认是 `-6`。 + +> `gzip` 命令默认会删除原始文件,所以使用 `-f` 选项可以强制保留原始文件。 + +例如,我们可以使用以下命令来压缩一个文件: + +```bash +gzip file.txt +``` + +这将会生成一个名为 `file.txt.gz` 的压缩文件,原始的 `file.txt` 文件将被删除。 + +要解压缩一个 `gzip` 压缩的文件,可以使用下面的命令: + +```bash +gzip -d file.txt.gz +``` + +> 之前学习的 `tar` 命令的 `-z` 选项就等价于先用 tar 命令打包,再执行一遍 gzip 命令。 + +## XZ + +> xz是一种压缩文件格式,采用LZMA SDK压缩,目标文件较gzip压缩文件(.gz或)小30%,较.bz2小15%。 +> +> 前段时间 XZ 命令被爆出存在后门,差一点就进入了正式的发行版,这次漏洞如果成功会危害到数以万计的 Linux 设备,但成功被开源社区的人发现 ~~(还是因为SSH程序启动慢了0.5秒)~~ ,这也侧面体现出了XZ应用的广泛与 Linux 社区支持的安全性。 + +使用 `xz` 命令压缩的文件的后缀和前面提到的 `.tar.xz` 一样,都是 `.xz` 结尾的压缩文件。 + +`xz` 的基本选项和 `gzip` 基本一致,但是提供了以下几个提高性能的额外选项: + +- `-T <线程数>` 可以使用多线程进行压缩,提高压缩速度。 +- `-e` 可以使用更多的时间来提高压缩率 + +例如,我们可以使用以下命令来压缩一个文件: + +```bash +xz file.txt +``` + +这将会生成一个名为 `file.txt.xz` 的压缩文件,原始的 `file.txt` 文件将被删除。 + +要解压缩一个 `xz` 压缩的文件,可以使用下面的命令: + +```bash +xz -d file.txt.xz +``` + +--- + +> study-area-cn diff --git a/src/file_and_path/manage_file_premissons.md b/src/file_and_path/manage_file_premissons.md index 3866b74..8241596 100755 --- a/src/file_and_path/manage_file_premissons.md +++ b/src/file_and_path/manage_file_premissons.md @@ -63,7 +63,7 @@ vboxadd:x:979:1::/var/run/vboxadd:/bin/false 你可能会发现,有的用户的登录Shell是`/bin/nologin`或`/bin/false`,这代表这些用户不能登录。 > 你可以在终端里面执行`nologin`,会发现他会提示“该用户无法登录”,而`false`只是简单地返回一个错误返回值。 - +> > 有关Shell的知识我们在后面会系统介绍,简单来说,Shell就是一个让用户交互来执行操作的程序。 ### root用户 @@ -226,7 +226,7 @@ drwx------ 3 hmtsai wheel 4096 7月26日 18:33 foo1 比如,让`foo1`文件夹同用户组可以读写进入,其他人只可读取进入怎么样? -```sh +```sh chmod g+rwx,o+rx foo1 ``` @@ -249,16 +249,16 @@ drwxrwxr-x 3 hmtsai wheel 4096 7月26日 18:33 foo1 八进制模式主要用于快速修改模式。比如,我想让一个文件的模式变成rwxrwxrwx,只需要`chmod 777 file`,而不是`chmod ugo+rwx file`。 > 为什么是4,2,1这三个数字呢?这是因为他们的组合能够不重,不信你试试看。 - -> 还有一个比较有意思的格式叫做“参考模式”,非常简单,格式就是`chmod [选项]... --reference=参考文件 文件...`。这个主要在懒得看模式的时候用(划掉)。因为比较简单,所以这里不再赘述。 +> +> 还有一个比较有意思的格式叫做“参考模式”,非常简单,格式就是`chmod [选项]... --reference=参考文件 文件...`。~~这个主要在懒得看模式的时候用(划掉)~~。因为比较简单,所以这里不再赘述。 #### 参数 + `chmod`的参数与`chown`比较类似,于是在此不再赘述,详情可以通过`chmod --help`了解。 > 几乎所有命令都有一个`--help`参数,可以通过这个参数大概了解这个命令的用法。 - -# 课后任务 +## 课后任务 由于这篇的内容比较复杂,于是我们建议您完成以下任务进行练习: diff --git a/src/file_and_path/tar_command.md b/src/file_and_path/tar_command.md index 98508e6..130ba93 100644 --- a/src/file_and_path/tar_command.md +++ b/src/file_and_path/tar_command.md @@ -126,6 +126,7 @@ tar -zxvf archive.tar.gz -C ./archive 上面的命令会将 `archive.tar.gz` 压缩包解压到当前目录下的 `archive` 文件夹中。 ### 添加文件 + 如果我们需要向压缩包中添加文件,我们可以使用 `-r` 选项。 例如上文的 @@ -160,7 +161,7 @@ tar -uf archive.tar.gz file_or_dir1 [file_or_dir2 ...] tar 是一个非常强大的工具。这个命令使用十分复杂,这里也难以介绍完全。下面的课后作业可以让你基本理解这个命令: -1. 使用前文提到的 `nano` 新建两三个个文件,文件名和内容都随意。 +1. 使用前文提到的 `nano` 新建两三个个文件,文件名和内容都随意。 2. 使用 tar 命令以 gzip 格式压缩到一个压缩文件。 diff --git a/src/linux_common_sense.md b/src/linux_common_sense.md index f5e002c..9a465b6 100644 --- a/src/linux_common_sense.md +++ b/src/linux_common_sense.md @@ -5,7 +5,7 @@ 其实,Linux 的很多逻辑以及文件的组织结构都是与 Windows 大不相同的,接下来,我们就一起了解一下。 > 注意,以下操作,若无特殊说明,输入命令均在终端(Terminal)下操作,可以按下 C-M-T 呼出。 - +--- > 本文中,快捷键使用以下格式表示: > `Ctrl`键使用`^`或者`C`表示,`Alt`键使用`M`表示,`Super`(即`Windows`键)使用`S`表示。 > 它们的排列顺序是这样的:`C-M-S-` @@ -132,7 +132,6 @@ rm -r <你想删除的文件夹> > 如果你真的想尝试,那么请一定在虚拟机下!搞坏系统作者可不负责! - ### `nano`简单的文档编辑器 ![Nano 的界面](./assets/2.5.1.png)