Skip to content

Commit

Permalink
modified docs/ops/package.md
Browse files Browse the repository at this point in the history
  • Loading branch information
ErinaInit committed Aug 6, 2024
1 parent 4a46bbe commit ec459c8
Showing 1 changed file with 102 additions and 0 deletions.
102 changes: 102 additions & 0 deletions docs/ops/package.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,112 @@ icon: material/package

<!-- 简介 -->

APT(Advanced Package Tool) 是 Debian 发行版最常用的包管理工具。其可以执行安装,卸载,更新,系统更新,校验与修复这些常见功能。

## APT 系列工具

Debian 是一个基于二进制(而非源码)的发行版,其软件包格式为 .deb ,这代表这是一个二进制包。

Debian 的初等包管理器是 dpkg ,其负责管理包的安装,删除,查询,替换,校验。

dpkg 一般不会被直接使用。而是作为 apt 以及其他一些高等包管理器的后端使用。

Debian 自带的高等包管理器是 APT ,负责进行依赖解析与安装包下载,并且以最优的顺序调用 dpkg ,其没有直接安装 .deb 包的能力。

Debian 下还有很多包管理软件,如 Synaptics 、 Aptitude ,这里不一一详细展开。

### 常用操作

0. 安装软件包

如果我们需要安装一个名称为 name 的包

在手动下载 .deb 包后,使用 dpkg 直接安装 .deb 包:

`dpkg -i <name_version.deb>`

使用 apt 安装软件包:

`apt install <name>`

如果 name 有未在系统上安装的依赖的话,那么第一个命令会失败(除非使用 `--force** 选项),第二个命令会下载对应的安装包及其依赖,并且进行安装。

0. 卸载软件包

Check failure on line 41 in docs/ops/package.md

View workflow job for this annotation

GitHub Actions / build

Ordered list item prefix

docs/ops/package.md:41:1 MD029/ol-prefix Ordered list item prefix [Expected: 1; Actual: 0; Style: 1/2/3] https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md029.md

Check failure on line 41 in docs/ops/package.md

View workflow job for this annotation

GitHub Actions / build

Ordered list item prefix

docs/ops/package.md:41:1 MD029/ol-prefix Ordered list item prefix [Expected: 1; Actual: 0; Style: 1/2/3] https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md029.md

使用 dpkg 直接卸载:

`dpkg -r <name>**

Check failure on line 45 in docs/ops/package.md

View workflow job for this annotation

GitHub Actions / build

Inline HTML

docs/ops/package.md:45:13 MD033/no-inline-html Inline HTML [Element: name] https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md033.md

Check failure on line 45 in docs/ops/package.md

View workflow job for this annotation

GitHub Actions / build

Inline HTML

docs/ops/package.md:45:13 MD033/no-inline-html Inline HTML [Element: name] https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md033.md

使用 apt 卸载:

`apt remove name**

那么现在产生了一个问题:要是我安装了一个有很多依赖的包,那么我们卸载它时依赖不会同时被卸载。这样依赖会一直占据我们电脑里面的空间。而手动卸载依赖并不直观,还可能破坏其他包的依赖。

因此,在使用 APT 安装一个包时,我们将其标记为 manual ,在安装依赖时,我们将其标记为 automatic ,那么我们知道**所有没有被 manual 直接或者间接依赖的 automatic 包**都是不必要的。

这样,我们可以使用`apt autoremove`来卸载不必要的包以释放存储空间。

0. 推荐与建议

Check failure on line 57 in docs/ops/package.md

View workflow job for this annotation

GitHub Actions / build

Ordered list item prefix

docs/ops/package.md:57:1 MD029/ol-prefix Ordered list item prefix [Expected: 2; Actual: 0; Style: 1/2/3] https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md029.md

Check failure on line 57 in docs/ops/package.md

View workflow job for this annotation

GitHub Actions / build

Ordered list item prefix

docs/ops/package.md:57:1 MD029/ol-prefix Ordered list item prefix [Expected: 2; Actual: 0; Style: 1/2/3] https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md029.md

安装软件包时, APT 在默认配置下会安装推荐( Recommended )的包。 还会提示你可以安装建议( Suggested )的包以拓展原包的功能。

比如: apt包的推荐有 ca-certificates ,建议包有 aptitude 、 synaptic 、 gnupg 、 powermgmt-base 和 dpkg-dev

那么安装这个包时,会默认安装 ca-certificates , 结束后会给出后面的包的提示。

为了精简安装的软件包,可以使用 `--no-install-recommends` 的选项,以跳过推荐的软件包。

还可以在配置文件中添加 `Apt::Install-Recommends "false"` 以使默认配置不会安装推荐的包。

当这类包被安装的时候,它们的类型为 automatic ,也就是说在默认情况下,如果没有软件**推荐或者建议它们**,它们会被 `apt autoremove` 卸载。

使用 `apt-mark (automatic|manual) <name>` 修改包的状态。

0. 查找包中文件与文件所属的包,替换 command not found

Check failure on line 73 in docs/ops/package.md

View workflow job for this annotation

GitHub Actions / build

Ordered list item prefix

docs/ops/package.md:73:1 MD029/ol-prefix Ordered list item prefix [Expected: 3; Actual: 0; Style: 1/2/3] https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md029.md

Check failure on line 73 in docs/ops/package.md

View workflow job for this annotation

GitHub Actions / build

Ordered list item prefix

docs/ops/package.md:73:1 MD029/ol-prefix Ordered list item prefix [Expected: 3; Actual: 0; Style: 1/2/3] https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md029.md

APT 家族中存在一个用于查找文件所属包的工具 `apt-file`

使用 `apt-file update` 进行数据库的初始化及更新。

使用 `apt-file search <file>` 进行搜索。

可以使用 `dpkg -S <file>` 搜索所有**已安装**包中的文件。

反过来,想要查看一个包包含什么文件,可以使用 `apt-file list <name>`

使用 `dpkg-deb -c <name_version.deb>` 查看 .deb 中内容。

也可以使用 `dpkg-query -L <name>` ,但是这只对已经安装的包生效。

在使用了一个未安装的命令时,可以选择使用 `command-not-found`

其安装方式十分简单,只需 `apt install command-not-found` 即可。

0. 查找包

Check failure on line 93 in docs/ops/package.md

View workflow job for this annotation

GitHub Actions / build

Ordered list item prefix

docs/ops/package.md:93:1 MD029/ol-prefix Ordered list item prefix [Expected: 4; Actual: 0; Style: 1/2/3] https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md029.md

Check failure on line 93 in docs/ops/package.md

View workflow job for this annotation

GitHub Actions / build

Ordered list item prefix

docs/ops/package.md:93:1 MD029/ol-prefix Ordered list item prefix [Expected: 4; Actual: 0; Style: 1/2/3] https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md029.md

`apt search <name>` 可以进行包的查找。

也可以通过使用一种特殊的语法( apt-patterns )来进行更具体的查找。

比如你想寻找已经安装,并且名称包含gcc的软件,可以使用 `~i ~ngcc` ,如果要求名称完全匹配, 可以使用 `~i ?exact-name(gcc)`

以下是一些常见的 apt-patterns 单位

- `?and()` 也可以使用空格分隔若干个 apt-patterns 简写。
- `?or()` 也可以使用 `|` 分隔若干个 apt-patterns 简写。
- `?not()` 可以使用 `!` 进行简写。
- `~g` 为需要被 autoremove 的已安装包。在进行 autoremove 之前建议进行一次检查。
- `~i` 为已经安装的包。
- `~U` 可以升级的包。
- `~nREGEX` 包名称满足正则表达式的包。

0. 固定包

Check failure on line 111 in docs/ops/package.md

View workflow job for this annotation

GitHub Actions / build

Ordered list item prefix

docs/ops/package.md:111:1 MD029/ol-prefix Ordered list item prefix [Expected: 5; Actual: 0; Style: 1/2/3] https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md029.md

Check failure on line 111 in docs/ops/package.md

View workflow job for this annotation

GitHub Actions / build

Ordered list item prefix

docs/ops/package.md:111:1 MD029/ol-prefix Ordered list item prefix [Expected: 5; Actual: 0; Style: 1/2/3] https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md029.md

有时我们希望固定一个包,使得这个包不会被改变或升级。

这时可以使用 `apt-mark hold <name>` ,这个包将会被固定,其不会被升级。

<!-- automatic 和 manual 安装的区别,autoremove 的功能 -->
<!-- "Recommends", "Suggests" 等是什么;在需要精简的场合使用 --no-install-recommends 避免安装不必要的软件包 -->
<!-- 查找某个文件可以由什么包提供,查找某个包提供了什么文件 -->
Expand Down

0 comments on commit ec459c8

Please sign in to comment.