Skip to content

Commit cdbcf54

Browse files
authored
Merge pull request #78 from ustclug/luojh-fix
Luojh fix #76
2 parents 9e71990 + 6e61916 commit cdbcf54

File tree

2 files changed

+104
-9
lines changed

2 files changed

+104
-9
lines changed

docs/Ch01/supplement.md

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -544,26 +544,32 @@ $ sudo apt-get install ubuntu-desktop
544544

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

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

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

551-
### 桥接模式
551+
```mermaid
552+
flowchart TD
553+
HSP[主机上的程序] --> HS
554+
HS[主机] -->|虚拟网卡 10.1.2.3| IN[外部网络]
555+
```
556+
557+
### 桥接模式 {#bridge-mode}
552558

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

555561
```mermaid
556562
flowchart TD
557563
VMP1[虚拟机上的程序] --> VM1
558564
VMP2[虚拟机上的程序] --> VM2
559565
HSP[主机上的程序] --> HS
560-
VM1[虚拟机] -->|虚拟网卡 10.1.2.3| SW[虚拟交换机]
561-
VM2[虚拟机] -->|虚拟网卡 10.1.2.4| SW[虚拟交换机]
562-
HS[主机] -->|虚拟网卡 10.1.2.5| SW[虚拟交换机]
566+
VM1[虚拟机] -->|虚拟网卡 10.1.2.4| SW[虚拟交换机]
567+
VM2[虚拟机] -->|虚拟网卡 10.1.2.5| SW[虚拟交换机]
568+
HS[主机] -->|虚拟网卡 10.1.2.3| SW[虚拟交换机]
563569
SW -->|物理网卡| IN[外部网络]
564570
```
565571

566-
### 网络地址转换模式
572+
### 网络地址转换模式 {#nat-mode}
567573

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

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

581-
### 仅主机模式
587+
### 仅主机模式 {#hostonly-mode}
582588

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

docs/Ch05/index.md

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -455,6 +455,95 @@ graph LR
455455
- `/var/run`:存储程序运行时的数据(部分发行版会将该目录符号链接到 `/run` 目录)。
456456
- `/var/spool`:存储「等待进一步处理」的程序数据。
457457

458+
## 列出文件系统项目 {#list-objects}
459+
460+
经常我们需要在 Shell 中列出某个目录下的项目(子目录和文件)。`ls` 命令是最常见的用来列出文件系统项目的命令,`ls -la` 则可以显示隐藏文件(`-a`)和更详细的信息(`-l`)。但是,`ls` 只能显示某个目录下的文件和子目录,并不会深入子目录内部继续检查。下面介绍几个命令,常用于获取这些信息。
461+
462+
### `find` 命令 {#cmd-find}
463+
464+
`find` 命令可以列出某个目录下所有的目录和文件,并**递归地**进入子目录。基本用法是
465+
466+
```shell
467+
$ find /etc
468+
/etc
469+
/etc/analog.cfg
470+
/etc/hosts.deny
471+
/etc/initramfs-tools
472+
/etc/initramfs-tools/initramfs.conf
473+
/etc/initramfs-tools/hooks
474+
/etc/initramfs-tools/conf.d
475+
/etc/initramfs-tools/conf.d/resume
476+
/etc/initramfs-tools/modules
477+
/etc/initramfs-tools/update-initramfs.conf
478+
... (省略)
479+
```
480+
481+
可以看到,`find` 命令将列出指定的目录下的文件和子目录名称,在遇到子目录时立即进入目录并递归地执行上面的操作。
482+
483+
该命令的一个很有用的用法是对每一个文件都执行某个命令(例如 `md5sum`):
484+
485+
```shell
486+
find . -type f -exec md5sum {} \;
487+
```
488+
489+
这里,`find .` 是指对当前目录(`.`)进行 `find`,并只列出文件(`-type f`)。`-exec` 后面的内容是要执行的命令,其中 `{}` 会被替换成找到的对象(文件、目录)的路径,`\;` 表示对每个对象都执行一次给定的命令,即实际运行的是
490+
491+
```shell
492+
md5sum file1
493+
md5sum file2
494+
md5sum file3
495+
...
496+
```
497+
498+
如果将 `\;` 换成 `+`,那么就是将文件名称收集起来一并交给要执行的命令,即
499+
500+
```shell
501+
md5sum file1 file2 file3 ...
502+
```
503+
504+
### `du` 命令 {#cmd-du}
505+
506+
`du` 命令可以统计文件和目录的大小。目录的大小是无法直接获取的,需要统计里面所有的文件和子目录的大小之后加和才能得到。`du` 命令的输出类似这样:
507+
508+
```shell
509+
$ du -h /etc/
510+
4.0K /etc/initramfs-tools/hooks
511+
8.0K /etc/initramfs-tools/conf.d
512+
4.0K /etc/initramfs-tools/scripts/local-premount
513+
4.0K /etc/initramfs-tools/scripts/nfs-premount
514+
... (省略)
515+
4.0K /etc/initramfs-tools/scripts/panic
516+
4.0K /etc/initramfs-tools/scripts/local-top
517+
44K /etc/initramfs-tools/scripts
518+
72K /etc/initramfs-tools
519+
12K /etc/udisks2
520+
16K /etc/fonts/conf.d
521+
60K /etc/fonts/conf.avail
522+
84K /etc/fonts
523+
```
524+
525+
由于前面说到的原因,`du` 需要先递归进入子目录,处理完其中所有的项目之后,才能回到上层目录并显示上层目录的总大小。类似 `ls -h`,这里的 `-h` 表示以人类可读的方式进行显示,`-b` 则可以显示字节数,`-a` 可以使得输出包含文件的大小(默认只显示各层级目录的大小)。
526+
527+
### `ncdu` 命令 {#cmd-ncdu}
528+
529+
`ncdu` 命令可以以图形化和交互式的方式显示目录的内容和大小,并可以用左右方向键浏览目录,类似 Windows 的文件资源管理器。这非常便于观察哪个目录占用了较大的磁盘空间。
530+
531+
```plain
532+
ncdu 1.18 ~ Use the arrow keys to navigate, press ? for help
533+
--- /home/xxxxxx(略去) -----------------
534+
/..
535+
53.1 MiB [##########] /main
536+
45.4 MiB [######## ] Contents-riscv64.gz
537+
40.6 MiB [####### ] /universe
538+
580.0 KiB [ ] /multiverse
539+
44.0 KiB [ ] /restricted
540+
8.0 KiB [ ] InRelease
541+
8.0 KiB [ ] Release
542+
4.0 KiB [ ] Release.gpg
543+
544+
Total disk usage: 139.7 MiB Apparent size: 139.6 MiB Items: 29
545+
```
546+
458547
## 思考题 {#questions}
459548

460549
!!! question "nobody 用户"

0 commit comments

Comments
 (0)