第 3 章 · 01 基础命令与文件权限 本节摘要:服务器操作从命令与权限开始。本节先过八大基础命令、cd 变体与 ls -l 字段解读,再讲 I/O 重定向五符号与 2>&1 的位置陷阱,然后是 FHS 目录分工,最后重点攻下权限模型:rwx 数值、特殊位(setuid/setgid/sticky)、ACL 与用户组体系。每部分都附原库陷阱题,读完后自测。 学习目标 说出八大基础命令及常用选项,解读 ls -l 七字段。 掌握 I/O 重定向五符号,说出 2>&1 位置不同导致的差异。 说出 FHS 主要目录的职责与 /tmp、/var/tmp 的区别。 计算 chmod 数值权限,说出三个特殊位的含义。 解读 /etc/passwd 七字段,区分软链接与硬链接。
本节摘要:服务器操作从命令与权限开始。本节先过八大基础命令、cd 变体与 ls -l 字段解读,再讲 I/O 重定向五符号与 2>&1 的位置陷阱,然后是 FHS 目录分工,最后重点攻下权限模型:rwx 数值、特殊位(setuid/setgid/sticky)、ACL 与用户组体系。每部分都附原库陷阱题,读完后自测。
| 命令 | 作用 | 常用选项 |
|---|---|---|
touch |
建文件/更新时间戳 | |
ls |
列表 | -a 隐藏、-l 长格式、-R 递归、-h 人性化 |
rm |
删除 | -r 递归、-f 强制(rm -rf 高危) |
cat |
查看/拼接/创建 | cat > file 配合 Ctrl+D |
cp |
复制 | -r 复制目录 |
mkdir |
建目录 | -p 递归建多级 |
pwd |
显示当前路径 | |
cd |
切换目录 | 见下表 |
cd 六变体:/ 根、~ 家目录、.. 父目录、. 当前、- 上次访问(靠 $OLDPWD 记忆)、裸 cd 回家。
ls -l 七字段:权限 → 硬链接数 → 属主 → 属组 → 大小 → 最后修改时间 → 文件名。首字符判类型:- 文件、d 目录、l 符号链接、b/c 块/字符设备、s 套接字。
引号规则:无引号按空白分词;双引号保留为一个参数(变量展开);单引号内不展开变量。echo hello world 与 echo "hello world" 输出相同。
命令定位:which / whereis。坑题:df 报 command not found → 多半 $PATH 被覆盖,需修复 PATH。
| 符号 | 作用 |
|---|---|
> |
stdout 覆盖写 |
>> |
stdout 追加 |
2> |
stderr |
< |
stdin |
| ` | ` |
&> |
stdout+stderr 同一文件 |
三标准流:fd 0=stdin、1=stdout、2=stderr。
经典陷阱:2>&1 的位置决定行为
cmd > file 2>&1 # 先 stdout→file,再 stderr 跟随→file:两条流都进文件 ✅ cmd 2>&1 > file # 2>&1 先执行(此时 stdout 还是终端)→ stderr 仍上屏 ❌
原库陷阱题:yippiekaiyay 1>&2 die_hard —— 1>&2 把 stdout 复制到 stderr(自身),die_hard 文件不会创建,只会报 command not found。
| 目录 | 职责 |
|---|---|
/bin /sbin /usr/bin /usr/sbin |
二进制程序 |
/etc |
配置文件 |
/home |
用户家目录 |
/var |
易变文件(日志) |
/tmp |
临时文件(重启清空) |
/var/tmp |
数天清理或不清(依发行版) |
/proc |
虚拟文件系统:内核信息与控制中心,任何用户都无法直接在 /proc 建文件 |
/dev |
设备文件(插入新设备在此生成条目) |
r=4、w=2、x=1 **累加**。777=全部;644=属主读写+组/其他只读;750=属主全部+组读执行。
chmod +x some_file # 给三集合都加执行位 chmod 750 some_file # 数字式 chmod u+x some_file # 符号式
三命令分工:chmod 权限、chown 属主、chgrp 属组。
| 位 | 值 | 效果 |
|---|---|---|
| setuid | 4 | 程序以属主身份运行(passwd 即此例) |
| setgid | 2 | 程序以属组身份运行 |
| sticky | 1 | 仅属主或 root 可删改该文件(/tmp 即此例) |
为特定用户做细粒度授权:getfacl <file> 查看、setfacl -m u:<用户>:<权限> <file> 修改。经典自救:误执行 chmod -x $(which chmod) 后,用 sudo setfacl -m u::rx /usr/bin/chmod 恢复执行位。
建文件失败三原因:磁盘满、inode 耗尽、无权限——逐项排查。
/etc/passwd 每行七字段:用户名 → 密码占位 x → UID → GID → 注释 → 家目录 → shell。密码实体在 /etc/shadow(仅 root 可读)。
/etc/skel 是新用户家目录的模板;useradd 建用户、passwd 改密、usermod 改用户、whoami 当前用户、id 输出身份、su - 切到 root、last 查登录记录;adduser user --shell=/bin/false --no-create-home;grep $(whoami) /etc/passwd 为空 → 用户可能来自 LDAP 等远程源,用 getent passwd 验证。| 维度 | 硬链接 | 软链接(symlink) |
|---|---|---|
| inode | 与原文件同一 inode | 独立 inode,存目标路径 |
| 本质 | 同一文件的另一个名字 | "快捷方式" |
| 跨文件系统 | 不行 | 可以 |
| 指向目录 | 不行 | 可以 |
| 原文件删除后 | 数据仍可访问 | 悬空失效 |
| 创建 | ln |
ln -s |
目录的链接数至少为 2(. 与父目录的 ..)。
ls -l 输出中第 2 个字段是什么?(硬链接数)df 报 command not found,最可能原因?(PATH 被覆盖)sed -i s/good/great/g /tmp/y)echo hello world 与 echo "hello world" 有区别吗?(输出相同)下一节预告:文件会玩了,接下来管进程——状态、信号、系统调用与 systemd。