文件权限如何工作?
您能简要解释一下用于管理文件权限的主要概念和命令行工具吗?
每个文件都拥有三个不同类别的权限:
- 文件的所有者,
- 与文件关联的组,和
- 其他人。
权利意味着在脚本或程序的情况下读取文件的权利,写入文件的权限或执行文件的权利。
在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
。 有两个内置命令可以为用户创建chown
为chgrp
组。
要将文件所有权从任何人更改为takkat
我们可以发出以下命令:
sudo chown takkat testfile
要将文件组更改为takkat
我们会发布
sudo chgrp takkat testfile
阅读命令的联机帮助页以获取更多详细信息和选项。 还有一个更好的更详细的指南建议进一步阅读:
- Ubuntu社区帮助: 文件权限
还可以在这里找到一些相关问题
- 更改文件夹权限和所有权
- 什么是“umask”,它是如何工作的?
- 如何从命令行获取八进制文件权限?
- 如何在NTFS(或FAT32)分区上使用“chmod”?
- ‘chmod u + x’与’chmod + x’
- 如何成为源自其他PC /用户的文件的所有者?