linux的文件和目录的区别和联系

本文深入剖析了Linux系统中文件的类型与权限设置原理,详细解释了如何通过inode号访问文件内容,以及不同类型的文件(如普通文件和目录文件)在权限设置上的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文件权限一般可认为是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占用了不少。
7.我不想吃亏,那么我要如何了解Linux文件系统和inode的相关知识,能否推荐个文章?
答:http://www.cyberciti.biz/tips/understanding-unixlinux-filesystem-inodes.html

<think>好的,我现在需要回答用户关于LinuxUnix的联系与区别的问题。首先,我得确保自己准确理解两者的历史关系。Unix是最早由AT&T贝尔实验室开发的操作系统,而Linux是由Linus Torvalds在1991年创建的,受Minix启发。这里要明确,Linux是类Unix系统,但不是Unix的直系后代。 接下来,用户可能想知道它们的联系,比如设计理念的相似性,都是模块化、使用文本流命令行界面等。同时,POSIX标准的重要性,确保兼容性。需要提到Linux遵循了这些标准,从而继承了Unix的许多特性。 然后是区别方面。版权问题,Unix是商业的,有多个分支如AIX、HP-UX,而Linux是开源的,遵循GPL协议。内核方面,Linux是单一内核,而一些Unix系统可能使用混合内核。用户群体不同,Unix多用于企业级服务器,Linux则更广泛,包括桌面嵌入式系统。 还要提到可移植性,Linux支持更多硬件架构,而Unix通常针对特定硬件。软件包管理也是区别之一,Linux有APT、YUM等工具,而Unix各分支有自己的管理方式。 需要验证是否所有信息都准确,比如POSIX标准的细节,Unix的不同分支,以及内核类型的区分。可能用户对技术细节不太熟悉,所以要用简洁明了的例子,比如提到常见的Unix系统如macOS(基于BSD),以及Linux发行版如Ubuntu、CentOS。 最后,确保结构清晰,分点说明联系区别,避免混淆。可能需要检查是否有遗漏的重要点,比如许可证模式的影响,开源社区的角色,以及实际应用场景的例子。确保回答既全面又易于理解,不使用过于专业的术语,但保持准确性。</think>--- ### **联系:Linux 与 Unix 的“血缘”关系** 1. **设计理念传承** - **模块化思想**:两者均遵循“一切皆文件”“小工具组合完成任务”的 Unix 哲学。 - **命令行优先**:如 `grep`, `awk`, `sed` 等工具在 Linux Unix 中通用。 - **文件系统结构**:目录层级(如 `/bin`, `/etc`, `/usr`)权限设计高度一致。 2. **兼容性标准(POSIX)** Linux 严格遵循 **POSIX 标准**(Portable Operating System Interface),确保与 Unix 系统的行为一致。例如: ```bash # 在 Linux Unix 中均可运行的 POSIX 兼容脚本 echo "Hello, POSIX!" | tr 'a-z' 'A-Z' ``` 3. **技术基因相似性** - **Shell 环境**:Bash(Linux 默认 Shell)衍生于 Unix 的 Bourne Shell(`sh`)。 - **系统调用**:文件操作(`open/read/write`)、进程管理(`fork/exec`)等接口完全兼容。 --- ### **区别:从代码到生态的差异** | **维度** | **Unix** | **Linux** | |-------------------|------------------------------------|-------------------------------------| | **内核所有权** | 闭源(如 AIX、HP-UX) | 开源(GPL 协议) | | **代码起源** | 直接源自 AT&T Unix(1970s) | Linus Torvalds 独立开发(1991) | | **发行版分支** | 商业分支(Solaris、macOS BSD层) | 社区分支(Ubuntu、CentOS、Debian) | | **硬件支持** | 通常绑定特定厂商硬件(如 IBM Power) | 支持 x86、ARM、RISC-V 等广泛架构 | | **软件包管理** | 依赖厂商提供(如 Solaris 的 `pkg`) | 统一工具(APT/YUM/DNF/Pacman) | | **典型应用场景** | 金融/电信核心系统、超算 | 云计算、嵌入式设备、桌面 | --- ### **关键历史事件** 1. **Unix 的闭源与分裂** - 1970-80 年代:AT&T 将 Unix 商业化,导致 BSD(伯克利) System V 两大分支。 - 1990 年代:版权纠纷(AT&T 起诉 BSD)促使开源替代品需求激增。 2. **Linux 的诞生** - 1991 年:Linus Torvalds 因不满 Minix 的教育限制,发布 Linux 内核。 - 开源协作模式:全球开发者通过邮件列表协作,快速迭代(对比 Unix 的封闭开发)。 --- ### **实际场景对比** - **企业服务器** - Unix:银行核心系统可能运行 AIX(IBM)或 Solaris(Oracle)。 - Linux:互联网公司普遍使用 CentOS 或 Ubuntu Server。 - **开发环境** ```bash # Linux 特有的 systemd 命令(Unix 一般用 init.d) systemctl restart nginx # Unix(Solaris)特有的服务管理 svcadm restart apache ``` - **硬件兼容性** - Unix:IBM Power 服务器运行 AIX,专用性高但成本昂贵。 - Linux:树莓派(ARM)到 AWS EC2(x86)均可部署同一份系统镜像。 --- ### **总结** - **选 Unix 的场景**:需要极端稳定性(如航空管制)、与特定硬件深度集成。 - **选 Linux 的场景**:成本敏感、需要灵活定制(如 Kubernetes 集群)、拥抱开源生态。 如果需要进一步了解某个具体分支(如 macOS 的 Unix 兼容性),可以继续讨论 😊
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lm_y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值