docs: update docs

Log:
This commit is contained in:
xiangzelong 2023-02-16 10:56:23 +08:00
parent 710ce6d6fa
commit 82ed19889b
7 changed files with 225 additions and 71 deletions

View File

@ -24,6 +24,13 @@ export default {
{ 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" },
],
}
],
},
{

View File

@ -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下尝试与电脑交流。
@ -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 <package_name>
```
## 1.1.11. 额外用户账号
如果你不想用你自己的主用户账户来进行下面的练习操作,你可以使用下面的方式创建一个练习用户账户,比如说,创建一个用户名为 `fish` 的账号。
@ -173,7 +164,6 @@ sudo apt-get install <package_name>
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
```
这些技巧只对你管理的单用户工作站中那个唯一的用户有用。
在多用户工作站中不要建立这样的普通用户账户,因为它会导致非常严重的系统安全问题。

View File

@ -10,7 +10,6 @@ cd /
tree -L 3
```
这会展示出`/`目录下的文件树深度为3
这些文件和目录可以分散在多个设备中。`mount`(8)用于把某个设备上找到的文件系统附着到巨大的文件树上。相反的,`umount`(8)把它再次分离。在最近的 Linux 内核里,`mount`(8)带某些参数时可以把文件树的一部分绑定到另外的地方,或者可以把文件系统挂载为共享的、私有的、从设备、或不可绑定的。对每个文件系统支持的挂载选项可以在`/usr/share/doc/linux-doc-*/Documentation/filesystems/`找到。
@ -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
@ -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. 链接
@ -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`群组的用户读写。

View File

@ -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 的)都可以显示简短的帮助信息,你可以使用下列的其中一种方式来查看它(有时不带任何参数也可以)。

View File

@ -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,7 +154,6 @@ $ echo [^1-3]*
$ cd ..; rm -rf junk
```
参见 `glob`(7)。
与 shell 通用的文件名匹配方式不同, 使用 " `-name` " 选项的 `find` (1),其 shell 模式" `*` " ,匹配以" `.` "开始的文件名.(新[POSIX](https://zh.wikipedia.org/wiki/POSIX)的特性)
@ -186,7 +178,6 @@ $ [ 1 = 2 ] ; echo $?
1
```
## 1.5.8. 典型的顺序命令和 shell 重定向
让我们试着记住下面 Shell 命令里部分命令行所使用的命令习语。
@ -213,25 +204,21 @@ deepin 系统是一个多任务的操作系统。后台任务让用户能够在
尝试下列例子
```Shell
$ </etc/motd pager
</etc/motd pager
```
```Shell
$ pager </etc/motd
pager </etc/motd
```
```Shell
$ pager /etc/motd
pager /etc/motd
```
```Shell
$ cat /etc/motd | pager
cat /etc/motd | pager
```
尽管4个 shell 重定向的例子都会显示相同的结果,但最后一个例子毫无意义地运行了额外的 `cat` 命令浪费了资源。
shell 允许你使用 `exec` 通过任意一个文件描述符来打开文件。
@ -245,7 +232,6 @@ $ cat bar
Hello
```
预定义的文件描述符0-2。
|设备|说明|文件描述符|
@ -261,10 +247,9 @@ Hello
尝试下列例子
```Shell
$ alias la='ls -la'
alias la='ls -la'
```
现在,“`la`”是“`ls -al`”的简写形式,并同样会以长列表形式列出所有的文件。
你可以使用 `alias` 来列出所有的别名(参见 `bash`(1) 中的“SHELL BUILTIN COMMANDS”
@ -275,7 +260,6 @@ $ alias
alias la='ls -la'
```
你可以使用 `type` 来确认命令的准确路径或类型(参见 `bash`(1) 中的“SHELL BUILTIN COMMANDS”
尝试下列例子
@ -291,7 +275,6 @@ $ type file
file is /usr/bin/file
```
`ls` 在最近被使用过,而 “`file`” 没有,因此 “`ls`” 标记为 “hashed”被录入哈希表即 shell 有一个内部的记录用来快速访问 “`ls`” 所处的位置。
:::tip

View File

@ -1,3 +1,5 @@
# 简介
我认为学习一个计算机系统,就像学习一门新的外语。虽然教程和文档是有帮助的,但你必须自己练习。为了帮助你平滑起步,我详细说明一些基本要点。
[deepin](https://www.deepin.org/) [GNU](https://zh.wikipedia.org/wiki/GNU)/[Linux](https://zh.wikipedia.org/wiki/Linux)中最强大的设计来自[Unix](https://zh.wikipedia.org/wiki/Unix)操作系统,一个[多用户](https://zh.wikipedia.org/wiki/Multi-user)[多任务](https://zh.wikipedia.org/wiki/Computer_multitasking)的操作系统。你必须学会利用这些特性以及Unix和GNU/Linux的相似性。

View File

@ -0,0 +1,192 @@
# 2.1.Debian软件包管理前提
## 2.1.1. 软件包配置
下面是 Debian 系统软件包配置的一些要点。
- Debian 尊重系统管理员的手动配置。换句话说,软件包配置系统不会为了方便而去更改那些配置。
- 每个软件包都带有自己的配置脚本,它使用标准用户接口 debconf(7) 来帮助软件包初始化安装过程。
- Debian 开发者通过软件包配置脚本,尽力使你能有一个完美的升级体验。
- 系统管理员可以使用软件包工具的全部功能。但在默认的安装中会禁用那些具有安全风险的。
- 如果你手动激活了一些具有安全隐患的服务,你有责任遏制风险。
- 高深的配置可以由系统管理员手动启用。这可能会对用于系统配置的通用流行帮助程序造成干
## 2.1.2. 基本的注意事项
::: warning
不要从任何的混合套件中安装软件包。它可能会打破软件包的一致性,这需要你要深厚的系统管理知识,例如 ABI 编译器、库版本和解释器特性等等。
比如不要混用deepin v20和 v23的源也不能混用debian和deepin源如果因为混源导致任何问题请自行承担社区将不会为此花费精力。
:::
deepin 系统默认只会提供软件的 stable 版本,除非你加入了测试计划,并且知晓相关风险。我的意思是,最好避免下列的一些行为作为一项预防措施,直到你十分了解 deepin 系统。下面有一些提醒。
- 在 “/etc/apt/sources.list” 中不要包含 testing 或 unstable 。
- 在 “/etc/apt/sources.list” 里不要在标准的 deepin 中混合使用其它非 deepin 的源,例如 Ubuntu或debian 。
- 不要建立 “/etc/apt/preferences” 。
- 不了解会造成的全部影响,就不要通过配置文件改变软件包管理工具的默认行为。
- 不要使用 “`dpkg -i <random_package>`” 安装任何软件包。如果要安装软件包可以使用软件包安装管理器或者`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 可以是“<http://>” 、“<ftp://>” 、 “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 脚本
这里,为了大局,我特意省略了技术细节。