触摸:无法触摸“测试”:权限被拒绝

Edg*_*rka 9 permissions files touch

我正在尝试在目录中创建一个文件,但我得到:

`touch`: cannot touch ‘test’: Permission denied
Run Code Online (Sandbox Code Playgroud)

这是我的命令:

`touch`: cannot touch ‘test’: Permission denied
Run Code Online (Sandbox Code Playgroud)

Cos*_*age 16

如果您没有写入执行权限,则无法编辑公共目录的内容。

  • 您表示您正在尝试创建一个新文件。如果该test文件在 中不存在publictouch将尝试创建一个新文件。如果没有对父目录的写入执行权限,它就无法做到这一点。遍历目录需要execute;需要 write 来为新文件添加 inode 条目。显然,您没有这些权限中的一个或两个。

  • 如果该test文件已存在于 中publictouch则默认情况下会更新该文件的修改时间。只有的访问文件需要这一点,因为修改日期/时间存储在文件的inode。如果文件已经存在,您将需要使用类似命令来检查文件的权限,ls -l public/test以确定您是否具有写访问权限。


目录上的权限位掩码rwxrwxr-x, 表示:

  • root用户,即,目录的拥有者,具有写权限的目录由第一所指示rwx的块。该用户还可以读取目录(r位)并遍历它以访问其内容(x位)。
  • root组的成员,即目录上的组,他们自己不是root用户,也有类似的权限来读取、写入和遍历目录,如第二个rwx块所示

所有其他用户只有读取和执行权限,如最后一个r-x块所示。如前所述,对于目录,执行权限允许您遍历该目录并访问其内容。请参阅此问题以更清楚地了解这一点。

我如何获得权限?

您需要与您的系统管理员(可能是您!)交谈以执行以下操作之一:

  • 使用类似的命令使您成为目录所有者public/chown user public/。如果您是唯一需要具有编辑权限的用户,这将是合适的。
  • 也许创建一个具有合适名称新组publiceditors,然后public/使用类似chgrp publiceditors public/. 确保您和任何其他需要能够修改目录的用户都被列为组成员。这种方法适用于多个用户需要编辑功能的情况。
  • 使您的用户帐户成为root成员(我不建议这样做)。
  • 为您提供登录或伪装成的root访问权限,例如使用密码sudosu使用root密码
  • 更改目录权限授予所有用户写入权限,使用类似chmod o+w public. 请注意,这使盒子上的每个人都能够编辑和删除公共目录中的文件。* 您可能不想要这个!

*在没有其他访问控制强制执行的情况下,例如内核中的强制访问控制。

在目录上下文中读取写入执行权限是什么意思?

假设您在 Linux 机器上,在目录上,读取权限位允许您读取目录列表。写权限位允许您更新列出的目录,这是创建文件*、编辑文件名、取消链接(删除)文件所必需的。执行位允许您遍历目录、访问其文件等。有关Linux 目录权限的更多信息。

* 实际上,您正在将文件链接到目录中。大多数情况下,您会在创建文件时执行此操作,但还有更复杂的示例。例如,对最初存在于文件系统中其他地方的文件进行硬链接将需要对该链接的目标目录的写访问权限,尽管您并未创建新文件。


为什么要对目录进行访问?

您需要能够写入目录以添加对您正在添加的文件的相关 inode 的引用。

  • 需要明确的是,如果您想在目录中创建新文件,则需要对该目录具有写入和执行权限。虽然写入允许您编辑目录列表,但您仍然需要执行位来允许访问所述目录列表。 (2认同)