diff --git a/docs/.vitepress/config.js b/docs/.vitepress/config.js index 937e3cd..603eb32 100644 --- a/docs/.vitepress/config.js +++ b/docs/.vitepress/config.js @@ -21,9 +21,16 @@ export default { { text: "1.2.类Unix系统", link: "/deepin进阶教程/1.GNU-linux教程/1.2.类Unix系统" }, { text: "1.4.类Unix工作环境基础", link: "/deepin进阶教程/1.GNU-linux教程/1.4.类Unix工作环境基础" }, { text: "1.5.简单shell命令", link: "/deepin进阶教程/1.GNU-linux教程/1.5.简单shell命令" }, - { text: "1.6.类Unix的文本处理", link: "/deepin进阶教程/1.GNU-linux教程/1.6.类Unix的文本处理" },1 + { text: "1.6.类Unix的文本处理", link: "/deepin进阶教程/1.GNU-linux教程/1.6.类Unix的文本处理" }, 1 ], }, + { + text: "2.deepin软件包管理", + items: [ + { text: "简介", link: "/deepin进阶教程/2.deepin软件包管理/简介" }, + { text: "2.1.Debian软件包管理前提", link: "/deepin进阶教程/2.deepin软件包管理/2.1.Debian软件包管理前提.md" }, + ], + } ], }, { diff --git a/docs/deepin进阶教程/1.GNU-linux教程/1.1.控制台基础.md b/docs/deepin进阶教程/1.GNU-linux教程/1.1.控制台基础.md index ceccc8c..51a9efd 100644 --- a/docs/deepin进阶教程/1.GNU-linux教程/1.1.控制台基础.md +++ b/docs/deepin进阶教程/1.GNU-linux教程/1.1.控制台基础.md @@ -9,7 +9,6 @@ Deepin GNU/linux 23 foo tty2 foo login: ``` - 你需要在login:后面输入你的用户名 然后回车 此时,登陆提示符显示如下: @@ -18,7 +17,6 @@ foo login: Password: ``` - 输入用户密码即可。 :::tip @@ -38,7 +36,6 @@ Welcome to Deepin V23 GNU/Linux * Bugreport:https://bbs.deepin.org/ ``` - 你可以用root权限来修改此文件来达到自定义的目的 此时你就在shell下了,你可以在shell下尝试与电脑交流。 @@ -73,7 +70,7 @@ root 账户也被称作超级用户或特权用户。用这个账户,你能够 注意:如果有人告诉你形如:`sudo rm -rf /*` ,请谨慎对待,最好你在执行此命令之前了解此命令含义,否则会造成不可挽回的后果。 ::: -一个文件(包括硬件设备,如 CD-ROM 等,这些对 Linux 系统来说都只是一个文件)的权限可能会导致非 root 用户无法使用或访问它 。虽然在这种情况下,使用 root 帐户是一个快速的方法,但正确的解决方法应该是对文件权限和用户组的成员进行合适的设置(参见第[ 1.2.3 节 “文件系统权限](https://flowus.cn/16aaa542-96fb-40e1-bfca-d77989d1418b#b6113247-d21b-4ce4-92ff-0e3f94886ec1)”)。 +一个文件(包括硬件设备,如 CD-ROM 等,这些对 Linux 系统来说都只是一个文件)的权限可能会导致非 root 用户无法使用或访问它 。虽然在这种情况下,使用 root 帐户是一个快速的方法,但正确的解决方法应该是对文件权限和用户组的成员进行合适的设置(参见第[1.2.3 节 “文件系统权限](https://flowus.cn/16aaa542-96fb-40e1-bfca-d77989d1418b#b6113247-d21b-4ce4-92ff-0e3f94886ec1)”)。 ## 1.1.4. root shell 提示符 @@ -91,8 +88,6 @@ root 账户也被称作超级用户或特权用户。用这个账户,你能够 注意:任何情况都不建议使用root用户直接登陆,而是使用sudo+命令方式 - - ## 1.1.5. 虚拟控制台 在默认的 deepin系统中,有6个可切换的类VT100字符控制台,可以直接在 Linux 主机上启动 shell。GUI界面占据tty1。 @@ -107,7 +102,6 @@ root 账户也被称作超级用户或特权用户。用这个账户,你能够 sudo chvt 3 ``` - ## 1.1.6. 雷神终端 这是deepin的特有功能,在GUI界面下按Alt+F2唤出,和普通终端一致。快捷键可以在控制中心修改。 @@ -134,14 +128,12 @@ sudo chvt 3 sudo shutdown -h now ``` - 在单用户模式下,可以使用命令行关闭系统。 ```Shell sudo poweroff -i -f ``` - 参见[第 6.3.8 节 “怎样通过 SSH 关闭远程系统”](https://www.debian.org/doc/manuals/debian-reference/ch06.zh-cn.html#_how_to_shutdown_the_remote_system_on_ssh)。 ## 1.1.9. 恢复一个正常的控制台 @@ -164,7 +156,6 @@ deepin作为一个开箱即用的系统,已经预装了许多软件包,但 sudo apt-get install ``` - ## 1.1.11. 额外用户账号 如果你不想用你自己的主用户账户来进行下面的练习操作,你可以使用下面的方式创建一个练习用户账户,比如说,创建一个用户名为 `fish` 的账号。 @@ -173,7 +164,6 @@ sudo apt-get install sudo adduser fish ``` - 回答所有问题。 这将创建一个名为 `fish` 的新账号。在你练习完成后,你可以使用下面的命令删除这个用户账号和它的用户主目录。 @@ -182,7 +172,6 @@ sudo adduser fish sudo deluser --remove-home fish ``` - ## 1.1.12. sudo 配置 对于典型的单用户工作站,例如运行在笔记本电脑上的桌面 deepin 系统,通常简单地配置 `sudo`(8) 来使为非特权用户(例如用户 `penguin`)只需输入用户密码而非 root 密码就能获得管理员权限。 @@ -191,14 +180,12 @@ sudo deluser --remove-home fish sudo echo "penguin ALL=(ALL) ALL" >> /etc/sudoers ``` - 另外,可以使用下列命令使非特权用户(例如用户 `penguin`)无需密码就获得管理员权限。 ```Shell sudo echo "penguin ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers ``` - 这些技巧只对你管理的单用户工作站中那个唯一的用户有用。 在多用户工作站中不要建立这样的普通用户账户,因为它会导致非常严重的系统安全问题。 diff --git a/docs/deepin进阶教程/1.GNU-linux教程/1.2.类Unix系统.md b/docs/deepin进阶教程/1.GNU-linux教程/1.2.类Unix系统.md index 7e4da7f..749a9a0 100644 --- a/docs/deepin进阶教程/1.GNU-linux教程/1.2.类Unix系统.md +++ b/docs/deepin进阶教程/1.GNU-linux教程/1.2.类Unix系统.md @@ -10,7 +10,6 @@ cd / tree -L 3 ``` - 这会展示出`/`目录下的文件树,深度为3 这些文件和目录可以分散在多个设备中。`mount`(8)用于把某个设备上找到的文件系统附着到巨大的文件树上。相反的,`umount`(8)把它再次分离。在最近的 Linux 内核里,`mount`(8)带某些参数时可以把文件树的一部分绑定到另外的地方,或者可以把文件系统挂载为共享的、私有的、从设备、或不可绑定的。对每个文件系统支持的挂载选项可以在`/usr/share/doc/linux-doc-*/Documentation/filesystems/`找到。 @@ -35,7 +34,7 @@ Unix系统上叫做**目录**,某些其他系统上叫做**文件夹**。请 - 对于一个物理设备, 是没有一个特定的目录路径名来对应的组成部分. 这不同于RT-11, CP/M,OpenVMS,MS-DOS,AmigaOS, 以及微软的Windows,这些系统存在一个路径包含了一个设备名字,比如"C:"。(尽管如此, 路径条目确实存在引用了物理设备作为正常的文件系统的一部分. 参考第 1.2.2 节 “文件系统深入解析”。) -虽然你**可以**在文件名中使用任意的字幕或者符号, 但是在实际情况下这样做是一个坏主意. 最好避免使用一些在命令行里面含有特殊意义的字符, 比如空格, 制表符, 换行符, 和其它的特殊字符: `{ } ( ) [ ] ' ` " \ / >< | ; ! #&^ * % @ $`. 如果你想有一个区分度良好的命名, 比较好的选择是利用 时期, 连字符和下划线. 你也可以每个单词的首字母大写, 这叫大驼峰命名法, 比如这样 "`LikeThis`". 经验丰富的Linux用户会趋向于在文件名中不使用空格. +虽然你**可以**在文件名中使用任意的字幕或者符号, 但是在实际情况下这样做是一个坏主意. 最好避免使用一些在命令行里面含有特殊意义的字符, 比如空格, 制表符, 换行符, 和其它的特殊字符: `{ } ( ) [ ] '` " \ / >< | ; ! #&^ * % @ $`. 如果你想有一个区分度良好的命名, 比较好的选择是利用 时期, 连字符和下划线. 你也可以每个单词的首字母大写, 这叫大驼峰命名法, 比如这样 "`LikeThis`". 经验丰富的Linux用户会趋向于在文件名中不使用空格. 这个 "root" 可能既表示 "超级用户root" 又表示 " 根目录"(/root) . 应该根据上下文确定它的用法 @@ -113,7 +112,7 @@ Unix系统上叫做**目录**,某些其他系统上叫做**文件夹**。请 - 文件的名字 -字符 说明 +字符 说明 ||| |-|-| @@ -133,7 +132,6 @@ sudo chgrp newgroup foo sudo chmod [ugoa][+-=][rwxXst][,...] foo ``` - 例如,你可以按照下面使一个目录树被用户`foo`所有,并共享给组`bar`。 ```Shell @@ -142,7 +140,6 @@ sudo chown -R foo:bar . sudo chmod -R ug+rwX,o=rX . ``` - 有三个更加特殊的权限位。 - Set-User-ID(SUID)位(s或S替换用户的x) @@ -155,7 +152,7 @@ sudo chmod -R ug+rwX,o=rX . 给一个可执行文件设置 **Set-User-ID** 位将允许一个用户以他自己的ID运行这个可执行文件(例如 **root 用户**)。类似的,给一个可执行文件设置了**Set-Group-ID** 位将允许一个用户以文件所属组的 ID 运行该文件。(例如 **root** 组)。由于这些设置可能导致安全风险,设置它们为可用的时候需要格外留意。 -在一个目录上设置“**Set-Group-ID**”将打开[类 BSD ](https://zh.wikipedia.org/wiki/Berkeley_Software_Distribution)的文件创建计划,所有在目录里面创建的文件将属于目录所属的**组**。 +在一个目录上设置“**Set-Group-ID**”将打开[类 BSD](https://zh.wikipedia.org/wiki/Berkeley_Software_Distribution)的文件创建计划,所有在目录里面创建的文件将属于目录所属的**组**。 给一个目录设置“**粘滞位**”将保护该目录内的文件不被其所有者之外的一个用户删除。为了保护一个在像“`/tmp`”这样所有人可写或同组可写的目录下文件内容的安全,不仅要去除**可写**权限,还要给其所在目录设置**粘滞位**。否则,该文件可以被任意对其所在目录有写权限的用户删除并创建一个同名的新文件。 @@ -175,7 +172,6 @@ drwxrwsr-x 2 root mail 4096 Oct 15 21:40 /var/mail drwxrwxrwt 3 root root 4096 Oct 16 21:20 /var/tmp ``` - `chmod`(1)有另一种数值模式来描述文件权限。这种数字模式使用3到4位八进制(底为8)数 |数字|说明| @@ -198,7 +194,6 @@ ls -l foo bar -rw-r--r-- 1 penguin penguin 0 Oct 16 21:35 foo ``` - 如果你需要在 shell 脚本中访问“`ls -l`”显示的信息,你需要使用相关命令,如`test`(1),`stat`(1)和`readlink`(1)。shell 内置命令,如“[”或“test”,可能也会用到。 ## 1.2.4. 控制新建文件的权限:umask @@ -209,7 +204,6 @@ ls -l foo bar (file permissions) = (requested file permissions) & ~(umask value) ``` - |umask值|创建的文件权限|创建的目录权限|用法| |-|-|-|-| |0022|-rw-r--r--|-rwxr-xr-x|仅所属用户可写| @@ -224,13 +218,10 @@ deepin 默认使用用户私人组(UPG)。每当一个新用户添加到系 组的成员。你需要注销之后重新登录(或运行 “`exec newgrp`”)以启用新 的组配置。 - - 或者,你可以通过添加一行 “`auth optional pam_group.so`”到 “`/etc/ pam.d/common-auth`” 以及配置 “`/etc/security/group.conf`” ,使得在身 份验证过程动态添加用户到组。(参见第 4 章认证和访问控制。) - 在 deepin 系统中,硬件设备是另一种文件。如果你从一个用户账户访问 某些设备出现问题,例如CD-ROM和U盘,你需要使这个用户成为相关 组的成员。 @@ -308,7 +299,6 @@ $ LANG=fr_FR.UTF-8 ls -l foo -rw-rw-r-- 1 penguin penguin 0 oct. 16 21:35 foo ``` - 参考第 9.3.4 节 “定制时间和日期的显示” 自定义 “ls -l” 输出 。 ## 1.2.7. 链接 @@ -319,9 +309,9 @@ $ LANG=fr_FR.UTF-8 ls -l foo [硬链接](https://zh.wikipedia.org/wiki/Hard_link) - - 对现有文件重复名称 +- 对现有文件重复名称 - - “`ln foo bar`” +- “`ln foo bar`” - [符号链接或 symlink](https://zh.wikipedia.org/wiki/Symbolic_link) @@ -354,7 +344,6 @@ $ cat baz New Content ``` - 硬链接可以在同一个文件系统内创建,并共用同一个 inode 号,由`ls`(1)带 “`-i`”选项显示。 符号链接总是名义上具有“`rwxrwxrwx`”的文件访问权限,如上面例子所示,实际的有效访问权限由它所指向的文件确定。 @@ -389,7 +378,6 @@ mypipe $ rm mypipe ``` - ## 1.2.9. 套接字 套接字被广泛应用于所有的互联网通信,数据库和操作系统本身。它类似于命名管道(FIFO)并且允许进程之间甚至不同计算机之间进行信息交换。对于套接字,这些进程不需要在同一时间运行,也不需要是同一个父进程的子进程。它是[进程间通信(IPC)](https://zh.wikipedia.org/wiki/Inter-process_communication)的一个节点。信息的交换可能会通过网络发生在不同主机之间。最常见的两种是 [互联网套接字](https://zh.wikipedia.org/wiki/Internet_socket) 和 [UNIX域套接字](https://zh.wikipedia.org/wiki/Unix_domain_socket) 。 @@ -432,7 +420,6 @@ crw-rw---T 1 root dialout 4, 64 Oct 16 20:57 /dev/ttyS0 crw-rw-rw- 1 root root 1, 5 Oct 16 20:57 /dev/zero ``` - - "`/dev/sda`"的主设备号是8,次设备号是0。它可以被`disk`群组的用户读写。 - "`/dev/sr0`"的主设备号是11,次设备号是0。它可以被`cdrom`群组的用户读写。 diff --git a/docs/deepin进阶教程/1.GNU-linux教程/1.4.类Unix工作环境基础.md b/docs/deepin进阶教程/1.GNU-linux教程/1.4.类Unix工作环境基础.md index 2cc6a53..9bb665f 100644 --- a/docs/deepin进阶教程/1.GNU-linux教程/1.4.类Unix工作环境基础.md +++ b/docs/deepin进阶教程/1.GNU-linux教程/1.4.类Unix工作环境基础.md @@ -60,7 +60,6 @@ EDITOR=vim export EDITOR ``` - 你可以在第 9 章 系统技巧中的第 9.3.6 节 “有颜色输出的命令”找到更多关于bash的定制技巧。 bash-completion 软件包能够让 bash 进行命令补全. @@ -140,7 +139,10 @@ zsh几乎100%兼容bash的操作 我认为习惯于使用 Vim 命令是一个明智的选择,因为 Linux/Unix 系统里一般都附带了 Vi 编辑器。 (实际上最初的 `vi` 以及后来的 `nvi` 这类工具程序很常见。因为在 Vim 里提供了`F1`帮助键,在同类工具中它的功能更强大,所以我选择 Vim 而不是其它新出的一些工具。) -假设你不是用 [Emacs](https://zh.wikipedia.org/wiki/Emacs) 就是用 [XEmacs](https://zh.wikipedia.org/wiki/XEmacs) 作为你的编辑器,其实还有更好的选择,尤其是在编程的时候。 Emacs 还有很多其他的特点,包括新手导读,目录编辑器,邮件客户端等等。当编写脚本或程序的时候,它能自动识别当前工作模式所对应的格式,让使用更加便利。一些人甚至坚持认为 Linux 系统里最需要配备的就是 Emacs。花十分钟来学习 Emacs 可以为后面的工作剩下更多时间。在此强烈推荐学习使用 Emacs 时候直接使用 GNU Emacs 参考手册。 +假设你不是用 [Emacs](https://zh.wikipedia.org/wiki/Emacs) 就是用 [XEmacs](https://zh.wikipedia.org/wiki/XEmacs) 作为你的编辑器, +其实还有更好的选择,尤其是在编程的时候。 Emacs 还有很多其他的特点,包括新手导读,目录编辑器,邮件客户端等等。当编写脚本或程序的时候, +它能自动识别当前工作模式所对应的格式,让使用更加便利。一些人甚至坚持认为 Linux 系统里最需要配备的就是 Emacs。花十分钟来学习 Emacs +可以为后面的工作剩下更多时间。在此强烈推荐学习使用 Emacs 时候直接使用 GNU Emacs 参考手册。 在实践应用中所有这些程序都会有一个教程,输入 "`vim`" 和F1键就可以启动Vim。建议你最好阅读一下前面的 35 行。移动光标到 "`|tutor|`" 并按 `Ctrl-]` 就可以看到在线培训教程。 @@ -157,10 +159,9 @@ Debian 有许多不同的编辑器。我们建议安装上面提到的 `vim` 软 Debian 通过命令“`/usr/bin/editor`”提供了对系统默认编辑器的统一访问,因此其它程序(例如 `reportbug`(1))可以调用它。你可以通过下列命令改变它。 ```Shell -$ sudo update-alternatives --config editor +sudo update-alternatives --config editor ``` - 对于新手,我建议使用“`/usr/bin/vim.basic`”代替“`/usr/bin/vim.tiny`”,因为它支持格式高亮。 ## 1.4.9.使用 @@ -195,8 +196,6 @@ $ sudo update-alternatives --config editor ## 1.4.10. 记录 shell 活动 - - shell 命令的输出有可能滚动出了屏幕,并可能导致你无法再查看到它。将shell活动记录到文件中再来回顾它是个不错的主意。当你执行任何系统管理任务时,这种记录是必不可少的。 记录 shell 活动的基本方法是在`script`(1)下运行 shell。 @@ -208,16 +207,14 @@ $ script Script started, file is typescript ``` - 在`script`下使用任何 shell 命令。 按`Ctrl-D`来退出`script`。 ```Shell -$ vim typescript +vim typescript ``` - ## 1.4.11. 基本的 Unix 命令 让我们来学习基本的 Unix 命令。在这里,我指的是一般意义上的“UNIX”。任何 UNIX 克隆系统通常都会提供等价的命令。deepin 系统也不例外。如果有一些命令不像你想的那样起作用,请不要担心。如果 shell 中使用了别名,其对应的命令输出会不同。这些例子并不意味着要以这个顺序来执行。 @@ -306,14 +303,13 @@ Unix 有一个惯例,以“.”开头的文件将被隐藏。它们一般为 尝试下列例子 ```Shell -$ man man -$ man bash -$ man builtins -$ man grep -$ man ls +man man +man bash +man builtins +man grep +man ls ``` - 手册的风格可能让人有点难以习惯,因为它们都相当简洁,尤其是比较老旧、非常传统的那些手册。但是,一旦你习惯了它,你来欣赏它们的简洁。 请注意,许多 类 Unix 命令(包含来自 GNU 和 BSD 的)都可以显示简短的帮助信息,你可以使用下列的其中一种方式来查看它(有时不带任何参数也可以)。 diff --git a/docs/deepin进阶教程/1.GNU-linux教程/1.5.简单shell命令.md b/docs/deepin进阶教程/1.GNU-linux教程/1.5.简单shell命令.md index cae7f93..3b56719 100644 --- a/docs/deepin进阶教程/1.GNU-linux教程/1.5.简单shell命令.md +++ b/docs/deepin进阶教程/1.GNU-linux教程/1.5.简单shell命令.md @@ -70,7 +70,6 @@ $ LANG=fr_FR.UTF-8 date -u mer. 19 mai 2021 15:19:02 UTC ``` - 这里,`date`(1)程序执行时使用了不同的语言环境值 - 第一个命令,“`$LANG`” 设置为系统的默认[语言环境](https://zh.wikipedia.org/wiki/Locale)值 “`en_US.UTF-8`”。 @@ -85,7 +84,6 @@ $ date -u mer. 19 mai 2021 15:19:24 UTC ``` - 对于语言环境配置的细节,参见 [第 8.1 节 “语言环境”](https://www.debian.org/doc/manuals/debian-reference/ch08.zh-cn.html#_the_locale) ## 1.5.3. "`$PATH`" 变量 @@ -122,13 +120,10 @@ $ date -R Thu, 20 May 2021 01:08:12 +0900 ``` - 这里的命令参数 "`-R`" 改变 `date`(1) 命令输出为 [RFC2822](http://tools.ietf.org/html/rfc2822) 标准的日期字符格式。 ## 1.5.6. Shell 通配符 - - 经常有这种情况你期望命令成串自动执行而不需要挨个输入,将文件名扩展为 **glob**,(有时候被称为 **通配符**),以此来满足这方面的需求。 |shell glob 模式|匹配规则描述| @@ -140,8 +135,6 @@ Thu, 20 May 2021 01:08:12 +0900 |[a-z]|"a" 到 "z" 之间的任意一个字符都可以作为精确字符| |[^…]|除了包含在括号中的任意字符 ( " 1^ 2"除外 ),其它字符都可以作为精确字符| - - 尝试下列例子 ```Shell @@ -161,10 +154,9 @@ $ echo [^1-3]* $ cd ..; rm -rf junk ``` - 参见 `glob`(7)。 -与 shell 通用的文件名匹配方式不同, 使用 " `-name` " 选项的 `find` (1),其 shell 模式" `*` " ,匹配以" `.` "开始的文件名.(新[ POSIX ](https://zh.wikipedia.org/wiki/POSIX)的特性) +与 shell 通用的文件名匹配方式不同, 使用 " `-name` " 选项的 `find` (1),其 shell 模式" `*` " ,匹配以" `.` "开始的文件名.(新[POSIX](https://zh.wikipedia.org/wiki/POSIX)的特性) BASH 可以使用内置的 shopt 选项如 " `dotglob` "," `noglob` "," `nocaseglob` "," `nullglob` "," `extglob` "定制全局行为,使用 `bash` ( 1 )查看详细说明。 @@ -186,7 +178,6 @@ $ [ 1 = 2 ] ; echo $? 1 ``` - ## 1.5.8. 典型的顺序命令和 shell 重定向 让我们试着记住下面 Shell 命令里部分命令行所使用的命令习语。 @@ -213,25 +204,21 @@ deepin 系统是一个多任务的操作系统。后台任务让用户能够在 尝试下列例子 ```Shell -$ `” 安装任何软件包。如果要安装软件包可以使用软件包安装管理器或者`sudo apt install <软件包路径>` + +- 绝不使用 “dpkg --force-all -i random_package” 安装任何软件包。 + +- 不要删除或修改 “/var/lib/dpkg/” 中的文件。 + +- 不要让从源码直接安装的程序覆盖系统文件(例如使用make install)。如果需要的话,将它们安装到 “/usr/local” 或 “/opt” 中。 + +上述对 deepin 软件包管理系统做的行为所导致的不兼容影响可能会使你的系统无法使用。 + +负责有关键任务的服务器的严谨的 Debian 系统系统管理员,应该使用额外的预防措施。 + +## 2.1.3. 持续升级的生活 + +::: tip +如果你不了解软件包更新机制,建议只使用deepin自带的系统更新。 +::: + +当然,也有一些用户乐于使用最新的软件,只需要在控制中心打开测试通道,并且签署知情协议即可。(不要说我们没有警告你) + +::: warning +我们不保证测试通道的软件包的稳定性,如果你因为测试通道的软件包导致系统无法使用,我们很难为此提供帮助,请在github上提交issue,以避免这个问题持续发生。 +::: + +建议你这么做的同时,准备好一个live CD的启动盘,以便于在deepin无法正常工作的时候挽救你的系统。 + +## 2.1.4.deepin源 + +deepin源的指定在`/etc/apt/sources.list`文件下,例如,现在的v23 baige系统 + +```Plain Text + +``` + +“/etc/apt/sources.list” 的含义在 sources.list(5) 中进行了描述,下面是一些要点。 + +- “deb” 的那行定义了二进制软件包。 + +- “deb-src” 的那行定义了源代码软件包。 + +- 第一个参数是 Debian 档案库的根 URL 。 + +- 第二个参数是发行版名称:可以使用套件名或代号。 + +- 第三个和之后的参数是 Debian 档案库的有效档案库范围名称。 + +如果只是用 aptitude(它不访问源代码相关的元数据),“deb-src”那行可以安全地删掉(或者在文件开头添加 “#” 来将它注释掉)。这可以加速档案库元数据的更新。URL 可以是“” 、“” 、 “file://” …… + +## 2.1.5.软件包依赖关系 + +Debian 系统通过其控制文件字段中的版本化二进制依赖声明机制来提供一致的二进制软件包集合。下面有一些它们的简单定义。 + +- 依赖” + + - 绝对的依赖,所有在这里列出的软件包都必须同时或提前安装。 + +- 预依赖 + + - 类似于 Depends,但列出的软件包必须提前完成安装。 + +- 推荐 + + - 这里表示一个强,但不是绝对的依赖关系 。大多数用户不会想要这个包,除非在这里列出的所有包都已经安装。 + +- 建议 + + - 较弱的依赖。这个软件包的大多数用户可能会从安装所列的软件包中受益,但没有它们也可以有适当的功能。 + +- 增强 + + - 这里表明一个像建议的弱依赖关系,不装也没关系。 + +- 破损 + + - 表明一个软件包不兼容一些版本规范。一般的解决方法就是升级列出的所有软件包。 + +- 冲突 + + - 这表明了绝对的不兼容。为了安装这个软件包必须移除所有列出的软件包。 + +- 替代 + + - 这表明这个文件安装的文件会替代所列的软件包的文件。 + +- 提供 + + - 表明这个软件包会提供所列的软件包所有的文件和功能。 + +包含源代码依赖关系的官方定义位于 [the Policy Manual: Chapter 7 - Declaring relationships between packages](https://www.debian.org/doc/debian-policy/ch-relationships)。 + +## 2.4.5.APT包管理的事件流 + +这是 APT 提供的软件包管理的简单事件流摘要。 + +- 更新(“`apt update`”、“`aptitude update`” 或 “`apt-get update`”): + + 1. 从远程档案库获取档案库元数据 + + 2. 重建和更新 APT 使用的本地元数据 + +- 升级(“`apt upgrade`” 和 “`apt full-upgrade`”,或 “`aptitude safe-upgrade`” 和 “`aptitude full-upgrade`”,或 “`apt-get upgrade`” 和 “`apt-get dist-upgrade`”): + + 1. 选择候选版本,这通常是所有已安装软件包的最新可用版本。 (see 第 2.7.3 节 “调整候选版本” for exception) + + 2. 解决软件包依赖关系 + + 3. 如果候选版本与已安装的版本不同,会从远程档案库获取所选择的二进制软件包 + + 4. 解包所获取的二进制软件包 + + 5. 运行 preinst 脚本 + + 6. 安装二进制文件 + + 7. 运行 postinst 脚本 + +- 安装(“apt install ...”、“aptitude install ..." 或者 "apt-get install …” ): + + 1. 选择命令行上列出的软件包 + + 2. 解决软件包依赖关系 + + 3. 从远程服务器获取已选二进制包 + + 4. 解包所获取的二进制软件包 + + 5. 运行 preinst 脚本 + + 6. 安装二进制文件 + + 7. 运行 postinst 脚本 + +- 移除 ("apt remove …", “aptitude remove …” 或 “apt-get remove …”): + + 1. 选择命令行上列出的软件包 + + 2. 解决软件包依赖关系 + + 3. 运行 prerm 脚本 + + 4. 移除已安装的文件,除了配置文件 + + 5. 运行 postrm 脚本 + +- 清除 ("apt purge",“aptitude purge …” 或 “apt-get purge …”): + + 1. 选择命令行上列出的软件包 + + 2. 解决软件包依赖关系 + + 3. 运行 prerm 脚本 + + 4. 移除已安装的文件,包含配置文件 + + 5. 运行 postrm 脚本 + +这里,为了大局,我特意省略了技术细节。