文件权限如何工作?

您能简要解释一下用于管理文件权限的主要概念和命令行工具吗?

每个文件都拥有三个不同类别的权限:

  • 文件的所有者,
  • 与文件关联的组,和
  • 其他人。

权利意味着在脚本或程序的情况下读取文件的权利,写入文件的权限或执行文件的权利。

在CLI上,您可以

  • chown改变主人,例如chown guillermooo
  • 使用chgrp更改组,例如chgrp root
  • chmod更改权限,例如chmod u+w filename.ext (为文件filename.ext的所有者添加写入权限)

如果您想了解有关这些工具的更多信息,请打开终端并输入man [tool] ,例如man chmod

警告:更改文件和目录的权限可能有害,并可能导致系统不可用。 当在错误的路径上以root身份递归运行时,我们可能会从必须重新安装Ubuntu的位置开始。 因此,最好不要在HOME目录之外更改权限,并且应尽可能避免以root用户递归地运行命令。

文件权限

Ubuntuinheritance了Unix的权限概念,对于文件或目录,我们可以允许或拒绝三个任务:

  • 可以打开r (读取)文件/目录以进行读取访问。
  • 可以打开w (写入)文件/目录以进行写入/编辑访问。
  • 可以执行x (执行)文件,因为可以遍历程序/目录。

遍历目录本质上意味着将其用作路径名的一部分。有关更多说明,请参阅https://unix.stackexchange.com/a/13891或https://unix.stackexchange.com/questions/21251 。)

另外,我们有三个案例,我们批准了谁:

  • u (用户)文件的所有者被授予任何权限。
  • 该文件所属的g (组)组被授予权限。
  • o (其他)所有其他人都被授予许可。

现在要获得这些排序的组合,我们使用二进制系统,其中每个位定义一个权限。 这可以在下表中得到最好的显示

  Permission | Binary | Octal | User | Group | Other | ====================================================== r | 100 | 4 | | | | w | 010 | 2 | | | | x | 001 | 1 | | | | ======================================================= Number 

现在,如果我们想要的话

a)文件(=用户)的所有者具有权限,执行权和执行权限,
b)文件的组授予了r ead和e x ecute权限,以及
c)所有其他人应该只有访问权限。

然后生成的文件权限将是:

  ugo rwx rx r-- 

以八进制数来表示,例如。 对于chmod命令或当我们必须理解错误消息时,我们需要填写上表,如下所示:

  Permission | Binary | Octal | User | Group | Other | ====================================================== r | 100 | 4 | 4 | 4 | 4 | w | 010 | 2 | 2 | 0 | 0 | x | 001 | 1 | 1 | 1 | 0 | ====================================================== Numbers add to 7 5 4 

需要添加每个权限编号以总结用户(4 + 2 + 1 = 7),组(4 + 0 + 1 = 5)和其他(4 + 0 + 0 = 4)。 结果数字是:

  ugo 7 5 4 

我们现在有两个选项可以使用chmod更改权限位:

 chmod u+rwx g+rx o+r filename 

或者更简单

 chmod 751 filename 

两个命令都会这样做。

我们家中新创建的文件的默认权限是664(-rw-rw-r–)。

如果我们希望文件可以作为程序执行,我们将不得不更改此权限。

  • 请注意,我们还必须更改此可执行文件所在目录的权限。只有同时设置了文件目录的可执行位,我们才允许将此文件作为程序运行。

  • 将文件复制到我们的家时,它将失去它的权限,这将被我们自己的默认权限所取代(除非我们使用高级选项进行复制,例如存档选项)。

  • 另请注意,文件可以从其挂载点inheritance其权限。 挂载选项。 在安装不支持Unix权限的Windows格式化驱动器时,这很重要。

用户和组

我们很快意识到这只是故事的一半。 我们还需要整理物品。 为此,每个文件或文件夹都具有已定义的所有者和已定义的组成员身份。

每次我们创建文件时,我们都将成为文件的所有者,文件的组也将是我们。 使用ls -l我们可以看到权限,所有权和组,如以下示例输出所示:

 -rw-rw-r-- 1 takkat takkat 4096 Sep 12 20:25 test 
  • 我们只允许更改我们的文件的权限,组或所有权。

如果我们不是文件所有者,我们将获得Permission denied错误。 只有root可以为所有文件更改此值。 这就是为什么我们必须在编辑不是我们的文件的权限时使用sudo 。 有两个内置命令可以为用户创建chownchgrp组。

要将文件所有权从任何人更改为takkat我们可以发出以下命令:

 sudo chown takkat testfile 

要将文件组更改为takkat我们会发布

 sudo chgrp takkat testfile 

阅读命令的联机帮助页以获取更多详细信息和选项。 还有一个更好的更详细的指南建议进一步阅读:

  • Ubuntu社区帮助: 文件权限

还可以在这里找到一些相关问题

  • 更改文件夹权限和所有权
  • 什么是“umask”,它是如何工作的?
  • 如何从命令行获取八进制文件权限?
  • 如何在NTFS(或FAT32)分区上使用“chmod”?
  • ‘chmod u + x’与’chmod + x’
  • 如何成为源自其他PC /用户的文件的所有者?