Linux file permission issue
这两个命令之所以有截然不同的效果,是因为它们修改的东西本质上完全不同。在 Linux 系统中,“所有者 (Owner)” 和 “权限 (Permission)” 是两套相互关联但又各自独立的体系。
为了让你彻底明白,我们来看看它们的核心区别,以及为什么之前 chmod 没用,而 chown 却解决了问题。
1. chown 与 chmod 的根本区别
-
chown(Change Owner):修改“这东西是谁的” -
作用:改变文件或目录的所有者(Owner)和所属组(Group)。
-
你执行的
sudo chown -R ubuntu:ubuntu uploads/,意思是:“把uploads目录及其下面所有的文件,全部强制转让给ubuntu这个用户和ubuntu这个用户组。” -
chmod(Change Mode):修改“允许谁做什么” -
作用:在所有者已经确定的前提下,改变文件或目录的读 (r)、写 (w)、执行 (x) 权限。
-
你执行的
chmod -R 755 ...,意思是:“让所有者拥有全部权限(7),让同组人和其他人只有读取和进入权限(55)”。
2. 为什么你之前用 chmod 无法解决?
这就是最核心的盲点了:如果一个文件根本不属于你,你甚至连修改它权限的资格都没有。
你提到 moments 文件夹是“后来创建的”。这说明它很可能是被另一个用户(比如 root 用户,或者由 Docker 容器里的 www-data、node 等后端服务用户)自动创建出来的。
当时的情况类似于这样:
moments文件夹被创建了,它的主人是root。- 你作为
ubuntu用户,尝试运行chmod -R 755 ...去修改它。 - 系统一看:“你(ubuntu)又不是这个文件的老爸(root),你凭什么重新分配它的家规(权限)?” 于是直接拒绝了你,导致权限无法生效。
3. 为什么后来的方法成功了?
后来的组合命令施加了“降维打击”:
- **加上了
sudo**:这代表你借用了系统最高管理员(超级用户)的无上权力。 - **执行了
chown**:超级用户直接出面,强制把moments文件夹的所有权硬生生地抢了过来,塞给了ubuntu用户。
一旦 moments 的所有者变成了 ubuntu,你往里面读写文件、上传图片自然就畅通无阻了。
💡 避坑小贴士(针对你以后的博客开发)
既然这是个博客项目,以后只要有前端上传图片、后台生成日志等操作,新产生的文件可能还会出现类似的问题。
如果以后又遇到“明明代码没写错,但就是无法写入/上传”的情况:
- 先去用
ls -l看看那个新文件夹的主人是谁。 - 如果不是
ubuntu,直接一行sudo chown -R ubuntu:ubuntu 对应目录就能药到病除!
