理解 Linux 的核心思想与黄金法则
黄玮
2026-03
我们已经学过:
ssh, ssh-keygen,
~/.ssh/config)chmod, chown,
setfacl)ps, top,
kill)ip, ss,
netplan)本单元要问:
# 硬盘设备(注意:WSL中这是虚拟磁盘)
$ ls -l /dev/sda
brw-rw---- 1 root disk 8:0 0 Jan 1 10:00 /dev/sda
# 终端设备
$ ls -l /dev/tty
crw-rw-rw- 1 root tty 5:0 0 Jan 1 10:00 /dev/tty
# 进程信息也是文件
$ ls -l /proc/1/status
-r--r--r-- 1 root root 4096 Jan 1 10:00 /proc/1/status
# 网络接口也是文件
$ ls -l /sys/class/net/eth0
lrwxrwxrwx 1 root root 0 Jan 1 10:00 /sys/class/net/eth0
单体工具:
Unix 工具:
# grep 只做搜索
grep "ERROR" app.log
# sort 只做排序
sort access.log
# uniq 只做去重
uniq -c
# 组合:统计最常见的错误
grep "ERROR" app.log | sort | uniq -c | sort -rn | head -n 5
实践意义:
日志分析:
grep "404" access.log # 筛选
| awk '{print $1}' # 提取 IP
| sort # 排序
| uniq -c # 统计
| sort -rn # 降序
| head -n 10 # 前10
进程管理:
ps aux | grep nginx | awk '{print $2}' | xargs kill -15
复杂问题分解为简单步骤
每个步骤都可见、可调试
中间结果可以被复用
“一组通过标准接口连接的工具,协同完成复杂任务”
典型工具链:
find . -name "*.tmp" | xargs rm

# 所有工具都可以从标准输入读取
cat file.txt | tool1 | tool2 | tool3
# 所有工具都可以输出到标准输出
tool1 | tool2 | tool3 > result.txt
# 错误信息不影响数据流
tool1 2> error.log | tool2 > result.txt
/etc/
├── nginx/
│ └── nginx.conf # Nginx 配置
├── systemd/
│ └── system/ # 系统服务配置
├── ssh/
│ └── sshd_config # SSH 配置
└── cron.d/ # Cron 任务
案例:
# 所有网络配置集中在 /etc/netplan/
# 所有系统服务配置在 /etc/systemd/system/
# 所有定时任务在 /etc/cron.d/
# 一个函数做10件事
def do_everything(data):
# 1. 读取数据
# 2. 验证数据
# ... (8 more things)
# 每个函数只做一件事
def read_data(source):
pass
def validate_data(data):
pass
# 可以灵活组合
pipeline = read_data >> validate_data >> transform_data
# CPU 信息
$ cat /proc/cpuinfo
# 内存信息
$ cat /proc/meminfo
# 进程信息
$ cat /proc/1/status
# 网络统计
$ cat /proc/net/dev
# 文件系统信息
$ cat /proc/mounts
/proc 是内核的”公开接口”# 网络接口统计(WSL2可用)
$ cat /sys/class/net/eth0/statistics/tx_packets
$ cat /sys/class/net/eth0/statistics/rx_packets
# 内存热插拔状态
$ cat /sys/devices/system/memory/online
# CPU统计(通过/proc)
$ cat /proc/stat | head -n 5
# 查看所有参数
$ sysctl -a | head -n 20
# 查看特定参数
$ sysctl net.ipv4.ip_forward
# 临时修改参数
$ sudo sysctl -w net.ipv4.ip_forward=1
# 永久修改参数
$ echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/99-custom.conf
# ❌ 错误:过于宽松的权限
chmod 777 script.sh # 所有人可执行写
chmod o+r /etc/shadow # 其他用户可读密码文件
# ✅ 正确:最小权限
chmod 755 script.sh # 只有所有者可写
chmod 750 /etc/app.conf # 组用户可读
# 常用信号
SIGTERM (15) # 请求退出,可被捕获
SIGHUP (1) # 重新加载配置
SIGKILL (9) # 强制杀死,不可被捕获
SIGSTOP (19) # 暂停进程
SIGCONT (18) # 继续进程
系统级配置
├── /etc/netplan/ # 网络接口配置
├── /etc/resolv.conf # DNS 配置
└── /etc/hosts # 本地域名解析
用户级配置
├── ~/.ssh/config # SSH 配置
├── ~/.gitconfig # Git 配置
└── ~/.bashrc # Shell 配置
设计哲学:一切皆文件、做好一件事、文本流
工具链思想:标准接口、可组合性
系统接口:系统调用、/proc、/sys
最佳实践:系统化的原则和经验法则
下一步:Lab 05 Linux 哲学践行
man, apropos)