linux下文件与目录的权限

在linux下命令窗口中,我们会经常用 ll(也就是ls -al的缩写) 来查看某个目录下的一些文件或目录权限,而 ll 指令显示出权限都是以rwx形式解释的,现在通过下面几个实验来彻底搞清一下这个rwx对文件和目录的意义。


这里说明一下我的linux版本是ubuntu13.10,进行实验的账户有2个,一个是系统账户root,一个是一般账户qw4990。

开始之前先对 ll 出来内容做一些解释,先看下面这个图


第一行是我下达的指令,直接看第二、三行

我们先将每一行按照空格分成9个字段

如第二行就可以分层这样

1:drwxr-xr-x

2:2

3:root

4:root

5:4096

6:2月

7:18

8:13:58

9:dir/

其中字段1就表示的是权限,字段3表示是此文件或目录的所有者,字段4表示的是此文件或目录的所属群组,字段9表示的是此文件或目录的名字。

其他字段和本次实验无关,就不解释了。

关于字段3和4,这里有一个概念要提及,就是linux下的每个文件或目录都有一个所有者和所属群组。更具体的解释和这么设计的意义大家可以看这里 http://vbird.dic.ksu.edu.tw/linux_basic/0210filepermission_1.php  :)

接着我们重点解释字段1

我们先将字段1分成4个部分,按照如下规则,

部分1:第一个字符

部分2:第2、3、4字符

部分3:第5、6、7字符

部分4:第8、9、10字符

于是第二行的字段一就被划分为了    d   rwx    r-x   r-x  这4个部分:)

现在我们分别解释各个部分的意义~~

部分1表示的是此文件的类型,d表示其是目录(如第二行,表示dir就是一个目录),而-(减号)就表示是一般文件(如第三行,表示file为一个一般文件),当然这个部分还有其他的符号,表示其他的文件类型,不过这里我们只讨论目录和一般文件  :)

部分2表示的是此文件所属者对这个文件的权限,所属者是谁呢?就是字段3表示的账户喽~    部分2由3个字符组成,每个字符都代表一种权限。

r:表示的是读取权限

w:表示的是写入权限

x:表示的是执行权限

比如上面的rwx,就表示dir的所属者(就是root喽)对dir有 读取,写入,执行的权限

当然还有-(减号),-在哪一位上,就表示没有对应那一位的权限~~

举个例子,假如上面部分2的权限不是rwx,是r-x,那就表示所属者对dir有 读取,执行的权限,没有写入的权限;如果极端一点,部分2为---,就表示所属者对dir什么权限都没有~~~

部分3表示的是此文件的所属群组的成员的这个文件的权限,所属群组就是字段4表示的群组。而组成部分3的字符含义和部分2含义一样。

部分4表示的是其他人对这个文件的权限,其他人就表示既不是此文件所属者,也不是其所属群组成员的账户。组成部分4的3个字符含义和部分2含义一样。


预备工作完成了,也基本了解rwx了,现在我们进行下面几个实验深入理解一下其含义。


====================================================================================================================================


首先要明白的是同样的rwx对文件和目录的意义是不一样的!

文件

首先来看看文件的权限是怎么样的。

我们先用系统账户在/home/qw4990下建立一个文件file,并且在里面输入"this is file",权限设定如下图,所属群组和所有者都设定为root

linux下文件与目录的权限_第1张图片

现在我们将账户切回普通账户(我这里用的是qw4990)

然后尝试读取或者写入一下这个文件(因为file的群组和所属者是root,而我的qw4990账户不属于root群组,所以qw4990对于file的权限只包含字段1的第四部分,在这里也就是 ---


就出现了权限不够的提示。

那我们尝试一下用ll查看文件的基本信息或者删除文件呢?

linux下文件与目录的权限_第2张图片

首先用ll是可以查看到了文件的基本信息。

然后用rm也删除掉了file!!!

所以这里有一点非常重要,一个文件能否被删除和文件的基本查看与其本身的rwx权限无关!!与什么有关往下面看就知道了:)

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

接着我们用给访问file的其他人加上可读的权限


再用qw4990尝试读写它!


发现能够读出file,而对于写入,依旧失败。

可见r对于文件的意义也就是让访问者可以查看文件的内容,而不能修改!

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

然后我们吧file的可读权限变为可写权限


再用qw4990尝试读写它!

linux下文件与目录的权限_第3张图片

发现读取文件失败,而写入没提示失败,我们再用root账户读取file试试是否真的写入进去!


可见写入是成功的!

总结一下w对文件的含义,也就是能够让使用者修改文件内的内容!

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

接下来就是x权限了,我认为这个是最有意思的一个权限:)
首先说明一下,在windows下,文件能否执行是通过后缀名来体现的,比如.exe等,而linux下文件能否执行与后缀名没有关系:),而是与这个x权限有关!
先看看下面这个图~~

这个exe是我用其他工具写的一个程序~

可以发现他的权限x都是打开的!

我们可以执行一下他  输入 ./exe 就将它执行了,而下面的Hello!就是执行的结果。


接下来我们再用刚才的file试试,给他加上x的权限


给file加上x后,我们尝试运行它,得到了  “hahaha:未找到命令的 ” 提示,而hahaha就是我们刚才给file输入的内容。

怎么解释这个结果呢?

那就是其实当我们输入./file的时候,系统就开始尝试执行file,但是因为file内的内容不符合执行的规则,所以得到了上面的提示。

总之系统是运行了file了,虽然运行失败了:)


接下来我们给file换个内容试试


我们在file中输入一条指令,让后执行file,得到的结果就是file内指令执行的结果!这下是能够实实在在的说明file被执行了吧:)


最后再做一个对比实验,不改变file的内容,给file取消x权限,然后运行试试


出现了权限不够的提示:)


现在用一句话再总结一下x权限对文件的作用:决定文件能否被执行!

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

权限能否组合?~~

直接以下面这个例子来说明,先看图


我用chgrp和chown把file的所属者和群组都改为了qw4990

现在我们再尝试用qw4990去读取一下file。

实验之前先分析一下,

如果从所有者的角度,qw4990能够读取却不能写入;

而从群组的角度,qw4990能够写入却不能读取。

一开始我是猜测qw4990的最终权限是二者的组合,既为 rw- , 但实际结果很有趣 :)

结果如下图


最终的结果是r--,而不是rw-或者-w-!!

由此可见2点,一是linux下的权限是不能够组合的;二是在此冲突的情况下,所属者的优先级大于所属群组!!

===============================================================================================================================


目录

接下来开始说目录~~

从r权限说起! 先文字描述一下r对目录的意义:表示具有读取目录结构列表的权限,所以当你具有读取(r)一个目录的权限时,表示你可以查询该目录下的文件名数据。所以你就可以利用 ls 这个指令将该目录的内容列表显示出来!

建立一个目录,群组和所属者设定为root,权限设定如下,并在里面建立一个文件file(权限对所有人都是rwx)

linux下文件与目录的权限_第4张图片

注意,用ll或者ls查看目录信息时,要加上-d,不然会显示目录内的文件信息!!

接下来我们用qw4990试试在r--权限下能对这个目录干些什么

linux下文件与目录的权限_第5张图片

首先是我尝试进入目录,权限不够,

接着我们用ls显示dir内的文件信息,虽然出现了警告,但是还是吧dir内的文件给我们显示了出来(就是那个file)!

然后我们尝试用ll显示dir内文件更加详细的信息,出现了警告,但是也还是得到了一些结果,虽然不详细(就是那些有问号的地方)!

最后我们尝试读取dir内的那个文件,出现警告,读取失败。


由此总结一下r对目录的含义,它只允许用户初步的查看一下目录内的情况,包含哪些文件、子目录等,就连知道这些文件和子目录的一些详细信息和进入目录都不允许。

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

接下来说说x权限,狭隘通俗一点的说:就是决定你能否进入该目录!

我们把刚才那个目录的其他人权限变为--x,再用qw4990试试能干什么

linux下文件与目录的权限_第6张图片

其实可以发现这样的效果很是奇怪 :)

我能够进入目录,也可以对目录内有权限的文件进行相应操作,但是却不能改变目录结构(添加删除文件),甚至不能用ls查看目录结构!!

可见x对目录的意义只是决定你能否进入目录内:)


通过这个实验,还可以解决前面关于文件删除和基本查看的疑问:)

这里因为我们不能更变目录的结构(权限不够),所以不能删除文件!

所以文件能否删除,取决与所在目录的权限:)


------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

现在说说目录最NB的权限,w权限

还是先用文字说明一下,你拥有w权限,你就具有异动该目录结构的权限,也就是

  • 建立新的文件与目录;
  • 删除已经存在的文件与目录(不论该文件的权限为何!)
  • 将已存在的文件或目录进行更名;
  • 搬移该目录内的文件、目录位置。

文字已经说的很清楚了,具体的实验就大家自己试试吧:)

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

目录套目录

现在这里又产生了一个问题,

如果有一个目录dir,里面又有一个目录dir0

那么我在dir0下的权限到底应该看dir还是看dir0?


把问题具体一点,现在存在目录dir,它对其他人的权限是rwx,在dir内,又有一个目录,dir0,它对其他人的权限是r-x。

那么当我以其他人的身份进入dir0后,到底能不能建立新的文件?


对于这个问题,还是请大家自己试试:)

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

其他问题

首先建立一个母目录,dir,其权限对所有人都为rwx,

然后在dir内建立一个子目录dir0,其权限对所有人都为---,

接着在dir内建立一个子目录dir1,其权限对所有人都为rwx,

最后在dir内建一个子文件file0,起权限对所有人都为---。

最后情况是


接着我们在这个基础上进行实验

实验一:对file0进行移动和复制


发现能够进行移动,不能进行复制!!

解释:要复制一个文件,首先就要读取他,而file0没有读取权限,所以复制自然失败。


实验二:对dir0的移动和删除

linux下文件与目录的权限_第7张图片

发现移动dir0失败,而删除dir0却成功了?

虽然我们对dir0没有w权限,不能更改他的目录结构,但是我把他整个移动一下,是没改动其结构的,应该没问题才对?

个人解释:移动dir0真的没有改变它的目录结构么?答案是改变了,因为目录中除了弃应该包含的文件外,还包含另外2个特殊的文件,

一个是象征其自身的 ./

另一个是象征其父亲目录的 ../

我们用dir1来做例子,用ll查看后如下图

linux下文件与目录的权限_第8张图片

看到了吧,绿色的那两部分!!!

那么既然一个目录包含了其父亲目录的基本信息,那你移动他过后,这个文件肯定会发生改变,因此出现了权限问题!

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


总结

要让别人查看你的目录起码要给别人r-x的权限。

对于具体指令所需要的权限,还是要从指令的机制去分析(如cp指令)。

对于目录套目录的情况,实际权限以当前目录为主!






你可能感兴趣的:(Linux日志)