Day 1:用户身份与基本权限
今日目标:知道”我是谁”、”我属于哪些组”,能查看和修改文件的基本读写执行权限 🎯
命令速览
| 命令 |
用途 |
核心参数 |
whoami |
显示当前用户名 |
(无) |
id |
显示用户 UID/GID/所属组 |
-u -g |
groups |
显示当前用户所属组 |
(无) |
chmod |
修改文件/目录权限 |
755 u+x -R |
逐个击破
① whoami — 当前用户名
- 语法:
whoami
- 🖥️ 上手练:
- 终端输入
whoami,记住你的用户名
su - root(需要 root 密码),然后 whoami——变成 root 了
exit 退出 root,再次 whoami——回到原用户
- ⚠️ 常见坑:
whoami 和 who am i 是不同的命令,后者显示登录时的原始身份
② id — 用户与组信息
- 语法:
id [<USER>]
- 参数:
-u→只显示 UID,-g→只显示 GID
- 🖥️ 上手练:
id——查看自己的 UID、GID、所有组
id -u——只输出 UID 数字
id root——查看 root 用户的 UID(应该是 0)
- 理解输出:
uid=1000(mr) gid=1000(mr) groups=1000(mr),4(adm),27(sudo)
- ⚠️ 常见坑:UID=0 就是 root(超级管理员),不要轻易给普通用户 UID=0
③ groups — 查看所属组
- 语法:
groups [<USER>]
- 🖥️ 上手练:
groups——列出你的所有组
groups root——查看 root 的组
- 理解:用户属于多个组时,第一个是主组
④ chmod — 修改文件权限
- 语法:
chmod <MODE> <DEST>
- 两种模式:
- 数字模式:
r=4 w=2 x=1,组合相加
755 → 所有者 rwx,组 rx,其他人 rx
644 → 所有者 rw,组 r,其他人 r
777 → 所有人 rwx(危险)
- 符号模式:
u/g/o + a 组合 +/-/=
u+x → 所有者加执行权限
g-w → 组去掉写权限
o=r → 其他人设为只读
- 参数:
-R 递归修改目录及其下所有文件
- 🖥️ 上手练:
touch /tmp/test.sh && ls -l /tmp/test.sh——查看默认权限
chmod 755 /tmp/test.sh && ls -l /tmp/test.sh——观察权限变化
chmod u+x /tmp/test.sh && ls -l /tmp/test.sh——给所有者加执行权限
chmod 000 /tmp/test.sh && cat /tmp/test.sh——测试无权限时的报错
chmod 644 /tmp/test.sh——恢复正常权限
mkdir -p /tmp/chmodtest/sub && touch /tmp/chmodtest/sub/f.txt; chmod -R 700 /tmp/chmodtest——递归修改
- ⚠️ 常见坑:
chmod 777 是安全大忌!目录 777 任何用户可读写,生产环境慎用
💪 今日必刷(全部终端实操)
- 执行
id 和 groups,记录你的 UID、GID 和所有组
- 创建
/tmp/my-script.sh,默认权限是什么?把它改为只有你自己可读写执行
- 修改
/tmp/my-script.sh 权限为 744,用符号模式实现同样的效果
- 创建一个目录
/tmp/secret/,设置权限为 700,验证其他用户(如 nobody)能否进入
- 排错题:你用
vim 写了一个脚本 run.sh,执行 ./run.sh 报 Permission denied——排查步骤?可能的修复方式?(至少 2 种)
- 排错题:执行
chmod -R 755 /tmp/mydir 后,/tmp/mydir/secret.key 的权限变成了 755(你希望它是 600),怎么办?在 chmod -R 中如何避免这种情况?
📚 命令详解