linux下普通文件和目录文件有什么区别 linux的文件与目录列表命令为


linux下普通文件和目录文件有什么区别 linux的文件与目录列表命令为

文章插图
文件权限一般可认为是0 123 456 789,一共十位:
0:表示该文件的文件类型 。Windows里面是使用了一种文件关联的技术 , 通过扩展名来关联相应的应用程序,使得双击某个文件,就能达到调用相应的应用程序来打开它的目的,这样简单快捷 。然而对于用户来说,好处是方便,坏处是隐藏了一个实质性的东西:文件的真正的类型 , 与其扩展名实际上是毫无关联的 。
举例来说:一个纯粹的文本文件,我可以给它命名“我的歌声里.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这个概念,基本上就会很吃亏了 。
再次强调,文件的内容和该文件当时所用的文件名毫无关联;该文件的类型,也与该文件当时的文件名 , 毫无关系 。
查看一个文件的内容,实际上是这样的一个过程:
举例来说,你用了这个命令: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号
【linux下普通文件和目录文件有什么区别 linux的文件与目录列表命令为】bin 18
var 19
tmp 20
... ...
好了 , 我们从“/” , 这个目录文件中找到了“/tmp”文件名对应的inode号,就是20 。(假设啊)
4.然后我们通过inode号20,去inode-table里面找寻20对应的数据域,然后从数据域中,我们又会找到一张表:(为什么又是表呢?因为“/”是一个目录 , “/tmp”也是一个目录,那当然数据域里面存的还是表啦)
文件名 inode号
abc.txt 8899
bbb.mp3 10088
kkk.jpg 20000
... ...
好了,我们找到了/tmp/abc.txt的inode号了,就是8899 。根据上面的规律,我们是不是又得去inode-table里面找8899号对应的数据域了?对 , 就是这样 。

推荐阅读