![文件权限如何起作用?](https://linux22.com/image/805626/%E6%96%87%E4%BB%B6%E6%9D%83%E9%99%90%E5%A6%82%E4%BD%95%E8%B5%B7%E4%BD%9C%E7%94%A8%EF%BC%9F.png)
您能否简单解释一下管理文件权限的主要概念和命令行工具?
答案1
警告:更改文件和目录的权限可能会造成危害,并可能导致您的系统无法使用。当以 root 身份在错误路径上递归运行时,我们可能会遇到必须重新安装 Ubuntu 的情况。因此,最好不要更改 HOME 目录之外的权限,并且应尽可能避免以 root 身份递归运行命令。
文件权限
Ubuntu 继承了 Unix 的权限概念,对于文件或目录,我们可以允许或拒绝三项任务:
- r(读取)文件/目录可以打开以进行读取访问。
- 瓦(写入)文件/目录可以打开以进行写入/编辑访问。
- X(执行)文件可以像程序/目录一样被执行。
(遍历目录本质上意味着将其用作路径名的一部分。请参阅https://unix.stackexchange.com/a/13891或者https://unix.stackexchange.com/questions/21251了解更多解释。
此外,对于授予谁权限,我们有三种情况:
- 你(用户)文件的所有者被授予任何权限。
- G(组)该文件所属的组被授予权限。
- o(其他)所有其他人都被授予许可。
现在,为了对这些组合进行排序,我们使用二进制系统,其中每个位定义一个权限。下表可以最好地显示这一点
Permission | Binary | Octal | User | Group | Other |
======================================================
r | 100 | 4 | | | |
w | 010 | 2 | | | |
x | 001 | 1 | | | |
=======================================================
Number
现在如果我们想要例如
a)文件所有者(=用户)有r伊德,瓦仪式和Xecute 权限,
b)文件所属组授予read 和 eXecute 权限,以及
c)所有其他权限只能具有r阅读权限。
那么最终的文件权限将是:
u g o
rwx r-x 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)的总数。结果数字为:
u g o
7 5 4
我们现在有两个选项可以更改权限位chmod
:
chmod u+rwx g+rx o+r filename
或者更简单
chmod 751 filename
这两个命令的作用相同。
我们家中新创建的文件的默认权限为 664 (-rw-rw-r--)。
如果我们希望文件作为程序可执行,我们就必须改变此权限。
请注意,我们还必须更改此可执行文件所在目录的权限。只有当文件的和目录的可执行位已设置,我们将被允许将此文件作为程序运行。
当将文件复制到我们的家中时,它将失去它的权限,并将被我们自己的默认权限替换(除非我们使用高级选项(例如存档选项)进行复制)。
还要注意,文件可能会从其挂载点或挂载选项继承其权限。当挂载不支持 Unix 权限的 Windows 格式驱动器时,这一点很重要。
用户和组
我们很快意识到这只是故事的一半。我们还需要整理物品。为此,每个文件或文件夹都有明确的所有者和明确的组成员身份。
每次我们创建一个文件时,我们都将成为该文件的所有者,并且该文件的组也将是我们。ls -l
我们可以看到权限、所有权和组,如以下示例输出所示:
-rw-rw-r-- 1 takkat takkat 4096 Sep 12 20:25 test
- 我们只被允许更改属于我们的文件的权限、组或所有权。
如果我们不是文件所有者,则会出现错误。只有 root 才能更改所有文件的权限。这就是为什么我们在编辑不属于我们的文件的权限时Permission denied
必须使用。有两个命令可以执行此操作sudo
chown
对于用户和组以及chgrp
仅限团体。
要将文件所有权从任何人更改为用户takkat
和(可选)组,takkat
我们可以发出以下命令:
sudo chown takkat[:takkat] testfile
要仅将文件所属组更改为takkat
我们发出
sudo chgrp takkat testfile
阅读命令的手册页以了解更多详细信息和选项。还有一份更详细的指南推荐进一步阅读:
- Ubuntu 社区帮助:文件权限
还可以在这里找到一些相关问题:
答案2
每个文件均具有三种不同类别的权限:
- 文件的所有者,
- 与文件关联的组,以及
- 其他人。
权限是指读取文件的权限、写入文件的权限,或者在脚本或程序的情况下执行文件的权限。
在 CLI 上,您可以
- 使用 更改所有者
chown
,例如chown guillermooo
- 更改组
chgrp
,例如chgrp root
- 使用 更改权限
chmod
,例如chmod u+w filename.ext
(为文件所有者添加写权限filename.ext
)
如果您想了解有关每个工具的更多信息,请打开终端并输入man [tool]
,例如man chmod
。