一、用户对文件或目录都有哪些权限?
四种:读、写、执行、没有权限
二、如何表示这四种权限?
如果用十进制数字表示,分别为:4、2、1、0;如果用字符表示,分别为:r、w、x、-。个人觉得,使用chmod命令更改文件或目录权限时,数字表示法显然比字符表示法简洁明快
三、对于文件和目录而言,这四种权限是否具有同样的含义?
并非如此,如下所示:
---------------------------------------------------------------------------
普通文件 目录
r:用户拥有读取该文件内容的权限 用户拥有列出其中文件列表的权限
w:用户拥有修改该文件内容的权限 用户拥有在其中创建、删除文件的权限
x:用户拥有执行该文件的权限 用户拥有进入该目录、复制其中文件的权限
----------------------------------------------------------------------------
对目录的这些各个单项权限的操作,我都有一一试验,详细结果贴在了文末,图片就不再贴出。需要提醒的是:
1、拥有某项权限,并不意味着就一定能够对文件或目录做相应的操作。
2、普通文件拥有r、w、x权限或它们权限的组合,针对的是文件内容,与文件本身的操作无关。若想对文件本身进行删除、移动等操作,需要其上层目录的权限,下面会讲到。
四、为什么要同时设定三组用户的权限?
这是因为linux里文件或目录的权限是和用户管理联系在一起的。我们设定文件的权限时,除了设定属主的权限,还要设定属主同组用户的权限,以及其它用户的权限。关于Linux用户管理,请自行搜索相关资料。
五、为什么很多文件或目录的权限都是一个权限组合?
前面讲到,拥有某项权限并不意味着一定能够完成相应操作,原因之一就是:单一权限无法保证我们完成相应的操作,所以设定文件或目录权限时,通常使用权限的组合,这对目录的权限设定尤其重要。例如,从道理上讲,如果目录拥有w权限,我们就可以在其中新建、删除文件,但从实际的操作结果来看,这些操作无法完成,只有当目录同时拥有了x权限时,才可以进行上述的操作。-wx权限,即是一个权限组合,对目录而言,表示用户可以在其中创建、删除文件;再如常用的r-x组合:对目录来说,表示用户可以列出目录内容,复制其中的文件。可以讲,没有x权限的配合,目录的w权限就是一句空话,没有x权限的配合,就无法对目录中的内容进行任何操作,至于对目录本身的操作,由其上层目录的权限决定。能理解吧?不能进入目录的话,何谈对目录中文件进行操作呢?!
目录拥有权限组合rw-、r-x、-wx时,我们能对其中的文件或子目录作哪些操作呢?大家可以先猜测一下,然后动手试验一下,看看自己的猜测是否正确。rwx权限就不用考虑了,基本上是完全权限,当然,特殊权限除外。
六、文件或目录的权限受哪些方面的影响?
拥有某项权限并不意味着一定能够进行相应操作,并不仅仅是因为需要权限的组合,有时候就会出现这种情况:我们正确设置了文件或目录的权限组合,却仍然不能对它们进行相应的操作。这是因为,能否对文件或目录进行各种操作不但取决于文件自身的权限,还要受到其上层目录的权限的影响。本文的第三、第五部分都已经提到了这一点。要牢记它,这非常重要!
先来看文件的操作,包括两部分:对文件本身的操作,以及对文件内容的操作。
对文件本身的操作,一般是移动、复制、删除、重命名,这些所有的操作都是由其上层目录的权限决定的。能否理解?文件是目录中的文件,我们知道,linux把目录也看成一个文件,那么目录里的所有东西都可看成文件的内容,因此,目录的权限决定了目录中的文件的操作,这主要是指对文件本身的操作,对文件内容的操作,还需要文件自身权限的配合。举个例子,如下图:
用户lqs的家目录里有一个目录000,其中有一个文件a.txt。家目录lqs已经设置了权限705,目录000权限设定为703,其中的a.txt文件权限设定为700。如图所示,其它用户normal成功地删除了文件a.txt,尽管文件的权限只是700!这是因为文件的删除等操作是由上层目录的权限决定的,而文件的上层目录000的权限为703,它赋予了其它用户在其中添加、删除文件的权限。
因此我们得出结论,能否对目录中的文件本身进行移动、删除、重命名等操作,取决于其上层目录的权限。这里的文件,不但指普通文件,还包括目录文件,即目录的子目录。
对文件内容的操作,一般是指修改文件内容。对文件内容进行操作,首先其目录要有x权限,然后文件要有w权限。如下图所示:
对目录里的子目录的操作,与目录里文件的操作原理一致,但相应权限与前面讲到的目录操作的权限一致。这里不再一一列举。记住,要多用用chmod命令,这些东西你自然会知道。
七、特殊权限
linux里有一些特殊权限,比如s,它们需要4位十进制数字来表示。这里不谈,有兴趣可以自行了解一下。
附录:
一、权限字符表示是如何变成数字表示的?
使用ls –l命令显示文件属性的长格式时,第一个字段就是用来表示文件的种类和权限的,该字段最常见的值为-rwxr-xr-x。一共有10个字符,第一位表示文件类型,后面九位表示文件权限,这9位字符可分成3组,分别表示文件属主的权限,属主同组用户的权限,和其它用户的权限。
rwxr-xr-x表示文件属主具有读、写、执行的全部权限,属主同组用户具有可读权限,其它用户具有可读权限,用十进制数字表示,就是755。
那么,755是怎么来的?
要得出这个十进制数字,需要先把rwxr-xr-x转换成二进制。把它们用二进制数字表示的话,有某项权限即为1,没有为0,那么rwxr-xr-x的二进制表示为111 101 101。
再把111 101 101这三组二进制数字分别转换成十进制。转换算法还记得吗?从右到左,各位上的数字依次乘以2的n次方(n的取值从0开始)。如下所示:
第一组:1x20 + 1x21 +1x22 = 7
第二组:1x20 + 0x21 +1x22 = 5
第三组:1x20 + 0x21 +1x22 = 5
三组数字组合起来,即为755。
其实不用每次都把每一个字符转换成二进制,再转换成十进制,没这么麻烦。因为我们可以算出:可读权限用十进制数字表示为4,可写权限表示为2,可执行权限表示为1,没有权限表示为0,记住它们就不必每次全部转来转去了。
先来看可读权限r--,它的二进制表示为100,把它转换成十进制:0x20 + 0x21 +1x22 = 4
再来看可写权限-w-,它的二进制表示为010,把它转换成十进制:0x20 + 1x21 +0x22 = 2
最后看可执行权限--x,它的二进制表示为001,把它转换成十进制:1x20 + 0x21 +0x22 = 1
二、各个权限具体的操作试验结果如下:
目录的可读权限:可列出目录里的文件,不可重命名、复制、移动、删除其中的文件,不可进入目录
目录的可写权限:不可列出目录里的文件,不可重命名、复制、移动、删除其中的文件,不可进入目录
目录的可执行权限:不可列出目录里的文件,不可重命名、移动、删除其中的文件,可复制其中的文件,可进入目录