docs:update docs (#19)

* docs: update docs

Log:

* docs: update docs

Log:
This commit is contained in:
xzl 2023-03-02 15:20:40 +08:00 committed by GitHub
parent 2477057ba3
commit 9d8e013626
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 753 additions and 13 deletions

View File

@ -53,14 +53,24 @@ export default defineConfig({
{ text: "3.8.udev系统", link: "/deepin进阶教程/3.系统初始化/3.8.udev系统" },
],
},
{
text: "10.数据管理",
items: [
{ text: "10.1.共享,拷贝和存档", link: "/deepin进阶教程/10.数据管理/10.1.共享,拷贝和存档" },
{ text: "10.2.备份和恢复", link: "/deepin进阶教程/10.数据管理/10.2.备份和恢复" },
],
},
{
text: "11.编程开发",
items: [
{ text: "11.1.C++编程环境搭建", link: "deepin进阶教程/11.编程开发/11.1.C++编程环境搭建" },
{ text: "11.2.golang编程环境搭建", link: "deepin进阶教程/11.编程开发/11.2.golang编程环境搭建" },
{ text: "11.3.dotnet编程环境搭建", link: "deepin进阶教程/11.编程开发/11.3.dotnet编程环境搭建" },
{ text: "11.4.rust编程环境搭建", link: "deepin进阶教程/11.编程开发/11.4.rust编程环境搭建" },
{ text: "11.5.DTK编程环境开发", link: "deepin进阶教程/11.编程开发/11.5.DTK编程环境开发" },
{ text: "11.6.nodejs编程环境搭建", link: "deepin进阶教程/11.编程开发/11.6.nodejs编程环境搭建" },
],
}
},
],
},
{

View File

@ -3,7 +3,7 @@
## 2.1.1.介绍
* 关于深度操作系统的安装的过程,具体请参考官方社区网站介绍:[如何安装](https://www.deepin.org/installation/)以及[深度安装器](https://www.deepin.org/original/deepin-installer/)项目。
* 虚拟机安装客户机类型选linux debian11 x64
* 虚拟机安装客户机类型选linux Debian11 x64
## 2.1.2.下载

View File

@ -13,7 +13,7 @@ foo login
此时,登陆提示符显示如下:
```PowerShell
```Shell
Password
```

View File

@ -0,0 +1,359 @@
# 10.1. 共享, 拷贝和存档
数据的安全和它的受控共享有如下几个方面。
- 存档文件的建立
- 远程存储访问
- 复制
- 跟踪修改历史
- 促进数据共享
- 防止未经授权的文件访问
- 检测未经授权的文件修改
这些可以通过使用工具集来实现。
- 存档和压缩工具
- 复制和同步工具
- 网络文件系统
- 移动存储媒介
- 安全 shell
- 认证体系
- 版本控制系统工具
- 哈希算法和加密工具
## 10.1.1. 存档和压缩工具
| 软件包 | 扩展名 | 命令 | 描述 |
|------------|-------|------------------------|-----------------------------------------------------------------------------|
| tar | .tar | tar(1) | 标准的归档工具(默认) |
| cpio | .cpio | cpio(1) | Unix System V 风格的归档器,与 find(1) 一起使用 |
| binutils | .ar | ar(1) | 创建静态库的归档工具 |
| fastjar | .jar | fastjar(1) | Java 归档工具(类似 zip |
| pax | .pax | pax(1) | 新的 POSIX 归档工具,介于 tar 和 cpio 之间 |
| gzip | .gz | gzip(1), zcat(1), … | GNU LZ77 压缩工具(默认) |
| bzip2 | .bz2 | bzip2(1), bzcat(1), … | Burrows-Wheeler block-sorting 压缩工具有着比 gzip(1) 更高的压缩率 (跟 gzip 有着相似的语法但速度比它慢) |
| lzma | .lzma | lzma(1) | LZMA 压缩工具有着比 gzip(1) 更高的压缩率(不推荐) |
| xz-utils | .xz | xz(1), xzdec(1), … | XZ 压缩工具有着比 bzip2(1) 更高的压缩率(压缩速度慢于 gzip 但是比 bzip2 快; LZMA 压缩工具的替代品) |
| zstd | .zstd | zstd(1), zstdcat(1), … | Zstandard 快速无损压缩工具 |
| p7zip | .7z | 7zr(1), p7zip(1) | 有着更高压缩率的 7-zip 文件归档器LZMA 压缩) |
| p7zip-full | .7z | 7z(1), 7za(1) | 有着更高压缩率的 7-Zip 文件归档器LZMA 压缩和其他) |
| lzop | .lzo | lzop(1) | LZO 压缩工具有着比 gzip(1) 更高的压缩和解压缩速度 (跟 gzip 有着相似的语法但压缩率比它低) |
| zip | .zip | zip(1) | InfoZipDOS 归档器和压缩工具 |
| unzip | .zip | unzip(1) | InfoZIPDOS 解档器和解压缩工具 |
deepin也提供图形化的归档管理器在系统中预装
::: warning 警告
除非你知道将会发生什么,否则不要设置 "$TAPE" 变量。它会改变 tar(1) 的行为
:::
::: tip
- gzipped tar(1) 归档器用于扩展名是 ".tgz" 或者 ".tar.gz" 的文件。
- xz-compressed tar(1) 归档器用于扩展名是 ".txz" 或者 ".tar.xz" 的文件。
- FOSS 工具,例如 tar(1),中的主流压缩方法已经按如下所示的迁移: gzip → bzip2 → xz
- cp(1),scp(1) 和 tar(1) 工具可能并不适用于一些特殊的文件。cpio(1) 工具的适用范围是最广的。
- cpio(1) 是被设计为与 find(1) 和其它命令一起使用,适合于创建备份脚本的场景,因此,脚本的文件选择部分能够被独立测试。
- Libreoffice 数据文件的内部结构是 ".jar" 文件,它也可以使用 unzip 工具来打开。
- 事实上跨平台支持最好的存档工具是 zip。按照“zip -rX”的方式调用可以获得最大的兼容性。如果最大文件大小需要纳入考虑范围请同时配合“-s”选项使用。
:::
## 10.1.2. 复制和同步工具
| 软件包 | 工具 | 功能 |
|----------------|--------|----------------------------|
| coreutils | GNU cp | 复制本地文件和目录("-a" 参数实现递归) |
| openssh-client | scp | 复制远端文件和目录(客户端,"-r" 参数实现递归) |
| openssh-server | sshd | 复制远端文件和目录(远程服务器) |
| rsync | | 单向远程同步和备份 |
| unison | | 双向远程同步和备份 |
在复制文件的时候, rsync(8) 比其他工具提供了更多的特性。
- 差分传输算法只会发送源文件与已存在的目标文件之间的差异部分
- 快速检查算法 (默认) 会查找大小或者最后的修改时间有变化的文件
- "--exclude" 和 "--exclude-from" 选项类似于 tar(1)
- 在源目录中添加反斜杠的语法能够避免在目标文件中创建额外的目录级别
deepin的文件管理器也提供了webdav的支持可以通过webdav协议访问远程文件使用webdav同步文件也是一种不错的选择。
TODO待补充
## 10.1.3. 归档(压缩)语法
以下是用不同的工具压缩和解压缩整个 "./source" 目录中的内容。
GNU tar(1):
```Bash
tar -cvJf archive.tar.xz ./source
tar -xvJf archive.tar.xz
```
或者
```Bash
find ./source -xdev -print0 | tar -cvJf archive.tar.xz --null -F -
```
cpio(1):
```Bash
find ./source -xdev -print0 | cpio -ov --null > archive.cpio; xz archive.cpio
zcat archive.cpio.xz | cpio -i
```
其余工具使用见wiki
## 10.1.4. 复制和同步语法
如下是用不同的工具复制整个 "./source" 目录中的内容。
- 本地复制: "./source" 目录 → "/dest" 目录
- 远程复制:本地主机上的 "./source" 目录 → "user@host.dom" 主机上的 "/dest" 目录
rsync(8):
```Bash
cd ./source; rsync -aHAXSv . /dest
cd ./source; rsync -aHAXSv . user@host.dom:/dest
```
你能够选择使用“源目录上的反斜杠”语法。
```Bash
rsync -aHAXSv ./source/ /dest
rsync -aHAXSv ./source/ user@host.dom:/dest
```
或者,如下所示。
```Bash
cd ./source; find . -print0 | rsync -aHAXSv0 --files-from=- . /dest
cd ./source; find . -print0 | rsync -aHAXSv0 --files-from=- . user@host.dom:/dest
```
GNU cp(1) 和 openSSH scp(1):
```Bash
cd ./source; cp -a . /dest
cd ./source; scp -pr . user@host.dom:/dest
```
GNU tar(1):
```Bash
(cd ./source && tar cf - . ) | (cd /dest && tar xvfp - )
(cd ./source && tar cf - . ) | ssh user@host.dom '(cd /dest && tar xvfp - )'
```
cpio(1):
```Bash
cd ./source; find . -print0 | cpio -pvdm --null --sparse /dest
```
你能够在所有包含 "`.`" 的例子里用 "`foo`" 替代 "`.`",这样就可以从 "`./source/foo`" 目录复制文件到 "`/dest/foo`" 目录。
在所有包含 "`.`" 的列子里,你能够使用绝对路径 "`/path/to/source/foo`" 来代替 "`.`",这样可以去掉 "`cd ./source`;". 如下所示,这些文件会根据工具的不同,拷贝到不同的位置。
- "/dest/foo": rsync(8), GNU cp(1), 和 scp(1)
- "/dest/path/to/source/foo": GNU tar(1), 和 cpio(1)
::: tip
rsync(8) 和 GNU cp(1) 可以用 "-u" 选项来忽略接受端上更新的文件。
:::
## 10.1.5. 查找文件的语法
find(1) 被用作从归档中筛选文件也被用作拷贝命令 (参见第 10.1.3 节 “归档语法”和第 10.1.4 节 “复制语法”) 或者用于 xargs(1) (参见第 9.4.9 节 “使用文件循环来重复一个命令”)。通过 find 的命令行参数能够使其功能得到加强。
以下是 find(1)基本语法的总结。
- find 条件参数的运算规则是从左到右。
- 一旦输出是确定的,那么运算就会停止。
- “逻辑 OR" (由条件之间的 "-o" 参数指定的)优先级低于 "逻辑 AND" (由 "-a" 参数指定或者条件之间没有任何参数)。
- ”逻辑 NOT" (由条件前面的 "!" 指定) 优先级高于 “逻辑 AND”。
- "-prune" 总是返回逻辑 TRUE 并且如果这个目录是存在的,将会搜索除这个目录以外的文件。
- "-name" 选项匹配带有 shell 通配符 (参见第 1.5.6 节 “Shell 通配符”) 的文件名但也匹配带有类似 "*" 和 "?" 元字符的 ."。(新的 POSIX 特性)
- "-regex" 匹配整个文件路径,默认采用 emacs 风格的 BRE (参见第 1.6.2 节 “正则表达式”)。
- "-size" 根据文件大小来匹配 (值前面带有 "+" 号匹配更大的文件,值前面带有 "-" 号匹配更小的文件)
- "-newer" 参数匹配比参数名中指定的文件还要新的文件。
- "-print0" 参数总是返回逻辑 TRUE 并将完整文件名 (null terminated) 打印到标准输出设备上。
如下是 find(1) 语法格式。
```bash
find /path/to \
-xdev -regextype posix-extended \
-type f -regex ".*\.cpio|.*~" -prune -o \
-type d -regex ".*/\.git" -prune -o \
-type f -size +99M -prune -o \
-type f -newer /path/to/timestamp -print0
```
这些命令会执行如下动作。
- 查找 "/path/to" 下的所有文件
- 限定全局查找的文件系统并且使用的是 ERE (参见第 1.6.2 节 “正则表达式”)
- 通过停止处理的方式来排除匹配 ".*\.cpio" 或 ".*~" 正则表达式的文件
- 通过停止处理的方式来排除匹配 ".*/\.git" 正则表达式的目录
- 通过停止处理的方式来排除比 99MB (1048576字节单元) 更大的文件
- 显示文件名,满足以上搜索条件并且比 "/path/to/timestamp" 新的文件
请留心以上例子中的 "-prune -o" 排除文件的习惯用法。
## 10.1.6. 归档媒体
数据无价,所以你应该把它们存储在安全的地方。当你在寻找存储设备时,你应该注意它们的局限性。对于小型的个人数据备份,我使用品牌公司的 CD-R 和 DVD-R 然后把它放在阴凉、干燥、清洁的地方。(专业的一般使用磁带存档介质)
网上(主要是来源于供应商信息)可以查看存储介质的最大使用寿命。
- 大于100年用墨水的无酸纸
- 100年光盘存储CD/DVDCD/DVD-R
- 30年磁带存储磁带软盘)
- 20年相变光盘存储CD-RW
这不包括由于人为导致的机械故障等等。
网上(主要来源于供应商信息)可以查看存储介质的最大的写次数。
- 大于250,000次硬盘驱动器
- 大于10,000次闪存
- 1,000次CD/DVD-RW
- 1次CD/DVD-R
个人建议如果可行的话使用磁带或者光盘保存你的数据比如和家人的照片不要使用u盘或者闪存保存长期不使用的冷数据。
你可以使用第三方云服务来保存你的数据比如Google DriveDropboxOneDrive等等如果你不放心数据安全的话可以加密你的数据之后再上传或者自己搭建一个私有的云服务。
::: warning 注意
这里的存储寿命和写次数的数据不应该被用来决定任何用于关键数据的存储媒介,请翻阅制造商提供的特定产品的说明。
:::
::: tip
因为 CD/DVD-R 和 纸只能写一次,它们从根本上阻止了因为重写导致的数据意外丢失。这是优点!
如果你需要更快更频繁的进行大数据备份,那么通过高速网络连接的远端主机上的硬盘来实现备份,可能是唯一可行的方法。
如果你在使用一个可重复写入的介质作为你的备份介质,使用支持只读快照的 btrfs 或 zfs 文件系统,也许是一个好注意。
:::
## 10.1.7. 可移动存储设备
可移动存储设备可能是以下的任何一种。
- USB 闪存盘
- 硬盘驱动器
- 光盘驱动器
- 数码相机
- 数字音乐播放器
它们可以通过以下的方式来进行连接。
- USB
- IEEE 1394 / FireWire火线现在很少见
- PC 卡常见于2010年前的笔记本电脑
- 雷电Thunderbolt注意雷电3使用usb-c接口标准但是不向下兼容usb协议
- SATA3/eSATA 理论上支持热拔插的SATA硬盘也属于移动设备
deepin 文件管理器会自动挂载可移动存储设备,你可以在文件管理器中看到它们。如果你想要在命令行中查看它们,你可以使用 mount(8) 命令。
- udisks2 包提供了守护进程和相关的实用程序来挂载和卸载这些设备。
- D-bus 创建事件来触发自动处理。
- PolicyKit 提供了所需的特权。
::: tip
umount(8) 在自动挂载设备的时候可能会带有 "uhelper=" 参数。
:::
::: tip
只有当这些可移动设备没有在 "/etc/fstab" 文件中列出时,桌面环境下才会自动挂载。
:::
现代桌面环境下的挂载点被选为 "/media/username/disk_label",它可以被如下所示的来定制。
- FAT 格式的文件系统使用 mlabel(1) 命令
- ISO9660 文件系统使用带有 "-V" 选项的 genisoimage(1) 命令
- ext2/ext3/ext4 文件系统使用带有 "-L" 选项的 tune2fs(1) 命令
::: tip
挂载时可能需要提供编码选项(参见 第 8.1.3 节 “文件名编码”)。
:::
::: tip
在图形界面菜单上移除文件系统,可能会移除它的动态设备节点例如 "/dev/sdc"。如果你想要保留它的设备节点,你应该在命令行提示符上输入 umount(8) 命令来卸载它。
:::
## 10.1.8. 选择用于数据分享的文件系统
在你的文件系统中,你应该选择一个用于数据分享的文件系统。这个文件系统应该支持以下的特性。
1. 你应该能够在不同的操作系统上访问它。
2. 不会存在文件过大导致的无法写入的问题。
下面是一些可供选择的文件系统。
| 文件系统名 | 典型使用场景 |
|---------|------------------------------------------------------------------------------------------------|
| FAT12 | 软盘(<32MiB上跨平台的数据分享 |
| FAT16 | 在小硬盘(<2GiB)上的跨平台的数据分享 |
| FAT32 | 在大硬盘(<8TiB MS Windows95 OSR2 以上的操作系统所支持) 上的跨平台的数据分享 |
| exFAT | 在大硬盘类设备上跨平台共享数据(<512TiB WindowsXP, Mac OS X Snow Leopard 10.6.5 Linux 内核 5.4 版本以上的操作系统所支持) |
| NTFS | 在大硬盘类设备上的跨平台共享数据 (在 MS Windows NT 和后续版本原生支持;在 Linux 上,通过使用 FUSE 的 NTFS-3G 支持。) |
| ISO9660 | 在 CD-R 和 DVD+/-R 上的跨平台的静态数据分享 |
| UDF | CD-R 和 DVD+/-R (新)上的增量数据写入 |
| MINIX | 软盘上磁盘空间高利用率的 unix 文件数据存储 |
| ext2 | 在装有老旧 linux 系统的硬盘上的数据分享 |
| ext3 | 在装有老旧 linux 系统的硬盘上的数据分享 |
| ext4 | 在装有较新的 linux 系统的硬盘上的数据分享 |
| btrfs | 使用只读快照在装有较新的 Linux 系统的硬盘上共享数据 |
所以建议对于移动设备,你应该使用 exFAT 或者 FAT32。对于 CD/DVD你应该使用 UDF。
FAT 文件系统被绝大多数的现代操作系统支持,它对于通过可移动硬盘进行的数据交换是非常有用的。
当格式化像装有 FAT 文件系统的跨平台数据共享的可移动设备时,以下应该是保险的选择。
- 用 fdisk(8)cfdisk(8) 或者 parted(8) 命令(参见第 9.6.2 节 “硬盘分区配置”)把它们格式化为单个的主分区并对把它做如下标记。
- 标记小于 2GB 的 FAT 设备为 字符"6"。
- 标记更大的 FAT32 设备为字符 "c"。
- 如下所示是用 mkfs.vfat(8) 命令格式化主分区的。
- 它的设备名字,例如 "/dev/sda1" 用于 FAT16 设备
- 明确的选项和它的设备名,例如 "-F 32 /dev/sda1" 用于 FAT32 设备
当使用 FAT 或 ISO9660 文件系统分享数据时,如下是需要注意的安全事项。
- tar(1)或cpio(1)命令压缩文件,目地是为了保留文件名,符号链接,原始的文件权限和文件所有者信息。
- 用 split(1) 命令把压缩文件分解成若干小于 2GiB的小文件使其免受文件大小限制。
- 加密压缩文件保护其内容免受未经授权的访问。
::: warning 注意
因为 FAT 文件系统的设计,最大的文件大小为 (2^32 - 1) bytes = (4GiB -1 byte)。对于一些老旧的 32 位系统上的应用程序而言,最大的文件大小甚至更小(2^31 -1) bytes = (2GiB -1 byte)。Debian 没有遇到后者的问题。
:::
::: warning 注意
微软系统本身并不建议在超过 200MB 的分区或者驱动器上使用 FAT。他们的 " [Overview of FAT, HPFS, and NTFS File Systems](http://support.microsoft.com/kb/100108/) 这篇文章突出显示了微软系统的缺点,例如低效的磁盘空间利用。当然了,我们在 Linux 系统上还是应该使用 ext4 文件系统。
:::
::: tip
有关文件系统和访问文件系统的更多信息,请参考 "Filesystems HOWTO"。
:::
::: 10.1.9. 网络上的数据分享
当使用网络来分享数据的时候,你应该使用通用的服务。这里有一些提示。
| 网络服务 | 典型使用场景描述 |
|---------------------------|--------------------------------------------------------------------------------------------------------------------------------------------|
| SMB/CIFS 用 Samba 挂载网络文件系统 | 通过 “Microsoft Windows 网络” 分享文件,参见 smb.conf(5) 和 官方 Samba 3.x.x 指导和参考手册The Official Samba 3.x.x HOWTO and Reference Guide 或 samba-doc 软件包 |
| NFS 用 Linux 内核挂载网络文件系统 | 通过 “Unix/Linux 网络" 分享文件,参见 exports(5) 和 Linux NFS-HOWTO |
| HTTP 服务 | 在 web 服务器/客户端之间分享文件 |
| HTTPS 服务 | 在有加密的安全套接层 (SSL) 或者安全传输层 (TLS) 的网络服务器/客户端中分享文件 |
| FTP 服务 | 在 FTP 服务器/客户端之间分享文件 |
尽管对于文件分享来说,通过网络挂载文件系统和传输文件是相当方便的,但这可能是不安全的。它们的网络连接必须通过如下所示的加强安全性。
- 用 SSL/TLS 加密
- 建立 SSH 通道
- 建立 VPN 通道
- 网络之间需要有安全的防火墙
参见 第 6.5 节 “其它网络应用服务” 和 第 6.6 节 “其它网络应用客户端”。

View File

@ -0,0 +1,61 @@
# 10.2. 备份和恢复
我们都熟知计算机有时会出问题,或者由于人为的错误导致系统和数据损坏。备份和恢复操作是成功的系统管理中非常重要的一部分。可能有一天你的电脑就会出问题
::: tip
保持你的备份系统简洁并且经常备份你的系统,有备份数据比你采用的备份方法的技术先进要重要的多
:::
## 10.2.1. 备份和恢复策略
有3个关键的因素决定实际的备份和恢复策略。
1. 知道要备份和恢复什么。
- 你自己创建的数据文件:在 "~/" 下的数据
- 你使用的应用程序创建的数据文件:在 "/var/" 下的数据(除了 "/var/cache/""/var/run/" 和 "/var/tmp/")
- 系统配置文件:在 "/etc/” 下的数据
- 本地程序:在 "/usr/local/" 或 "/opt/" 下的数据
- 系统安装信息:关键步骤 (分区,...) 的纯文本备忘录
- 验证数据结果:通过实验性的恢复操作来预先验证
- 用户进程的 Cron 工作,文件在 "/var/spool/cron/crontabs" 目录,并且重启 cron(8)。参见第 9.4.14 节 “定时任务安排”来获得关于 cron(8) 和 crontab(1) 的信息。
- 用户进程的 Systemd 计时器工作:文件在 "~/.config/systemd/user" 目录。参见 systemd.timer(5) 和 systemd.service(5)。
- 用户进程的自动启动工作:文件在 "~/.config/autostart" 目录。参见 Desktop Application Autostart Specification。
2. 知道怎样去备份和恢复。
- 安全的数据存储:保护其免于覆盖和系统故障
- 经常备份:有计划的备份
- 冗余备份:数据镜像
- 傻瓜式操作:单个简单命令备份
3. 评估涉及的风险和成本。
- 数据丢失的风险
- 数据至少是应该在不同的磁盘分区上,最好是在不同的磁盘和机器上,来承受文件系统发生的损坏。重要数据最好存储在一个只读文件系统上。[4]
- 数据非法访问的风险
- 敏感的身份数据,比如 "/etc/ssh/ssh_host_*_key", "~/.gnupg/*", "~/.ssh/*", "~/.local/share/keyrings/*", "/etc/passwd", "/etc/shadow", "popularity-contest.conf", "/etc/ppp/pap-secrets", and "/etc/exim4/passwd.client" 应当使用加密备份。[5] (参见 第 9.9 节 “数据加密提示”。)
- 即使在信任的系统上,也不能够硬编码系统登录密码或者加密密码到任何脚本里面。(参见 第 10.3.6 节 “密码密钥环”。)
4. 数据丢失的方式及其可能性
- 硬件(特别是硬盘)将会损坏
- 文件系统可能会损坏,里面的数据可能被丢失
- 对违规安全访问而言,远程存储系统不能够被信任
- 弱的密码保护能够被轻松的破解
- 文件权限系统可以被破解
5. 备份所需的资源:人力,硬件,软件,…
- 使用 cron 任务或者 systemd 计时器任务来自动化调度备份工作
::: warning 注意
除非你知道自己做的是什么,否则不要备份 /proc, /sys, /tmp, 和 /run 目录下的伪文件系统(参见 第 1.2.12 节 “procfs 和 sysfs” 和 第 1.2.13 节 “tmpfs”)。它们是庞大且无用的数据。
:::
::: warning 注意
当备份数据的时候,你可能希望停止一些应用程序的守护进程例如 MTA参见第 6.2.4 节 “邮件传输代理 (MTA)”)。
:::
## 10.2.2. 实用备份套件
## 10.2.3. 原子更新
原子更新是指在更新过程中,如果更新失败,系统能够自动回滚到更新前的状态。这样就能够保证系统的稳定性。
原子更新尚未全量提供,目前只提供了部分功能,后续会逐步完善。
TODOhttps://github.com/linuxdeepin/deepin-upgrade-manager/tree/master/docs

View File

@ -0,0 +1,156 @@
# 10.3. 数据安全基础
数据安全基础设施是数据加密,讯息摘要和签名工具的集合。它们提供了一种安全的方式来保护数据,以防止数据被篡改或泄露。数据安全基础设施的目标是确保数据的完整性和机密性。
| 软件包 | 命令 | 说明 |
|-----------------|------------------|-----------------------------------|
| gnupg | gpg(1) | GNU 隐私卫士 - OpenPGP 加密和签名工具 |
| gpgv | gpgv(1) | GNU 隐私卫士 - 签名验证工具 |
| paperkey | paperkey(1) | 从 OpenPGP 私钥里面,仅仅导出私密信息 |
| cryptsetup | cryptsetup(8), … | dm-crypt 块设备加密支持 LUKS 工具 |
| coreutils | md5sum(1) | 计算与校验 MD5 讯息摘要 |
| coreutils | sha1sum(1) | 计算与校验 SHA1 讯息摘要 |
| openssl | openssl(1ssl) | 使用 "openssl dgst" (OpenSSL)计算信息摘要 |
| libsecret-tools | secret-tool(1) | 存储和取回密码 (CLI) |
| seahorse | seahorse(1) | 密钥管理工具(GNOME) |
参见 第 9.9 节 “数据加密提示” 的 dm-crypt 和 fscrypt它们通过 Linux 内核模块实现了自动数据加密架构
## 10.3.1. GnuPG
GnuPG 是一个开放源代码的加密工具它可以用来加密和签名文件以及对其进行验证。它支持对称加密和非对称加密。对称加密使用同一个密钥来加密和解密数据。非对称加密使用一对密钥一个用于加密另一个用于解密。非对称加密的安全性取决于密钥对的生成方式。GnuPG 支持多种密钥对生成方式,包括 RSA、DSA 和 ElGamal。GnuPG 也支持 OpenPGP 的标准,因此可以与其他 OpenPGP 实现进行交互。
GnuPG 的主要命令是 gpg(1)。它可以用来生成密钥对、加密和解密文件、签名和验证签名。GnuPG 还提供了一个 gpgv(1) 命令,用来验证签名。
| 命令 | 说明 |
|-----------------------------|----------------------------|
| gpg --gen-key | 生成一副新的密钥对 |
| gpg --gen-revoke my_user_ID | 生成 my_user_ID 的一份吊销证书 |
| gpg --edit-key user_ID | 交互式的编辑密钥,输入 "help" 来获得帮助信息 |
| gpg -o file --export | 把所有的密钥输出到文件 |
| gpg --import file | 从文件导入密钥 |
| gpg --send-keys user_ID | 发送 user_ID 的公钥到公钥服务器 |
| gpg --recv-keys user_ID | 从公钥服务器下载 user_ID 的公钥 |
| gpg --list-keys user_ID | 列出 user_ID 的所有密钥 |
| gpg --list-sigs user_ID | 列出 user_ID 的签字 |
| gpg --check-sigs user_ID | 检查 user_ID 密钥签字 |
| gpg --fingerprint user_ID | 检查 user_ID 的指纹 |
| gpg --refresh-keys | 更新本地密钥 |
信任码含义
| 代码 | 信任描述 |
|----|----------------|
| - | 没有所有者信任签名/没有计算 |
| e | 信任计算失败 |
| q | 没有足够的信息用于计算 |
| n | 从不信任这个键 |
| m | 最低限度的信任 |
| f | 完全信任 |
| u | 最终信任 |
如下命令上传我的 "xxxxxx" 公钥到主流的公钥服务器 "hkp://keys.gnupg.net"。
```Shell
gpg --keyserver hkp://keys.gnupg.net --send-keys xxxxxx
```
默认良好的公钥服务器在 "~/.gnupg/gpg.conf" (旧的位置在 "~/.gnupg/options")文件中设置,此文件包含了以下信息。
```Shell
keyserver hkp://keys.gnupg.net
```
从密钥服务器获取无名密钥。
```Shell
gpg --list-sigs --with-colons | grep '^sig.*\[User ID not found\]' |\
cut -d ':' -f 5| sort | uniq | xargs gpg --recv-keys
```
有一个错误在 OpenPGP 公钥服务器 (先前的版本 0.9.6),会将键中断为 2 个以上的子键。新的 gnupg (>1.2.1-2) 软件包能够处理这些中断的子键。参见 gpg(1) 下的 "--repair-pks-subkey-bug" 选项.
## 10.3.2. 在文件上使用 GnuPG
| 命令 | 说明 |
|-------------------------------------------------------|-------------------------------------------|
| gpg -a -s file | ASCII 封装的签名文件 file.asc |
| gpg --armor --sign file | 同上 |
| gpg --clearsign file | 生成明文签字信息 |
| gpg --clearsign file|mail foo@example.org | 发送一份明文签字到 foo@example.org |
| gpg --clearsign --not-dash-escaped patchfile | 明文签名的补丁文件 |
| gpg --verify file | 验证明文文件 |
| gpg -o file.sig -b file | 生成一份分离的签字 |
| gpg -o file.sig --detach-sig file | 同上 |
| gpg --verify file.sig file | 使用 file.sig 验证文件 |
| gpg -o crypt_file.gpg -r name -e file | 公钥加密,从文件里面获取名字,生成二进制的 crypt_file.gpg |
| gpg -o crypt_file.gpg --recipient name --encrypt file | 同上 |
| gpg -o crypt_file.asc -a -r name -e file | 公钥加密,从文件中获取名字,生成 ASCII 封装的 crypt_file.asc |
| gpg -o crypt_file.gpg -c file | 将文件对称加密到 crypt_file.gpg |
| gpg -o crypt_file.gpg --symmetric file | 同上 |
| gpg -o crypt_file.asc -a -c file | 对称加密,从文件到 ASCII 封装的 crypt_file.asc |
| gpg -o file -d crypt_file.gpg -r name | 解密 |
| gpg -o file --decrypt crypt_file.gpg | 同上 |
## 10.3.3. 在Mutt上使用 GnuPG
增加下面内容到 "~/.muttrc",在自动启动时,避免一个慢的 GnuPG在索引菜单中按 "S" 来允许它使用。
```Shell
macro index S ":toggle pgp_verify_sig\n"
set pgp_verify_sig=no
```
## 10.3.4. 在 Vim 中使用 GnuPG
gnupg 插件可以让你对扩展名为 ".gpg", ".asc", 和 ".ppg"的文件可靠的运行 GnuPG。[6]
```Shell
sudo aptitude install vim-scripts
echo "packadd! gnupg" >> ~/.vim/vimrc
```
## 10.3.5. MD5 校验和
md5sum(1) 提供了制作摘要文件的一个工具,它使用 rfc1321 里的方式制作摘要文件.
```Shell
md5sum foo bar >baz.md5
cat baz.md5
d3b07384d113edec49eaa6238ad5ff00 foo
c157a79031e1c40f85931829bc5fc552 bar
md5sum -c baz.md5
foo: OK
bar: OK
```
::: tip
MD5 校验和的 CPU 计算强度是比 GNU Privacy Guard (GnuPG) 加密签名要少的.在通常情况下,只有顶级的摘要文件才需要加密签名来确保数据完整性.
:::
## 10.3.6. 密码密钥环
在 deepin 系统提供了GUI图形用户界面工具 seahorse(1) 由GNOME开发管理密码安全的在密钥环 ~/.local/share/keyrings/* 里面保存它们。
`secret-tool`(1) 能够从命令行存储密码到钥匙环。
让我们存储 `LUKS/dm-crypt` 加密磁盘镜像用到的密码
```Shell
secret-tool store --label='LUKS passphrase for disk.img' LUKS my_disk.img
Password: ********
```
这个存储的密码能够被获取并给到其它程序,比如 cryptsetup(8)。
```Shell
secret-tool lookup LUKS my_disk.img | \
cryptsetup open disk.img disk_img --type luks --keyring -
sudo mount /dev/mapper/disk_img /mnt
```
::: tip
无论何时,你需要在一个脚本里面提供密码时,使用 secret-tool 来避免将密码直接硬编码到脚本里面
:::

View File

@ -0,0 +1,154 @@
# 10.4. Git
Git 是一个分布式版本控制系统它的目标是速度数据完整性和可扩展性。Git 是免费软件,遵循 GNU 通用公共许可证版本 2或更高版本发布
下面是一些和Git相关的软件包
| 软件包 | 命令 | 说明 |
|------------------|---------------------|-----------------------|
| git | git(7) | Git 快速、可扩展、分布式的版本控制系统 |
| gitk | gitk(1) | 有历史功能的 Git 图形仓库浏览器 |
| git-gui | git-gui(1) | Git 图形界面(无历史功能) |
| git-email | git-send-email(1) | 从 Git 用电子邮件发送收集到的补丁 |
| git-buildpackage | git-buildpackage(1) | 用 Git 自动制作 Debian 包 |
| dgit | dgit(1) | Debian 档案库的 git 交互操作 |
| imediff | git-ime(1) | 交互式的分开 git 提交的辅助工具 |
| stgit | stg(1) | 封装的 git (Python) |
| git-doc | N/A | Git 官方文档 |
| gitmagic | N/A | "Git 魔术",易于理解的 Git 手册 |
## 10.4.1. 配置 Git 客户端
你可以在 "`~/.gitconfig`" 里面设置几个Git接下来需要使用的全局配置比如说你的名字和电子邮件地址。
```Shell
git config --global user.name "Name Surname"
git config --global user.email yourname@example.com
```
你也可以按如下所示定制 Git 的默认行为。
```Shell
git config --global init.defaultBranch main
git config --global pull.rebase true
git config --global push.default current
```
如果你习惯使用 CVS 或 Subversion 命令,你也许希望设置如下几个命令别名。
```Shell
git config --global alias.ci "commit -a"
git config --global alias.co checkout
```
你能够通过如下方式检查你的全局配置:
```Shell
git config --global --list
```
当然你也可以为每个项目单独设置配置,这样的话,你就可以在不同的项目中使用不同的用户名和电子邮件地址了,只需要在项目的根目录下运行上面的命令(去掉--global即可。
## 10.4.2. 基本的 Git 命令
Git 操作涉及几个数据。
- 工作树目录保持面向用户的文件,你可以对它们做出改变。
- 需要被记录的改变,必须明确的被选择并暂存到索引。这是 git add 和 git rm 命令。
- 索引保持暂存文件。
- 在接下来的请求之前,暂存文件将被提交到本地仓库。这个是 git commit 命令。
- 本地仓库保持已经提交的的文件。
- Git 记录提交数据的链接历史并在仓库里面将它们作为分支组织。
- 本地仓库通过 git push 命令发送数据到远程仓库。
- 本地仓库能够通过 git fetch 和 git pull 命令从远程仓库接收数据。
- git pull 命令在 git fetch 后执行 git merge 或 git rebase 命令。
- 这里git merge 联合两个独立分支的历史结尾到一个点。(在没有定制的 git pull ,这个是默认的,同时对上游作者发布分支到许多人时,也是好的
- 这里git rebase 创建一个远程分支的序列历史的单个分支,跟着本地分支。(这是定制 pull.rebase true 的情况,对我们其余的用途有用。)
- 远程仓库保持已经提交的文件。
- 到远程仓库的通信,使用安全的通信协议,比如 SSH 或 HTTPS。
工作树是在 .git/ 目录之外的文件。在 .git/ 目录里面的文件,包括索引、本地仓库数据和一些 git 配置的文本文件。
这里是主要的 Git 命令概览。
| Git 命令 | 功能 |
|--------------------------------|----------------------------------------|
| git init | 创建(本地)存储库 |
| git clone URL | 克隆远程存储库到本地仓库工作目录树 |
| git pull origin main | 通过远程仓库 origin 更新本地 main 分支 |
| git add . | 增加工作树里面的文件仅作为预先存在的索引文件 |
| git add -A . | 增加工作树里面的所有文件到索引(包括已经删除的) |
| git rm filename | 从工作树和索引中删除文件 |
| git commit | 提交在索引中的暂存改变到本地存储库 |
| git commit -a | 添加工作树里的所有的改变到索引并提交它们到本地仓库(添加 + 提交) |
| git push -u origin branch_name | 使用本地 branch_name 分支更新远程仓库 origin初始启用 |
| git push origin branch_name | 使用本地 branch_name 分支更新远程仓库 origin随后调用 |
| git diff treeish1 treeish2 | 显示 treeish1 提交和 treeish2 提交的不同 |
| gitk | VCS 存储库分支历史树的图形界面显示 |
## 10.4.3. Git技巧
| Git 命令行 | 功能 |
|----------------------------------------------------------------------------|-------------------------------------------------------|
| gitk --all | 参看完整的 Git 历史和操作,比如重置 HEAD 到另外一个提交、挑选补丁、创建标签和分支…… |
| git stash | 得到一个干净的工作树,不会丢失数据 |
| git remote -v | 检查远程设置 |
| git branch -vv | 检查分支设置 |
| git status | 显示工作树状态 |
| git config -l | 列出 git 设置 |
| git reset --hard HEAD; git clean -x -d -f | 反转所有工作树的改变并完全清理它们 |
| git rm --cached filename | 反转由 git add filename 改变的暂存索引 |
| git reflog | 获取参考日志(对从删除的分支中恢复提交有用) |
| git branch new_branch_name HEAD@{6} | 从 reflog 信息创建一个新的分支 |
| git remote add new_remote URL | 增加一个由 URL 指向的远程仓库 new_remote |
| git remote remove origin | 移除远程仓库origin |
| git remote rename origin upstream | 远程仓库的名字从 origin 重命名到 upstream |
| git branch -u upstream/branch_name | 设置远程跟踪到远程仓库 upstream 和它的分支名 branch_name。 |
| git remote set-url origin https://foo/bar.git | 改变 origin 的 URL |
| git remote set-url --push upstream DISABLED | 禁止推送到 upstream编辑 .git/config 来重新启用) |
| git checkout -b topic_branch ; git push -u topic_branch origin | 制作一个新的 topic_branch 并把它推送到 origin |
| git branch -m oldname newname | 本地分支改名 |
| git push -d origin branch_to_be_removed | 删除远程分支(新的方式) |
| git push origin :branch_to_be_removed | 删除远程分支(老的方式) |
| git checkout --orphan unconnected | 创建一个新的 unconnected 分支 |
| git fetch upstream foo:upstream-foo | 创建本地可能是孤立的upstream-foo 分支作为upstream 仓库 foo 分支的一个拷贝 |
| git rebase -i origin/main | 从 origin/main 重新排序、删除、压缩提交到一个干净的分支历史 |
| git reset HEAD^; git commit --amend | 压缩最后两个提交为一个 |
| git checkout topic_branch ; git merge --squash topic_branch | 压缩整个 topic_branch 到一个提交 |
| git fetch --unshallow --update-head-ok origin '+refs/heads/*:refs/heads/*' | 反转一个浅克隆到一个所有分支的完整克隆 |
| git ime | 分开最后的提交到一系列单个逐一文件的小提交。(要求 imediff |
| git repack -a -d; git prune | 本地仓库重新打包到一个单独的包中(这可能限制从删除分支里面恢复丢失数据等机会) |
::: danger 警告
⚠️ 不要使用带空格的标签字符串。即使一些工具,如 gitk(1) 允许你使用它,但会阻碍其它 git 命令。
:::
::: warning 注意
如果一个本地分支推送到一个已经变基或者压缩过的仓库,推送这样的分支有风险,并要求 --force 选项。这通常对 main 分支来说不可接受,但对于一个移植到 main 分支前的特定分支,是可以接受的。
:::
::: tip
如果有一个可执行文件 git-foo 在路径环境变量 $PATH 里面,在命令行输入没有中划线的 "git foo",则将调用 git-foo.这是 git 命令的一个特性。
:::
## 10.4.4. Git参考资料
[Git - 简明指南](https://rogerdudler.github.io/git-guide/index.zh.html) 「推荐」
[Git - 官方文档](https://git-scm.com/doc)
[Git - 官方手册](https://git-scm.com/docs)
[廖雪峰老师博客](https://www.liaoxuefeng.com/wiki/896043488029600) 「推荐」
## 10.4.5. GitHub
[GitHub - 官方网站](github.com)
GitHub是一个面向开发者的基于Web的Git版本控制仓库托管服务。它提供了分布式版本控制和源代码管理SCM功能使开发者能够在全球范围内共同协作编写代码和协同开发项目。
在GitHub上开发者可以创建存储库repository来存储其代码和其他项目文件并与其他开发者共享和协作。GitHub还提供了一系列工具和功能包括问题跟踪、代码审核、项目管理、团队协作、持续集成和部署等以帮助开发者更有效地开发和管理项目。
GitHub还是一个开源社区许多项目都是开放源代码的。这使得开发者可以访问和使用其他人的代码了解其他人的代码实践并在这些项目上进行贡献和协作。由于其广泛的社区和丰富的功能GitHub已成为开发者社区的重要组成部分并被广泛用于开源和商业项目的协作和管理。
deepin的开发者们也在GitHub上开发和维护着deepin的各个项目欢迎大家加入我们的开发者社区。
[github上的linuxdeepin](https://www.github.com/linuxdeepin)

View File

@ -1,6 +1,6 @@
# 11.3. dotnet编程环境搭建
目前 dotnet sdk (非 framework) 对于 GNU/Linux 几个主流发行版都具有较好的支持, 现给出微软官方文档链接, 以 debian 发行版作为 deepin 目前的操作指南
目前 dotnet sdk (非 framework) 对于 GNU/Linux 几个主流发行版都具有较好的支持, 现给出微软官方文档链接, 以 Debian 发行版作为 deepin 目前的操作指南
更多测试在进行中, 若有需要特殊操作, 将会记录在本文档中方便 dotnet 开发者参考
微软官方文档链接: [简体中文](https://learn.microsoft.com/zh-cn/dotnet/core/install/linux-debian) [English (US)](https://learn.microsoft.com/en-us/dotnet/core/install/linux-debian)

View File

@ -20,7 +20,7 @@
::: warning
不要从任何的混合源中安装软件包。它可能会打破软件包的一致性,这需要你要深厚的系统管理知识,例如 ABI 编译器、库版本和解释器特性等等。
比如不要混用deepin v20和 v23的源也不能混用debian和deepin源如果因为混源导致任何问题请自行承担社区将不会为此花费精力。
比如不要混用deepin v20和 v23的源也不能混用Debian和deepin源如果因为混源导致任何问题请自行承担社区将不会为此花费精力。
:::
deepin 系统默认只会提供软件的 stable 版本,除非你加入了测试计划,并且知晓相关风险。我的意思是,最好避免下列的一些行为作为一项预防措施,直到你十分了解 deepin 系统。下面有一些提醒。

View File

@ -85,7 +85,7 @@ aptitude 命令是最通用的基于 APT 的软件包管理工具。
## 2.2.3. aptitude 的交互式使用
此处不会详细解释其使用方式详见deepin wiki 以及 debian对其介绍
此处不会详细解释其使用方式详见deepin wiki 以及 Debian对其介绍
aptitude按键绑定

View File

@ -1,6 +1,6 @@
# 为deepin添加来自debian或者ubuntu的软件包
目前deepin v23需要自行维护软件源如果你想要添加来自debian或者ubuntu的软件包可以参考下面的方法。
目前deepin v23需要自行维护软件源如果你想要添加来自Debian或者ubuntu的软件包可以参考下面的方法。
::: warning
不要从任何的混合源中安装软件包。它可能会打破软件包的一致性,这需要你要深厚的系统管理知识,例如 ABI 编译器、库版本和解释器特性等等。
@ -72,9 +72,9 @@ apt会自动解决依赖关系安装完成后可以使用`neofetch`命令
## 从ubuntu添加软件包
debian类似ubuntu也有一个软件包搜索网站
Debian类似ubuntu也有一个软件包搜索网站
[packages.ubuntu.com](https://packages.ubuntu.com/)
在这里搜索软件包,剩下的步骤和debian类似。
在这里搜索软件包,剩下的步骤和Debian类似。
## 从其他源添加软件包
@ -85,7 +85,7 @@ apt会自动解决依赖关系安装完成后可以使用`neofetch`命令
如果你想要为deepin贡献来自其他发行版的软件包可以参考上述步骤进行打包安装验证确定没有问题后可以提交到deepin-community仓库deepin社区会进行审核审核通过后会合并到deepin仓库中。
::: tip
建议软件包来源为debian或者自己打包的软件包这样可以保证软件包的一致性。
建议软件包来源为Debian或者自己打包的软件包这样可以保证软件包的一致性。
:::
具体要求在[deepin-wiki](https://wiki.deepin.org/zh/01_deepin%E9%85%8D%E5%A5%97%E7%94%9F%E6%80%81/01_deepin%E5%85%A5%E9%97%A8/02_%E5%BC%80%E5%8F%91%E7%9B%B8%E5%85%B3/02_%E8%B4%A1%E7%8C%AE%E6%8C%87%E5%8D%97/deepin-community%E5%8D%8F%E4%BD%9C%E6%B5%81%E7%A8%8B)

View File

@ -18,7 +18,7 @@ BIOS是计算机的基本输入输出系统它是计算机的第一级启动
在我们deepin系统中引导加载程序是grub2由上一级UEFI加载。grub2加载内核所以你可以在grub中选择不同的内核启动如果我们在系统里面升级了内核就可以通过grub来选择启动新的内核。
GRUB2 首先读取 ESP 分区,使用 "/boot/efi/EFI/debian/grub.cfg"里面 search.fs_uuid 指定的 UUID 来确定 GRUB2 菜单配置文件 "/boot/grub/grub.cfg" 所在的分区。
GRUB2 首先读取 ESP 分区,使用 "/boot/efi/EFI/deepin/grub.cfg"里面 search.fs_uuid 指定的 UUID 来确定 GRUB2 菜单配置文件 "/boot/grub/grub.cfg" 所在的分区。
::: danger 别动
如果你不理解grub的配置文件不要随意修改否则可能会导致系统无法启动。对于一般用户我们推荐使用deepin的启动管理器来管理启动项你可以在控制中心找到它。

View File

@ -12,7 +12,7 @@ deepin 系统本身是一个变化的事物。这导致其文档难于及时更
## 2. 什么是deepin
deepin(原名Linux deepin)致力于为全球用户提供美观易用安全可靠的Linux发行版。deepin项目于2008年发起并在2009年发布了以linux deepin为名称的第一个版本。2014年4月更名为Deepin在中国常被称为“深度操作系统“。
deepin(原名Linux deepin)致力于为全球用户提供美观易用安全可靠的Linux发行版。deepin项目于2008年发起并在2009年发布了以linux deepin为名称的第一个版本。2014年4月更名为deepin在中国常被称为“深度操作系统“。
deepin基于Qt技术开发了深度桌面环境和深度控制中心并且开发了一系列面向日常使用的深度特色应用如深度商店、深度截图、深度音乐、深度影院等。深度操作系统非常注重易用的体验和美观的设计对于多数用户来说它易于安装和使用能方便地进行工作与娱乐。
@ -51,7 +51,7 @@ deepin基于Qt技术开发了深度桌面环境和深度控制中心并且开
你必须自己从以下原始材料查找解决方案。
- Debian 网站 [https://www.debian.org 上的通用信息](https://www.debian.org) 注意从deepin v23开始 deepin将过度到独立上游部分debian网站提供的信息可能不适用请注意甄别
- Debian 网站 [https://www.debian.org 上的通用信息](https://www.debian.org) 注意从deepin v23开始 deepin将过度到独立上游部分Debian网站提供的信息可能不适用请注意甄别
- `/usr/share/doc/package_name` 目录下的文档