Linux下文件的权限

首先,对于Linux我们需要明确一点:

    Linux下一切皆文件。

在Linux下的一个目录下输入ll命令:

Linux下文件的权限_第1张图片

1.Linux文件类型:

①普通文件(首字符为【-】);

②目录(首字符为【d】);

③连接文件(首字符为【l】):这里分为软连接和硬连接;

④设备与设备文件:这里可以分为块设备(首字符为【b】)和字符设备(首字符为【c】);

块设备:例如硬盘,读写单位为512字节,支持随机访问;

字符设备:例如键盘,读写单位为字节,支持顺序访问;

⑤套接字(首字符为【s】);

⑥管道(首字符为【p】);

2.Linux权限管理:

根据上图我们知道对于一个文件,在文件拥有者,文件所属组,以及其他用户有着不同的权限,并且如上图,在ll命令下会标示出来,对应的三个字符从左往右依次表示读文件权限(r),写文件权限(w),以及可执行权限(x),若无某项权限,则在对应位置为“-”

而对于指定的文件,我们在Linux下可以通过命令来修改权限:

①修改文件拥有者权限:

修改前:


修改后(增加可执行权限):


②修改文件所属组权限:

修改前:


修改后(去掉写文件权限):


③修改其他用户权限:

修改前:


修改后(增加写文件权限和可执行权限):


综上,我们可以总结出通过chmod修改文件权限的格式:

Linux下文件的权限_第2张图片

但是,当要修改多个对象的权限时这样修改有点麻烦,所以

Linux下文件的权限_第3张图片

通过逗号来将不同的对象隔开。

但是我们还有更方便的办法,因为每组权限有三位,那么我们可以通三个八进制数来修改权限:

Linux下文件的权限_第4张图片

到这里,我们弄清楚了对于同一个文件,对于文件拥有者,文件所属组以及其他用户是拥有他们所特定的权限的,而这里我们不禁要想了,既然对于一个文件,它有它的拥有者和所属组,那么对于这个文件而言,它的拥有者和所属组又是否能改变呢?

答案是肯定的,那么在Linux下,又是怎么来改变的呢?

这里我们就要认识另外两条命令:chown,chgrp。

首先我们切换到超级用户,在超级用户下进行测试:

Linux下文件的权限_第5张图片

由此,我们可以知道chown命令是用来修改文件拥有者的,而chgrp则是用来修改文件所属组的。

出来上面两条命令,我们还要再看一条命令:umask

Linux下文件的权限_第6张图片

通过测试我们很明显发现,umask所显示的后三位数字表示的是当前情况下创建文件所屏蔽的权限,随着umask的值的改变同样是创建目录,创建出的目录的默认权限是不同的。而这里需要注意一点:普通用户默认umask为0002,而超级用户root则是0022

分析到这里我们来讨论一个问题:

对于一个目录,进入这个目录需要哪些权限;而进入目录之后,对于一个普通文件,创建它,对于它所属的目录需要哪些权限?

首先对于目录:

先创建一个目录:

Linux下文件的权限_第7张图片

很显然cd进入文件并没有问题,这里我们移除拥有者的可执行权限:

Linux下文件的权限_第8张图片

cd无法进去,那么我们再恢复可执行权限,并将读文件权限移除:

Linux下文件的权限_第9张图片

这次cd能够进入目录,但ls却又出问题了。

通过上述测试,我们发现对于一个目录文件,要cd进入目录,必须带有可执行权限,而我们一般理解要带的对文件权限只是拿来限制在进入目录之后读取目录中的内容的。

而对于创建一个普通文件,我们做如下测试:

移除目录的写文件权限:

Linux下文件的权限_第10张图片

所以对于一个普通文件,创建它,对于它所属的目录必定需要写文件权限。

当然,以上所述皆是对于普通用户而言,对于超级用户,就不在有这些方面的限制了。

首先,我们先移除目录的读,写,可执行三个权限,在这个前提下切换到超级用户root进行操作:

Linux下文件的权限_第11张图片

跟我们之前猜想一样,没有任何限制。

在这篇文章末尾,我们来看一个命令stat,在上面的测试中我们用了多次ls和ll这两命令,它们的区别也就不用多说了,而对于stat这个命令:

Linux下文件的权限_第12张图片

对于这个命令,它是用来显示它后面所跟的文件的详情信息的,而在这些信息里面我们要重点来分析Assess,Modify,Change这三条信息:

1Access是指“访问时间”:最后一次访问文件的时间(仅仅是访问,没有做任何修改)

对于文件来说,当我们用编辑器打开文件,或使用cat ,more 等等命令读取文件内容,以及使用file cp命令操作文件,或执行可执行文件时,Access时间会被更新,空文件也不例外。

对于目录来说,只进入目录不会更新其Access时间,但是通过ls查看目录内容时,Access时间就会更新。

使用ls -lu查看文件时,会显示出来文件的Access时间。

2Modify是指“更改时间”:最后一次更改文件的时间

当更改一个文件的内容时,此文件的Modify时间记录会被更新。Modify时间更新时,AccessChange时间都会得到相应的更新。用ls -l看到的时间是文件的Modify时间

3Change是指“改变时间”:最后一次对于文件属性(包括文件的大小,权限,状态等)的更改时间

主要是指文件的状态或属性的改变。对一个文件或目录进行mv, chown, chcgrp等操作后,change时间会更新。ls -lc显示的是Change time






你可能感兴趣的:(Linux随笔)