File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff 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
Original file line number Diff line number Diff 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`)就可以了。
You can’t perform that action at this time.
0 commit comments