云计算百科
云计算领域专业知识百科平台

Linux Day9——复习第一部分(实操产出)

type: learning-note

title: Linux:块 1 产出日——权限与进程实操

date: 2026-09-19

description: 21 条核心命令默写补漏(缺 10 条)、脱离教程完成五项实操(建用户组+建用户 / 改权限数字法与字母法 / 改所有者 / 查进程+kill / 写 crontab)、踩过六个坑、rwx 对文件与目录的区别、nano 的正确用法

 

# 2026-09-19 学习笔记

 

> 📌 GitHub:https://github.com/AR-firefly

 

## 笔记区

 

### 一、21 条核心命令:默写 → 补漏

 

**默出来 11 条**:`pwd` `ls` `cd` `mkdir` `touch` `cp` `mv` `rm` `cat` `head` `man`

 

**没默出来 / 默错 10 条**:`less` `tail` `find` `ps` `kill` `top` `chmod` `chown` `crontab`(外加一个关于 `–help` 的疑问)

 

补讲要点:

 

| 命令 | 干什么 | 关键记忆点 |

| ——— | —————— | ———————————————————————————————————————————————— |

| `less` | 分页看文件 | 名字来自「less is more」梗,是更老的 `more` 的改进版;**按 `q` 退出**(跟 `man` 是同一个阅读器) |

| `tail` | 看文件**结尾** | `head` 是头、`tail` 是尾,**它俩是一对**;`-n 20` 指定行数;**`-f`**(follow)跟着看新追加的行,排障看日志靠它 |

| `find` | 在**磁盘上找文件** | 跟 `grep` 分工记牢:**`grep` 找文件里的内容,`find` 找文件本身**。用法 `find /etc -name "*.conf"` |

| `ps` | 看进程 | **p**rocess **s**tatus;`ps aux` 看全部进程,**不带参数只看当前终端** |

| `kill` | 结束进程 | **默认发 SIGTERM(15)**;`kill -9` 才是强杀。名字写法等价:`-9` = `-KILL` = `-SIGKILL` |

| `top` | **实时**看进程 | 跟 `ps` 的区别:`ps` 是**拍一张照**,`top` 是**看直播**;`q` 退出 |

| `chmod` | 改**权限位** | **ch**ange **mod**e。管「能干什么」 |

| `chown` | 改**所有者** | **ch**ange **own**er。管「是谁的」 |

| `crontab` | 定时任务表 | **`cron` 是后台干活的程序(守护进程),`crontab` 是给它排活的命令**(cron **tab**le);`-e` 编辑(edit)、`-l` 列出(list)、`-r` 删除(remove) |

| `man` | 查手册 | **`–help` 不是命令,是「选项」**。`man ls` 是系统给的完整手册,`ls –help` 是命令自带的简短用法 |

 

#### `kill` 这条栽了个跟头(重点)

 

**原来的错误理解**:「默认是 9(不强制、会等它跑完),强制是 15」——**数字和含义反了**。

 

**怎么撞破的**:起一个 `sleep 300 &`,然后 `kill <PID>`(不带数字),**它立刻就死了**,一秒没多跑:

 

```

$ sleep 300 &

[1] 11503

$ kill 11503

[1]+ Terminated sleep 300

$ ps -p 11503

    PID TTY TIME CMD

```

 

`ps` 只剩表头 = 进程已经不存在了。而那句 `Terminated` **本身就是答案**——`TERM` = **term**inate。

 

`man kill` 原文:`The default signal for kill is TERM.`

 

| 信号 | 编号 | 名字含义 | 行为 |

| ——– | —— | ——————— | ———————————————————————- |

| **默认** | **15** | **TERM**(terminate) | 「**请你结束**」——进程**可以自己决定**:直接退,或者先存盘、关文件再退 |

| `-9` | 9 | **KILL** | 「**内核直接干掉你**」——**不能被忽略、不能被捕获**,没得商量 |

 

**为什么 `kill -9` 常见**:有些进程卡死了、根本不理会 15,那时默认信号杀不掉,只能上 9。

 

**记忆钩子**:**大的是客气话(15 温柔),小的是动手(9 强杀)**——这个别扭感本身就是钩子。

 

(`kill` 默认发 TERM 是有道理的:**「请进程好好结束」才是安全的默认**,万一它正在写文件,得给机会收拾干净。)

 

 

### 二、五项实操

 

完整的命令与输出见 `kb/产出/块1-权限与进程实操记录.md`,这里只留骨架。

 

#### 2.1 建用户组 + 建用户

 

```bash

sudo groupadd s1prod # 建组

sudo useradd -m -G s1prod s1prod2 # 建用户:-m 建家目录,-G 加附加组

```

 

**验证三件套**:

 

```bash

grep s1prod /etc/group

id s1prod2

ls /home

```

 

**怎么读**:

 

– `/etc/group` 一行 4 段:`组名:密码占位:gid:成员列表`,**最后那格是附加成员**

– `id` 的 **`gid=`** 是**主组**(一个用户只有一个);**`groups=`** 是**全部组** = 主组 + 所有附加组

– **主组从哪来**:`useradd` 不带 `-g` 时**默认给新用户建一个同名主组**(本机开关 `/etc/login.defs:192` 写着 `USERGROUPS_ENAB yes`)

 

#### 2.2 改权限(数字法 + 字母法)

 

```bash

chmod 750 perm-test # 数字法

chmod g-x perm-test # 字母法:给同组减掉执行

chmod u+x perm-test # 字母法:给属主加回执行

```

 

**字母法的铁律——顺序是死的**:

 

```

chmod g – x 文件

        ↑ ↑ ↑

     ①对谁 ②加减 ③什么权限

```

 

– ① 对谁:`u` 属主 / `g` 同组 / `o` 其他人 / `a` 所有人(**不写 = 默认所有人**)

– ② 加减:`+` 加 / `-` 减

– ③ 什么权限:`r` / `w` / `x`

 

**验证"目录没有 `x` 就进不去"**:`chmod 400` 之后 `cd` 报 `Permission denied`。

 

#### 2.3 改所有者

 

```bash

sudo chown s1prod2:s1prod perm-test # 语法:换成谁:换成哪个组 文件(冒号不能省)

```

 

**改完之后的一个直接后果**:原属主(`ar-26710`)**连改权限都做不到了**:

 

```bash

$ chmod 750 perm-test

chmod: Operation not permitted (os error 1)

```

 

**规则**:**改权限只认两件事——你是属主,或者你是 root。** 跟文件当前的权限位无关。

 

#### 2.4 查进程 → 找 PID → kill

 

```bash

$ sleep 300 &

[1] 12807

$ ps

    PID TTY TIME CMD

   7444 pts/0 00:00:01 bash

  12807 pts/0 00:00:00 sleep

  12817 pts/0 00:00:00 ps

$ kill 12807

```

 

**`ps` 四列**:`PID` 进程号 / `TTY` 绑在哪个终端 / **`TIME` 累计占用 CPU 的时间(不是"跑了多久")** / `CMD`。

 

**两个细节**:**`ps` 会把"自己"也列出来**(跑 ps 时它也是个进程);**不带参数的 `ps` 只列当前终端**(想看全部用 `ps aux`,实测 4 行 vs 41 行)。

 

**`&` 的作用**:把命令**丢到后台**。不加 `&`,前台命令会**占住终端**——敲什么都进不去(这个实验必须加 `&`,就是为了"趁它还在跑时"去 `ps` 里找它)。

 

#### 2.5 写 crontab

 

```

*/5 * * * * date >> /tmp/cron-test.log

```

 

**这一行就两块**:

 

```

*/5 * * * * date >> /tmp/cron-test.log

└───┬───┘ └───────┬────────┘

   什么时候 干什么

```

 

– 五个字段依次是 **分 时 日 月 周**;`*` = 每个都算,`*/5` = 每 5 个一次

– `>>` = **追加**(写到末尾,不动原有内容);对比 `>` 是**覆盖**(清空再写)

 

**两步验证**(这一步不能省):

 

1. **先验"命令那一半"**:`date >> /tmp/cron-test.log` 手动跑一次

2. **再验 cron 真的会自己跑**:等 5 分钟,`cat /tmp/cron-test.log` 应该多出行来

 

实测结果:

 

```

Sat Sep 19 22:23:51 CST 2026 ← 手动跑的那次

Sat Sep 19 22:25:01 CST 2026 ← cron 自己跑的

Sat Sep 19 22:30:02 CST 2026 ← cron 自己跑的

```

 

**用完清掉**:`crontab -r`(`-r` = remove,删整个 crontab)。

 

**crontab 的文件存哪**:`/var/spool/cron/crontabs/<用户名>`——**不是当前目录**。

 

`crontab -e` 的过程:① 把它那边的文件复制到临时文件(`/tmp/crontab.XXXX`)→ ② 用编辑器打开**那个临时文件** → ③ 存盘退出后**检查语法** → ④ **安装**到系统目录 → ⑤ 删临时文件。

 

所以**在任何目录敲 `crontab -e`,看到的都是同一份 crontab**。

 

 

### 三、踩的六个坑

 

#### 坑 1:`useradd` 不带 `-m` → 只登记,不建家目录

 

```bash

$ sudo useradd s1prod

$ grep s1prod /etc/passwd

s1prod:x:1003:1005::/home/s1prod:/bin/sh ← 登记写着家"应该在" /home/s1prod

$ ls /home

ar-26710 s1tester2 ← 但实物根本不存在

```

 

**"登记表 ≠ 实物"**:`/etc/passwd` 第 6 格写的是家目录**应该在哪**,是**指向**;目录本身得靠 `-m` 去**造**。没造的话,用户登录进来 `cd ~` 直接报错。

 

(这条 09-17 学过、今天又错了一次,见「旧知识回收」。)

 

#### 坑 2:`chmod` 字母法——顺序反 + 中间有空格

 

```bash

$ chmod g -x perm-test # g 和 -x 之间多了空格

chmod: cannot access 'g': No such file or directory

$ ls -ld perm-test

drw-r—– … perm-test ← 属主的 x 也没了

```

 

**为什么**:`chmod` 按位置解析——`g -x` 被拆成**两个参数**,`-x` 被当成**模式**(= 对**所有人**去掉 `x`),`g` 被当成**文件名**。所以要动的不是同组一个,而是**三类人一起**。

 

**铁律**:模式必须是**一个连着的整体**(`g-x`),**一有空格它就不是那个模式了**。

 

#### 坑 3:相对路径 vs 绝对路径

 

```bash

$ ls ~ # 能看到 perm-test

$ chown s1prod2:s1prod perm-test

chown: cannot dereference 'perm-test': No such file or directory

```

 

**因为当时人站在 `/etc`**:

 

| 写法 | 类型 | 展开成 |

| ———– | ——– | ——————————————————– |

| `~` | **绝对** | `/home/ar-26710` |

| `perm-test` | **相对** | **当前目录** + `/perm-test` = `/etc/perm-test`(不存在) |

 

**规则**:以 `/` 开头(或 `~`)→ **绝对路径,在哪敲都一样**;不以 `/` 开头 → **相对路径,跟着你站的位置变**。

 

#### 坑 4:`chown` 的冒号不能省

 

```bash

$ chown s1prod2 s1prod perm-test # 少了冒号

chown: cannot dereference 's1prod': No such file or directory

```

 

**`chown` 按位置解析:第一个词 = 换成谁,后面所有词全是文件。** 少了冒号,`s1prod` 就被当成文件名找了(所以报错里只有它和 `perm-test`,没有 `s1prod2`)。

 

#### 坑 5:不是属主,就改不动权限

 

```bash

$ chmod 750 perm-test

chmod: Operation not permitted (os error 1)

```

 

跟坑 4 相反的另一面:

 

– **是属主**:哪怕文件权限是 `000`,**照样能 `chmod`**

– **不是属主**:哪怕能进这个目录,也是 `Operation not permitted`(只有 `sudo` 能救)

 

 

### 四、`rwx` 对「文件」和「目录」分别是什么

 

| | 对**文件** | 对**目录** |

| — | ——————- | ——————————– |

| `r` | 读**内容**(`cat`) | 列出**里面有什么**(`ls`) |

| `w` | 改**内容** | 在里面**建 / 删 / 改名** |

| `x` | **执行**它 | **进去**(`cd`)、访问里面的文件 |

 

**两处最容易错的**:

 

1. **目录的 `w` 管的是"增删文件",不是"改文件内容"**(→ 坑 6)

2. **目录的 `w` 必须配合 `x` 才生效**——只有 `rw-`(有 r 有 w 没 x)的目录里,`touch` 和 `mkdir` 都是 `Permission denied`

 

**`750` 拆开**:`rwx` `r-x` `—` = 属主全权 / 同组可读可进 / 其他人什么都没有。

 

**数字怎么来的**:`r=4` `w=2` `x=1`,三位一组相加(`7=4+2+1`、`5=4+0+1`、`0=0`)。

 

 

### 五、`nano` 的正确用法

 

**`nano` 不是查看器,它就是文本编辑器**(`man nano` 原文:`nano is a small and friendly text editor`)。

 

**用法差别在这儿**:

 

| 敲的 | 打开的是 | 存盘时 |

| —————– | ————————————————— | —————————————— |

| `nano` | 一个**空白缓冲区**(顶部 `New Buffer`,还没有名字) | **问你要存成什么文件名**——答不出来就存不了 |

| **`nano 文件名`** | 那个文件,直接改 | 直接存回去 ✓ |

| `crontab -e` | crontab 自己的临时文件(**它知道是哪个**) | 直接存,还会帮着安装 ✓ |

 

**所以单独敲 `nano` 会卡住,不是因为它不能写,是因为它不知道要存哪儿。** 记住:**`nano` 后面必须跟一个文件名。**

 

**nano 的存盘退出(两步)**:

 

1. `Ctrl+O` → 底部问你**存到哪个文件** → 直接**回车**(用默认名,**别改**)

2. `Ctrl+X` → 问 `Save modified buffer?` → 按 `Y` 存 / `N` 不存

 

**另外**:**nano 打开就能直接打字**,不需要按什么键进"编辑模式"(这点跟 vim 不一样,vim 要先按 `i`)。

 

**只想看文件内容**不用 nano,用 `cat`(全看)或 `less`(分页看)。

 

 

## 线索区(学完后合上材料,自问自答)

 

**Q: `kill` 默认发的是哪个信号?它和 `-9` 分别是什么行为?**

A: 默认 **15 = TERM**(terminate),意思是「**请你结束**」——进程可以自己决定:直接退,或先存盘、关文件再退。`-9` = **KILL**,意思是「内核直接干掉你」,**不能被忽略、不能被捕获**。记忆钩子:**大的是客气话(15),小的是动手(9)**。

 

**Q: 删除一个文件,看的是谁身上的 `w`?**

A: **它所在目录的 `w`**,跟那个文件自己的权限无关。因为删文件改的是**目录里的那张清单**,不是文件本身。所以一个 `000` 的文件照样能删掉。

 

**Q: `chmod 750` 里那个 `750`,三位分别给谁、怎么算出来的?**

A: 第一位**属主**、第二位**同组**、第三位**其他人**。算法是 `r=4` `w=2` `x=1` 相加:`7=4+2+1`(rwx)、`5=4+0+1`(r-x)、`0`(—)。

 

**Q: 目录的 `w` 和文件的 `w`,作用一样吗?**

A: **对象不一样**。文件的 `w` = 改**文件内容**;目录的 `w` = 在里面**建 / 删 / 改名**文件。另外目录的 `w` **必须配合 `x` 才生效**(只有 `rw-` 的目录里 `touch`、`mkdir` 都报 `Permission denied`)。

 

**Q: 为什么在 `/etc` 里敲 `chown … perm-test` 会报"找不到"?**

A: 因为 `perm-test` 是**相对路径**,会先跟"当前所在目录"拼起来 = `/etc/perm-test`(不存在)。`ls ~` 能找到,是因为 `~` 会展开成**绝对路径** `/home/ar-26710`。

 

**Q: `chown s1prod2 s1prod perm-test` 这条错在哪?**

A: 少了冒号。`chown` 按位置解析——**第一个词 = 换成谁,后面所有词全是文件**。所以 `s1prod` 被当成文件名去找了。正确写法是 `chown s1prod2:s1prod perm-test`。

 

**Q: 单独敲 `nano`(不带文件名)为什么会卡住?**

A: 它打开的是**一个还没有名字的空白缓冲区**,存盘时会问「存成什么文件」。`crontab -e` 顺利,是因为**它已经指定好了要编辑哪个文件**。

 

**Q: 改了属主之后,原属主还能 `chmod` 吗?**

A: **不能**,报 `Operation not permitted`。**改权限只认两件事——你是属主,或者你是 root**,跟文件当前的权限位无关。

 

**Q: `>>` 和 `>` 的区别?**

A: `>>` = **追加**(写到文件末尾,**不动**原有内容);`>` = **覆盖**(先清空再写)。

 

**Q: `crontab` 文件真实存在哪?**

A: `/var/spool/cron/crontabs/<用户名>`——**系统目录,不是当前目录**。所以**在任何地方敲 `crontab -e`,看到的都是同一份**。

 

 

## 总结(50字以内,用自己的话概括今天学到了什么)

 

块 1 产出日:21 条命令补齐,脱离教程独立跑通建用户/改权限/改所有者/查进程+kill/写 crontab;撞破六个坑(`-m`、字母法空格、相对路径、冒号、属主、删文件看目录);`kill` 默认 15 不是 9。

 

 

## 复习卡片

 

| 概念 | 必学/了解 | 一句话 | 场景 |

| ————————- | ——— | ———————————————— | ———————— |

| 块 1 产出日 | 必学 | 把学过的东西**脱离教程**做出来 | 每个知识块学完的那个周六 |

| `less` | 必学 | 分页看文件,`q` 退出 | 看长文件 |

| `tail` / `tail -f` | 必学 | 看结尾;`-f` 跟着看新行 | 盯日志 |

| `find` | 必学 | 在**磁盘上**找文件本身 | 忘了文件放哪 |

| `grep` vs `find` | 必学 | `grep` 找**内容**,`find` 找**文件** | 别用错 |

| `ps` | 必学 | 拍一张进程快照;不带参数只看当前终端 | 找 PID |

| `ps aux` | 必学 | 列**所有**进程 | 全盘看进程 |

| `kill` 默认信号 | 必学 | **15 = TERM**(请你结束),**不是 9** | 结束进程 |

| `kill -9` | 必学 | **KILL**,不能被忽略/捕获 | 卡死的进程 |

| `top` | 必学 | 实时看进程(`ps` 是拍照,`top` 是直播) | 看谁在吃 CPU |

| `cron` vs `crontab` | 必学 | `cron` 是后台程序,`crontab` 是排活的命令 | 定时任务 |

| cron 五字段 | 必学 | **分 时 日 月 周**;`*` 每个,`*/5` 每 5 个 | 写定时 |

| `crontab -e / -l / -r` | 必学 | 编辑 / 列出 / 删除 | 管理定时任务 |

| `>>` vs `>` | 必学 | 追加 vs 覆盖 | 写日志 |

| `chmod` 数字法 | 必学 | `r=4 w=2 x=1` 相加 | 750 / 644 |

| `chmod` 字母法 | 必学 | 顺序 **对谁→加减→权限**(`g-x`),**不能有空格** | 微调某一位 |

| `chmod` 不写对谁 | 必学 | 默认**所有人** | 最容易误伤 |

| `chown` 语法 | 必学 | `用户:组 文件`,**冒号不能省** | 改归属 |

| `chown` 不动权限位 | 必学 | 只改归属,权限位原样 | 别指望它顺便改权限 |

| `Operation not permitted` | 必学 | 不是属主也不是 root | chmod 报这个 |

| 改权限认什么 | 必学 | 只认**属主身份**或 root,不看文件当前权限 | 000 也能改 |

| 相对路径 vs 绝对路径 | 必学 | `/` 或 `~` 开头 = 绝对,在哪敲都一样 | 找不到文件 |

| 目录无 `x` | 必学 | 进不去(`cd` 报错) | 权限排障 |

| 目录 `w` 要配 `x` | 必学 | 只有 `rw-` 的目录里 `touch`/`mkdir` 都失败 | 建不了文件 |

| 删文件看谁的 `w` | 必学 | 看**目录**的 `w`,不看文件自己 | 文件删不掉 |

| `rwx` 对目录 | 必学 | r=列清单、w=增删改名、x=进去 | 权限模型 |

| `useradd -m` | 必学 | 不带 `-m` 只登记不建家目录 | "登记表 ≠ 实物" |

| `-g` vs `-G` | 必学 | 小写主组(只有一个),大写附加组 | 建用户 |

| `-a` 只在 `usermod` | 必学 | `usermod -aG` 追加;`useradd` 没有 `-a` | 加组 |

| 同名主组 | 必学 | `useradd` 默认给新用户建同名主组 | 看 `id` 的 gid |

| `id` 输出 | 必学 | `gid=` 主组,`groups=` 全部组 | 查用户在哪些组 |

| `nano` 用法 | 必学 | **必须跟文件名**;`Ctrl+O` 存、`Ctrl+X` 退 | 编辑文件 |

| `nano` 无插入模式 | 必学 | 打开就能打字(vim 才要按 `i`) | 别混 |

| crontab 文件位置 | 了解 | `/var/spool/cron/crontabs/<用户名>` | 好奇它存哪 |

 

 

## 旧知识回收(今天暴露出来的)

 

| 概念 | 一句话 | 出处 |

| ———————- | ———————————————————————————- | —————————- |

| `pwd` 管什么 | 回答"**我现在在哪个目录**",不是"家在哪"——在家目录里敲它显示家,是因为**人就在家** | 09-05 抽考答错 |

| `~` | **当前用户的家目录**。root 的家在 `/root`(不是 `/home/root`) | 09-05 抽考答不出 |

| `$` vs `#` | 提示符结尾:`$` 普通用户、`#` root。**是"你是谁",不是"家在哪"** | 09-05 抽考措辞错 |

| `hier` | **hier**archy 砍后半截;`man hier` = FHS 说明书 | 09-18 学过,今天忘 |

| `echo` | 把后面的东西原样打印出来;`echo $HOME` 看变量的值 | 09-18 用过,今天问"什么意思" |

| `useradd` 不带 `-m` | **不建家目录**,只往 `/etc/passwd` 登记 | 09-17 学过,**今天又踩** |

| "登记表 ≠ 实物" | `/etc/passwd` 写着 `/home/s1prod`,`/home` 里却没有它 | 09-17 学过,**今天又踩** |

| `grep` 是模糊匹配 | `grep s1prod /etc/group` 会连 `s1prod1` `s1prod2` 一起捞出来 | 09-18 学过,今天又遇到 |

| `chmod` 字母法的"对谁" | `u` / `g` / `o` / `a`,**不写就是所有人** | 09-08 学过,今天误伤 |

 

 

## 复习抽考

 

– **抽了 4 问**:① `pwd` 管什么不管什么 ② `~` 是什么 / 两个用户的家在哪 ③ `$` 和 `#` 代表谁 ④ 为什么学 Linux 而不是 PowerShell

– **结果:2 对 2 错**

  – ✅ `$` / `#` 的对应关系对(但措辞要拧——它俩是**提示符符号**,不表示家在哪)

  – ✅ "为什么学 Linux":抓住了"通用语"这个核心

  – ❌ `pwd`:错答成"是家"。用反例撞破——`cd /etc` 后敲 `pwd` 会显示什么?答"目录",并自己说出了原因("当时人就在家里")

  – ⚠️ `~`:答不出。补讲:`~` = 当前用户的家;root 在 `/root`,`ar-26710` 在 `/home/ar-26710`

– 两条错题已进上面的「旧知识回收」段

 

 

## 今日产出验收

 

| 条 | 标准 | 结果 |

| — | —————————————————————- | —————————————- |

| ① | 本地 Linux 环境跑通 | 早已达标(WSL2 / Ubuntu 26.04) |

| ② | 脱离教程独立完成:建用户组 / 改权限 / 查进程 / kill / 写 crontab | ✅ **五项全部真机跑通** |

| ③ | 用自己话讲清 `rwx` 与 `750` | ✅ 通过(含"目录的 w 管什么"这一层) |

| ④ | 21 条核心命令不查笔记默出来 | ✅ 默写 → 补讲 → 重默,全部齐 |

| ⑤ | Python 日志解析脚本跑通 | 文件已在 `kb/产出/块1-Python日志统计.py` |

| ⑥ | 权限与进程实操记录落盘 | ✅ `kb/产出/块1-权限与进程实操记录.md` |

赞(0)
未经允许不得转载:网硕互联帮助中心 » Linux Day9——复习第一部分(实操产出)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!