Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 15 additions & 9 deletions docs/Ch01/supplement.md
Original file line number Diff line number Diff line change
Expand Up @@ -544,26 +544,32 @@ $ sudo apt-get install ubuntu-desktop

## 虚拟机网卡的“模式” {#vm-nic-modes}

在虚拟机中使用网络设备时,会发现虚拟机一般有三种网卡模式,分别叫做 `Bridged`(桥接)、`NAT`(网络地址转换)、`Host only`(仅主机)。
在虚拟机中使用网络设备时,会发现虚拟机一般有三种网卡模式,分别叫做 `Bridged`(桥接)、`NAT`(网络地址转换)、`Host only`(仅主机)。虚拟机中的网络设备,是虚拟网卡(Virtual NIC),其背后需要与某个网络连接,才能实现通信功能。

虚拟机中的网络设备,是虚拟网卡(Virtual NIC),其背后需要与某个网络连接,才能实现通信功能。
在安装虚拟机前,设备上的网络通常是这样的:

### 桥接模式
```mermaid
flowchart TD
HSP[主机上的程序] --> HS
HS[主机] -->|虚拟网卡 10.1.2.3| IN[外部网络]
```

### 桥接模式 {#bridge-mode}

在这种模式下,虚拟机程序(例如 VMWare)会在主机上创建一个虚拟交换机。虚拟交换机上,接入了原来的物理网卡(例如有线网卡或者 Wi-Fi 适配器等)、虚拟机中安装的虚拟网卡、主机上的虚拟网卡。在这种配置下,虚拟机和主机都暴露在 Internet 下,分别使用**不同的 IP**。
在这种模式下,虚拟机程序(例如 VMWare)会在主机上创建一个虚拟交换机。虚拟交换机上,接入了原来的物理网卡(例如有线网卡或者 Wi-Fi 适配器等)、虚拟机中安装的虚拟网卡、主机上的虚拟网卡。在这种配置下,虚拟机和主机都暴露在外部网络下,分别使用**不同的 IP**。

```mermaid
flowchart TD
VMP1[虚拟机上的程序] --> VM1
VMP2[虚拟机上的程序] --> VM2
HSP[主机上的程序] --> HS
VM1[虚拟机] -->|虚拟网卡 10.1.2.3| SW[虚拟交换机]
VM2[虚拟机] -->|虚拟网卡 10.1.2.4| SW[虚拟交换机]
HS[主机] -->|虚拟网卡 10.1.2.5| SW[虚拟交换机]
VM1[虚拟机] -->|虚拟网卡 10.1.2.4| SW[虚拟交换机]
VM2[虚拟机] -->|虚拟网卡 10.1.2.5| SW[虚拟交换机]
HS[主机] -->|虚拟网卡 10.1.2.3| SW[虚拟交换机]
SW -->|物理网卡| IN[外部网络]
```

### 网络地址转换模式
### 网络地址转换模式 {#nat-mode}

与桥接模式不同,网络地址转换下,虚拟机和主机**共用一个 IP**,虚拟机之间用虚拟交换机连接。从外部网络看来,虚拟机上的程序和主机上的程序发出的请求是一样的。

Expand All @@ -578,7 +584,7 @@ flowchart TD
HS[主机] -->|物理网卡 10.1.2.3| IN[外部网络 10.x.x.x]
```

### 仅主机模式
### 仅主机模式 {#hostonly-mode}

仅主机模式类似 NAT,但是虚拟机不能与外部网络通信。

Expand Down
89 changes: 89 additions & 0 deletions docs/Ch05/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -455,6 +455,95 @@ graph LR
- `/var/run`:存储程序运行时的数据(部分发行版会将该目录符号链接到 `/run` 目录)。
- `/var/spool`:存储「等待进一步处理」的程序数据。

## 列出文件系统项目 {#list-objects}

经常我们需要在 Shell 中列出某个目录下的项目(子目录和文件)。`ls` 命令是最常见的用来列出文件系统项目的命令,`ls -la` 则可以显示隐藏文件(`-a`)和更详细的信息(`-l`)。但是,`ls` 只能显示某个目录下的文件和子目录,并不会深入子目录内部继续检查。下面介绍几个命令,常用于获取这些信息。

### `find` 命令 {#cmd-find}

`find` 命令可以列出某个目录下所有的目录和文件,并**递归地**进入子目录。基本用法是

```shell
$ find /etc
/etc
/etc/analog.cfg
/etc/hosts.deny
/etc/initramfs-tools
/etc/initramfs-tools/initramfs.conf
/etc/initramfs-tools/hooks
/etc/initramfs-tools/conf.d
/etc/initramfs-tools/conf.d/resume
/etc/initramfs-tools/modules
/etc/initramfs-tools/update-initramfs.conf
... (省略)
```

可以看到,`find` 命令将列出指定的目录下的文件和子目录名称,在遇到子目录时立即进入目录并递归地执行上面的操作。

该命令的一个很有用的用法是对每一个文件都执行某个命令(例如 `md5sum`):

```shell
find . -type f -exec md5sum {} \;
```

这里,`find .` 是指对当前目录(`.`)进行 `find`,并只列出文件(`-type f`)。`-exec` 后面的内容是要执行的命令,其中 `{}` 会被替换成找到的对象(文件、目录)的路径,`\;` 表示对每个对象都执行一次给定的命令,即实际运行的是

```shell
md5sum file1
md5sum file2
md5sum file3
...
```

如果将 `\;` 换成 `+`,那么就是将文件名称收集起来一并交给要执行的命令,即

```shell
md5sum file1 file2 file3 ...
```

### `du` 命令 {#cmd-du}

`du` 命令可以统计文件和目录的大小。目录的大小是无法直接获取的,需要统计里面所有的文件和子目录的大小之后加和才能得到。`du` 命令的输出类似这样:

```shell
$ du -h /etc/
4.0K /etc/initramfs-tools/hooks
8.0K /etc/initramfs-tools/conf.d
4.0K /etc/initramfs-tools/scripts/local-premount
4.0K /etc/initramfs-tools/scripts/nfs-premount
... (省略)
4.0K /etc/initramfs-tools/scripts/panic
4.0K /etc/initramfs-tools/scripts/local-top
44K /etc/initramfs-tools/scripts
72K /etc/initramfs-tools
12K /etc/udisks2
16K /etc/fonts/conf.d
60K /etc/fonts/conf.avail
84K /etc/fonts
```

由于前面说到的原因,`du` 需要先递归进入子目录,处理完其中所有的项目之后,才能回到上层目录并显示上层目录的总大小。类似 `ls -h`,这里的 `-h` 表示以人类可读的方式进行显示,`-b` 则可以显示字节数,`-a` 可以使得输出包含文件的大小(默认只显示各层级目录的大小)。

### `ncdu` 命令 {#cmd-ncdu}

`ncdu` 命令可以以图形化和交互式的方式显示目录的内容和大小,并可以用左右方向键浏览目录,类似 Windows 的文件资源管理器。这非常便于观察哪个目录占用了较大的磁盘空间。

```plain
ncdu 1.18 ~ Use the arrow keys to navigate, press ? for help
--- /home/xxxxxx(略去) -----------------
/..
53.1 MiB [##########] /main
45.4 MiB [######## ] Contents-riscv64.gz
40.6 MiB [####### ] /universe
580.0 KiB [ ] /multiverse
44.0 KiB [ ] /restricted
8.0 KiB [ ] InRelease
8.0 KiB [ ] Release
4.0 KiB [ ] Release.gpg

Total disk usage: 139.7 MiB Apparent size: 139.6 MiB Items: 29
```

## 思考题 {#questions}

!!! question "nobody 用户"
Expand Down