Skip to content

Commit 882552b

Browse files
committed
Ch05: Fix new quiz
Linux 101 is not Debian-based, so this must be modified.
1 parent 9f885be commit 882552b

2 files changed

Lines changed: 29 additions & 26 deletions

File tree

docs/Ch05/index.md

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -311,8 +311,6 @@ drwxrwxr-x 2 ustc ustc 4096 Feb 3 22:38 a_folder
311311
(可以执行了)
312312
```
313313

314-
<!-- 再次强调,**在运行任何来自网络的程序或脚本前,请先检查其内容**,特别是使用高权限的用户执行时。 -->
315-
316314
## 文件系统层次结构 {#fhs}
317315

318316
相信到现在你应该已经发现了:Linux 下文件系统的结构和 Windows 的很不一样。在 Windows 中,分区以盘符的形式来标识(如「C 盘」、「D 盘」),各个分区的分界线是很明确的。在系统所在的分区(一般为 C 盘)中,存储着程序文件 (`Program Files`),系统运行需要的文件 (`Windows`),用户文件 (`Users`) 等。这种组织形式源于 DOS 和早期的 Windows,并一直传承下来。
@@ -384,7 +382,7 @@ drwxrwxr-x 2 ustc ustc 4096 Feb 3 22:38 a_folder
384382

385383
`/sbin`
386384

387-
: 存储用于系统管理,以及仅允许 `root` 用户使用的程序。如 `fsck`(文件系统修复程序)、`reboot`(重启系统)等。
385+
: 存储用于系统管理,以及仅允许 `root` 用户使用的程序。如 `fsck`(文件系统修复程序)、`reboot`(重启系统)`useradd`(添加用户)等。
388386

389387
`/srv`
390388

@@ -442,9 +440,33 @@ drwxrwxr-x 2 ustc ustc 4096 Feb 3 22:38 a_folder
442440

443441
当需要浏览仅 `root` 用户可查看的目录时,很多人的第一反应是 `sudo cd xxx`,但最终失败了。尝试解释这样做不可行的原因。
444442

445-
!!! question "普通用户运行 `reboot`"
443+
!!! question "Debian 与 Ubuntu 的区别之一:普通用户运行 `useradd` 等命令"
444+
445+
提示:可以在按照[第八章](../Ch08/index.md)配置 Docker 后使用如下命令体验 Debian:
446+
447+
```console
448+
$ sudo docker run -it --rm debian:bookworm
449+
```
450+
451+
在进入容器后,使用 `useradd`(`adduser` 也可以)创建一个新用户并进入:
452+
453+
```console
454+
# useradd -m test
455+
# su - test
456+
$ useradd
457+
-sh: 1: useradd: not found
458+
```
459+
460+
而相同的操作在 Ubuntu 容器(`ubuntu:noble`)中可以找到 `useradd` 这个命令:
461+
462+
```console
463+
$ useradd
464+
Usage: useradd [options] LOGIN
465+
useradd -D
466+
useradd -D [options]
467+
```
446468

447-
前面说过,`reboot` 这类程序只能由 `root` 用户运行。为何普通用户在 Shell 中直接输入 `reboot` 不能重启系统
469+
虽然说 `useradd` 这种程序只能 root 运行,但是以上差异是为什么呢
448470

449471
## 引用来源 {#references .no-underline}
450472

docs/Ch05/solution.md

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -71,27 +71,8 @@ icon: material/tooltip-question
7171

7272
那么 `cd` 可以实现成(外置的)程序吗?答案是不能:因为切换工作目录的系统调用 (`chdir()`) 只能切换当前的程序的工作目录。如果实现成了外置的程序,那么切换完退出之后,shell 的工作目录仍然不会变化。
7373

74-
## 普通用户运行 `reboot`
74+
## Debian 与 Ubuntu 的区别之一:普通用户运行 `useradd` 等命令
7575

7676
??? info "解答"
7777

78-
这里可能不止权限不足的问题。事实上,在 Debian 系统上,用普通用户执行 `reboot`,你会看到:
79-
80-
```console
81-
$ reboot
82-
-bash: reboot: command not found
83-
```
84-
85-
这是为什么呢?这是因为,`reboot` 存在于 `/sbin` 下,而这个目录并不在普通用户登录后默认的 `PATH` 环境变量中(但 Ubuntu 下则不一样:`/sbin` 也在普通用户的 `PATH` 环境变量中)。也就是说,Shell 并不会去 `/sbin` 中查找 `reboot`,自然就会提示 `command not found`。如果执行
86-
87-
```console
88-
$ /sbin/reboot
89-
```
90-
91-
或者
92-
93-
```console
94-
$ systemctl reboot -i # 另一种重启的方法
95-
```
96-
97-
就会因为有其他用户已登录,或者权限不足而失败。其他的命令也是类似的原因,只能由 `root` 执行。
78+
这里可能不止权限不足的问题。这是因为,`useradd` 存在于 `/sbin` 下,而在 Debian 中,这个目录并不在普通用户登录后默认的 `PATH` 环境变量中(但 Ubuntu 下则不一样:`/sbin` 也在普通用户的 `PATH` 环境变量中)。也就是说,Shell 并不会去 `/sbin` 中查找 `useradd`,自然就会提示 `command not found`。如果改成完整路径(`/sbin/useradd`)就可以了。

0 commit comments

Comments
 (0)