blurred image
Linux file permission issue thumbnail image

Linux file permission issue

这两个命令之所以有截然不同的效果,是因为它们修改的东西本质上完全不同。在 Linux 系统中,“所有者 (Owner)”“权限 (Permission)” 是两套相互关联但又各自独立的体系。

为了让你彻底明白,我们来看看它们的核心区别,以及为什么之前 chmod 没用,而 chown 却解决了问题。


1. chownchmod 的根本区别

  • 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-datanode 等后端服务用户)自动创建出来的。

当时的情况类似于这样:

  1. moments 文件夹被创建了,它的主人是 root
  2. 你作为 ubuntu 用户,尝试运行 chmod -R 755 ... 去修改它。
  3. 系统一看:“你(ubuntu)又不是这个文件的老爸(root),你凭什么重新分配它的家规(权限)?” 于是直接拒绝了你,导致权限无法生效。

3. 为什么后来的方法成功了?

后来的组合命令施加了“降维打击”:

  1. **加上了 sudo**:这代表你借用了系统最高管理员(超级用户)的无上权力。
  2. **执行了 chown**:超级用户直接出面,强制把 moments 文件夹的所有权硬生生地抢了过来,塞给了 ubuntu 用户。

一旦 moments 的所有者变成了 ubuntu,你往里面读写文件、上传图片自然就畅通无阻了。

💡 避坑小贴士(针对你以后的博客开发)

既然这是个博客项目,以后只要有前端上传图片、后台生成日志等操作,新产生的文件可能还会出现类似的问题。

如果以后又遇到“明明代码没写错,但就是无法写入/上传”的情况:

  • 先去用 ls -l 看看那个新文件夹的主人是谁。
  • 如果不是 ubuntu,直接一行 sudo chown -R ubuntu:ubuntu 对应目录 就能药到病除!