文件权限一般可认为是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号 
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号对应的数据域了?对,就是这样。 
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不可用),可以往该目录下添加、修改、删除文件。可以通过cat来读取该目录下的文件or目录的内容,由于得不到该目录下存储了那些文件,在不知情的情况下只能通过猜,cat + 文件名获得文件内容,所以这样依然不保密。 
--x:可以进入cd该目录,看不到存储情况,也不能往该目录下添加、修改、删除文件。但是依然可以通过cat + xx(猜)来获得该目录下的文件的内容。 
rw-:不能进入cd该目录,用ls仅仅可以获得文件名和目录名,因为获取不到这些文件的inode号,当然也不能获得该目录下的文件的内容。不能往该目录下添加、修改、删除文件。 
======

最后总结一下吧: 
1.目录文件虽然是文件(唉,谁叫Linux的核心理念就是Everything is file),但是存储内容的只是一张表而已,关于文件名和inode号的映射关系。 
2.文件的扩展名和文件类型之间,没一毛钱关系。 
3.文件的文件名和文件实际存储内容之间,没一毛钱关系。 
4.要知道如何查找到一个文件内容的过程。 
5.为什么同一个文件系统移动文件要比跨文件系统快? 
答:因为只需要修改某个目录中路径和inode对应关系即可,不需要重新写一遍数据域。 
6.什么是买来的500G的硬盘,格式化完后总是少了达不到500G?

答:从本文可知,inode-table也是需要占用存储空间的,所以缺少的一部分中inode-table占用了不少。

关于LINUX文件与目录的问题说明的更多相关文章

  1. Linux文件和目录权限详细讲解

    转载请标明出处: http://www.cnblogs.com/why168888/p/5965180.html 本文出自:[Edwin博客园] Linux文件和目录权限解读 如何设置Linxu文件和 ...

  2. Linux 文件与目录管理

    Linux 文件与目录管理 我们知道Linux的目录结构为树状结构,最顶级的目录为根目录 /. 其他目录通过挂载可以将它们添加到树中,通过解除挂载可以移除它们. 在开始本教程前我们需要先知道什么是绝对 ...

  3. CentOS(十)--与Linux文件和目录管理相关的一些重要命令②

    在结束了第二期的广交会实习之后,又迎来了几天休闲的日子,继续学习Linux.在上一篇随笔 Linux学习之CentOS(十七)--与Linux文件和目录管理相关的一些重要命令① 中,详细记录了与Lin ...

  4. CentOS(九)--与Linux文件和目录管理相关的一些重要命令①

       接上一篇文章,实际生产过程中的目录管理一定要注意用户是root 还是其他用户. 一.目录与路径 1.相对路径与绝对路径 因为我们在Linux系统中,常常要涉及到目录的切换,所以我们必须要了解 & ...

  5. Linux - 文件和目录常用命令

    文件和目录常用命令 目标 查看目录内容 ls 切换目录 cd 创建和删除操作 touch rm mkdir 拷贝和移动文件 cp mv 查看文件内容 cat more grep 其他 echo 重定向 ...

  6. linux文件与目录管理笔记

    ### Linux文件与目录管理 ---------- 绝对路径: / 相对路径:不以/开头的 当前目录 . 上一个工作目录 - 用户主目录 ~ root账户的主目录是/root 其他用户是/home ...

  7. linux文件权限目录配置笔记

    ###linux 文件权限目录配置笔记 ---------- 多人多任务环境 linux 一般将文件可存取的身份分为三个类别:owner group others Permission deny ls ...

  8. Linux文件与目录管理(一)

    一.Linux文件与目录管理 1.Linux的目录结构是树状结构,最顶级的目录是根目录/(用"/"表示) 2.Linux目录结构图: /bin:bin是Binary的缩写,这个目录 ...

  9. 【转】第七章、Linux 文件与目录管理

    原文网址:http://vbird.dic.ksu.edu.tw/linux_basic/0220filemanager.php 第七章.Linux 文件与目录管理 最近升级日期:2009/08/26 ...

  10. 第七章、Linux 文件与目录管理

    第七章.Linux 文件与目录管理   1. 目录与路径 1.1 相对路径与绝对路径 1.2 目录的相关操作: cd, pwd, mkdir, rmdir 1.3 关於运行档路径的变量: $PATH ...

随机推荐

  1. 14.C#属性访问器、命名空间、pragma指令(七章7.3-7.5)

    看到一些零星的知识片,今天就用自己的理解说明下,也是因为太简单了,一下就过的,也是我们日常开发中常用.留下一个脚印,当书不在手上的,也能翻出来看看.说下属性访问器.命名空间和pragma指令. 属性访 ...

  2. JavaScript基础---语言基础(2)

    运算符 1.一元运算符 2.算术运算符 3.关系运算符 4.逻辑运算符 5.*位运算符 6.赋值运算符 7.其他运算符 8.运算符优先级 ECMA-262描述了一组用于操作数据值的运算符,包括一元运算 ...

  3. ThreadLocal模式的核心元素

    首先来看ThreadLocal模式的实现机理:在JDK的早期版本中,提供了一种解决多线程并发问题的方案:java.lang.ThreadLocal类.ThreadLocal类在维护变量时,世纪使用了当 ...

  4. Android开发环境的调研

    在大二下,由于课程需要,就去自学Java,当时就借了一本java面向对象的书来看,根据书上的说明搭建环境,下载了JDK1.6和eclipse.但从来没有用过eclipse,java也就只是刚入门而已. ...

  5. Codeforces Round #379 (Div. 2) D. Anton and Chess 模拟

    题目链接: http://codeforces.com/contest/734/problem/D D. Anton and Chess time limit per test4 secondsmem ...

  6. codevs 1835 魔法猪学院 A*寻k短路做了一个月卡死在spfa那了/(ㄒoㄒ)/~~

    SPFA时点出队后一定要把在队内的标记置为false!SPFA时点出队后一定要把在队内的标记置为false!SPFA时点出队后一定要把在队内的标记置为false! 我因为这个卡了一个月大家信吗?测得时 ...

  7. hdu4333 扩展KMP

    慢慢研究可以发现,可以用扩展kmp来求.由于扩展kmp的next[]只有一部分,当前位子前面那部分和母串的后部分,所以可以将字符串复制接在后面一次. 先求如果next[]>0&& ...

  8. 使用quartz 定时任务

    Quartz 是一个开源的作业调度框架,它完全由 Java 写成,并设计用于 J2SE 和 J2EE 应用中.它提供了巨大的灵活性而不牺牲简单性.你能够用它来为执行一个作业而创建简单的或复杂的调度. ...

  9. Java-list,set,map的区别

    jdk中api的定义 Collection ├----List │ ├----LinkedList │ ├----ArrayList │ └----Vector │ └----Stack └----S ...

  10. Shell重定向&>file、2>&1、1>&2的区别

    shell上: 0表示标准输入 1表示标准输出 2表示标准错误输出 > 默认为标准输出重定向,与 1> 相同 2>&1 意思是把 标准错误输出 重定向到 标准输出. & ...