讲解

每个文件都有所有者(user)和所属组(group),ls -l 的第三、四列显示它们。chown 修改所有者:chown alice report.txt 把文件给 alice;chown alice:staff report.txt 同时改所有者和组;chgrp 只改组。改别人的文件需要权限,所以 chown 几乎总是和 sudo 一起出现。

sudo(superuser do)让普通用户临时以 root 身份执行单条命令:sudo 命令。第一次使用会要求输入你自己的密码(不是 root 的),成功后有几分钟免密期。root 是系统里的超级用户,拥有一切权限——也拥有一切搞砸的能力。所以 sudo 的正确心态是「不得已才用」:改系统配置、装软件、动别人的文件时才轮到它,日常工作不该离不开 sudo。

一个高频的权限事故:用 sudo 创建或修改了你自己家目录里的文件,导致文件变成 root 所有,之后你自己反而改不了它(比如 sudo npm install -g 留下的 root 所有的缓存)。自救方法就是 sudo chown -R 把所有权改回来。组管理也常用:把用户加进某个组(如 docker 组)后,该组拥有的文件他就能按组权限访问,不必事事 sudo。

示例

先看看当前环境里「你是谁」以及文件归谁所有:

# 当前用户名、用户 ID 和所属组
whoami
id

# ls -l 的第三、四列就是所有者和所属组
ls -l notes.txt

下面的命令需要管理员权限,仅作演示:

# 仅示意:把文件所有者改为 alice,组改为 staff(需要 sudo)
sudo chown alice:staff report.txt

# 仅示意:递归修改整个目录的所有权(修「家目录文件变 root」事故就靠它)
sudo chown -R alice:staff /home/alice/project

# 仅示意:把用户加入 docker 组,之后操作 docker 不必 sudo
sudo usermod -aG docker alice

常见坑

  • sudo 成习惯:什么事都 sudo,等于放弃了权限系统的所有保护。先问「这条命令真的需要 root 吗」。
  • sudo 重定向不生效:sudo echo x > /etc/file 里,重定向是你的 shell 做的、没有 root 权限。正确写法 echo x | sudo tee /etc/file。
  • 家目录里出现 root 文件:sudo 干完活文件归 root,后续普通操作全部 Permission denied,用 sudo chown -R 改回来。
  • usermod -aG 忘了 -a:没有 -a 会覆盖用户的其他组,把人踢出所有附加组。-a 是 append,必加。

小结

chown 改所有者、chgrp 改组,通常配合 sudo;sudo 是临时 root,慎用、少用、用完注意文件归属。权限体系到此完整,下一节换个视角看系统:进程。