—
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` |
网硕互联帮助中心





评论前必须登录!
注册