问题描述
您能简要解释一下用于管理文件权限的主要概念和命令行工具吗?
最佳解决方法
每个文件都有三个不同类别的权限:
-
文件的所有者,
-
与文件关联的组,和
-
其他人。
权利是指在脚本或程序的情况下读取文件的权利,写入文件的权限或执行文件的权限。
在CLI上,您可以
-
使用
chown
更改所有者,例如chown guillermooo
-
使用
chgrp
更改组,例如chgrp root
-
使用
chmod
更改权利,例如chmod u+w filename.ext
(为文件filename.ext
的所有者添加写入权限)
如果您想了解有关这些工具的更多信息,请打开终端并键入man [tool]
,例如: man chmod
。
次佳解决方法
Warning: Changing permissions of files and directories is potentially harmful and may render your system unusuable. When run recursively as root on the wrong path we may come to a point from where we will have to reinstall Ubuntu. It is therefore a good idea to not change permissions outside of HOME directories, and running the commands recursively as root should be avoided whenever possible.
文件权限
Ubuntu继承了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)文件的组授予读和执行权限,c)所有其他人只应具有读访问权限。
然后生成的文件权限将是:
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
两个命令都会这样做。
The default permission of a newly created file in our home will be 664 (-rw-rw-r–).
如果我们希望文件可以作为程序执行,我们将不得不更改此权限。
-
请注意,我们还必须更改此可执行文件所在目录的权限。只有同时设置了文件和目录的可执行位,我们才允许将此文件作为程序运行。
-
将文件复制到我们家时,它将失去它的权限,这些权限将被我们自己的默认权限所取代(除非我们使用高级选项进行复制,例如存档选项)。
-
另请注意,文件可以从其挂载点继承其权限。挂载选项。在安装不支持Unix权限的Windows格式化驱动器时,这很重要。
用户和组
我们很快意识到这只是故事的一半。我们还需要整理物品。为此,每个文件或文件夹都具有已定义的所有者和已定义的组成员身份。
每次我们创建文件时,我们都将成为文件的所有者,文件的组也将是我们。使用ls -l
,我们可以看到权限,所有权和组,如以下示例输出所示:
-rw-rw-r-- 1 takkat takkat 4096 Sep 12 20:25 test
- We are only allowed to change permissions, groups or ownership of a file that is our’s.
如果我们不是文件所有者,我们将收到Permission denied
错误。只有root可以为所有文件更改此值。这就是为什么我们必须在编辑非我们文件的权限时使用sudo
。有两个内置命令可以为用户执行chown
,为组执行chgrp
。
要将文件所有权从任何人更改为takkat
,我们可以发出以下命令:
sudo chown takkat testfile
要将文件的组更改为takkat
,我们会发出
sudo chgrp takkat testfile
阅读命令的联机帮助页以获取更多详细信息和选项。还有一个更好的更详细的指南建议进一步阅读:
-
Ubuntu社区帮助:File Permissions
还可以在这里找到一些相关问题
参考资料