文件权限通常可觉得是0123456789,一共十位:
0:表示该文件的文件类型。Windows上面是使用了一种文件关联的技术,通过扩充名来关联相应的应用程序,促使双击某个文件,就能达到调用相应的应用程序来打开它的目的学linux有前途吗,这样简单快捷。但是对于用户来说,用处是便捷,益处是隐藏了一个实质性的东西:文件的真正的类型,与其扩充名实际上是毫无关联的。
举例来说:一个纯粹的文本文件,我可以给它命名“我的歌声里.mp3”,之后在win下双击,会调用相应的音乐播放器来打开,结果显而易见,肯定是错误的。那反过来,一个真正的MP3文件我也可以给它命名“花清册.txt”,在win下双击,通常会调用相应的文本编辑器来打开,不过我说你也晓得,显示的一定是乱码。
前面两个反例是为了说明一个观点,某个文件真正的类型与其扩充名没一分钱关系。
这么在不晓得文件扩充名的情况下,怎样晓得文件的类型呢?在Linux是这样的。
Linux中文件类型只有以下这几种:
1.-,普通文件。
2.d,目录文件,d是directory的缩写。
3.l,软联接文件,又名符号链接文件,s是soft或则symbolic的缩写。
4.b,块文件,是设备文件的一种(还有另一种),b是block的缩写。
5.c,字符文件,也是设备文件的一种(这就是第二种),c是character的文件。
Linux系统最原始的也只有这五种,所以第0位,只能是以上五者之一。
这么你会有疑惑,
1.MP3文件是是哪种?答案:普通文件。
2.二补码文件是哪种?答案:普通文件。
3.文本文件是哪种?答案:普通文件。
4.为何硬联接没有类型表示?答案:硬联接和软联接,名子上似乎只差一个字,本质完全不同,硬联接也是文件。其类型是普通文件。
为何里面要说那么多呢?目的是为下文做知识铺垫。
这么123-456-789都好说,了解这块儿的人都晓得,她们只是用户-属组-其他这三组之间的区别,我们拿其中任意一组作为反例来讲解rwx皆可。
r:read,w:write,x:execute。
我们应当怎样去记忆这二者之间的区别呢??莫非死记硬背?NO。
我们应当知其然还得悉其所以然,下边我企图从这查询文件以及内容的本质出发,来探讨rwx权限在这二者头上为什么有不同的意义!
理解下边的所说的,须要关于Linux的文件系统的知识做铺垫。倘若不晓得inode这个概念,基本上都会很吃亏了。
再度指出,文件的内容和该文件当时所用的文件名毫无关联;该文件的类型,也与该文件当时的文件名,毫无关系。
查看一个文件的内容linux系统有哪些文件类型,实际上是这样的一个过程:
举例来说,你用了这个命令:cat/tmp/abc.txt
1.你只传递了一个绝对路径,/tmp/abc.txt,系统首先要晓得/tmp/abc.txt文件的inode是多少才行,怎么获知呢?
2.记住一个规律,某文件的父目录会(记录)晓得该文件的inode号!(此刻我想你是不是悟出一点哪些了,不用急,接着往下看)
3.这么我得到“/tmp/abc.txt”这个文件名,我得先晓得/tmp目录的情况,要晓得/tmp目录的情况,我得先晓得/目录的情况,所以我就可以从/目录开始(假定/目录的inode号是0,但是这是写死的),之后再去一张称作inode-table的表中查找inode号0所指向的数据域,之后从数据域上面可以找到一些类似于下边的内容:(看上去像一张表,不是么?虽然可以想像到,目录文件就是一张表,储存了它内部有什么文件名,以及该文件名对应的inode号)
文件名inode号
bin18
var19
tmp20
......
好了,我们从“/”,这个目录文件中找到了“/tmp”文件名对应的inode号,就是20。(假定啊)
4.之后我们通过inode号20,去inode-table上面寻找20对应的数据域,之后从数据域中,我们又会找到一张表:(为何又是表呢?由于“/”是一个目录,“/tmp”也是一个目录,那其实数据域上面存的还是表啦)
文件名inode号
abc.txt8899
bbb.mp310088
kkk.jpg20000
......
好了,我们找到了/tmp/abc.txt的inode号了,就是8899。按照前面的规律,我们是不是又得去inode-table上面找8899号对应的数据域了?对,就是这样。
5.我们找到inode号8899对应的数据域,于是我们会发觉如下一些内容:
“abcdefg”(假定文件内容就是这样)
...
又有疑惑了,为毛此次不是表了?
答案:/tmp/abc.txt文件不是目录文件了,它是一个普通文件,他储存的通常都是一些字符串。
彰显在本质上:
普通文件:储存普通数据,通常就是字符串。
目录文件:储存了一张表,该表就是该目录文件下,所有文件名和inode的映射关系。
从父目录中获得本文件的inode号---->找到inode-table表中找到这个inode号对应的数据域中的起点以及其他信息---->去这个数据域中读取该文件的内容(普通文件的内容通常是字符串,目录文件的内容是一张表)
假如你真心读懂里面我说的了,这么接出来就显得简单多了。
关键就是访问任何一个文件,要看是否能搞到inode号,搞不到就没辙了。搞到inode就好说了,拿着inode号去inode表中查找即可,最后找到数据域,这么就可以找到文件的内容了
之后整个过程这不仅仅跟本文件权限有关,还跟它的父目录(还有父目录的父目录...)权限有关(是否能搞到本文件的inode)
彰显在命令上:(话说这才是最实际的假象)
======
对于普通文件来说,rwx的意义是:
r:可以获得这个普通文件的名子和内容。
w:可以更改这个文件的内容和文件名。可以删掉该文件,并且用户会得到是否删掉写保护文件的prompt。
x:该文件是否具有被执行的权限。
======
对于目录文件来说,rwx的意义是:
r-x:可以步入cd该目录,可以获得该目录下储存情况,而且不能更改这个目录内部储存的文件(目录)的名子,也不能在该目录下新建文件和目录
-wx:可以步入cd该目录,并且看不到该目录下的储存情况(ls不可用)64位linux,可以往该目录下添加、修改、删除文件。可以通过cat来读取该目录下的文件or目录的内容,因为得不到该目录下储存了这些文件,在不知情的情况下只能通过猜,cat+文件名获得文件内容linux系统有哪些文件类型,所以这样仍然不保密。
--x:可以步入cd该目录,看不到储存情况,也不能往该目录下添加、修改、删除文件。并且仍然可以通过cat+xx(猜)来获得该目录下的文件的内容。
rw-:不能步入cd该目录,用ls仅仅可以获得文件名和目录名,由于获取不到这种文件的inode号,其实也不能获得该目录下的文件的内容。不能往该目录下添加、修改、删除文件。
======
最后总结一下吧:
1.目录文件其实是文件(唉,谁叫Linux的核心理念就是Everythingisfile),并且储存内容的只是一张表而已,关于文件名和inode号的映射关系。
2.文件的扩充名和文件类型之间,没一分钱关系。
3.文件的文件名和文件实际储存内容之间,没一分钱关系。
4.要晓得怎样查找到一个文件内容的过程。
5.为何同一个文件系统联通文件要比跨文件系统快?
答:由于只须要更改某个目录中路径和inode对应关系即可,不须要重新写一遍数据域。
6.哪些是买来的500G的硬碟,低格完后总是少了达不到500G?
答:从本文可知,inode-table也是须要占用储存空间的,所以缺乏的一部份中inode-table占用了不少。