在linux环境中有一个基本的设计原则—everything is file。所有的内容都是以文件的形式来抽象(比如:普通文件、目录、进程、网络、硬件等),可以对其进行打开、读取、写入等操作。
文件系统为操作系统提供了组织管理数据的方式。
文件分类
- 普通文件:可直接拿来使用的文件都是普通文件(.txt、.pdf、.html等),linux用户根据访问权限的不同可以对这些文件进行查看、删除以及更改操作。
- 目录文件:linux系统中,目录文件包含了此目录中的各个文件以及指向这些文件的指针,打开目录等同于打开目录文件,只有你有权限可以随意访问目录中的任何文件。(目录文件的访问权限和普通文件的执行权限是一个意思)
- 字符设备(裸设备)文件和块设备文件:这些文件通常隐藏在/dev/目录下,当进行设备读取或者外设交互时才被使用。(linux系统中的所有设备要么是块设备文件要么是字符设备文件)块设备文件已固定大小长度传送转移资料,字符设备文件以不定长度的字元传送资料。块设备是可以随机存取资料的设备,比如硬盘、光碟机。而字符设备依据先后顺序存取资料,比如打印机等。各种设备文件都以文件的形式存储在/dev/目录下。/dev/dsk对应为块设备,文件系统的操作用到它,比如mount。/dev/rdsk对应为字符设备(裸设备r表示raw)。字符设备还是块设备的定义属于操作系统的设备访问层,与实际物理设备的特性无必然联系。设备访问层下面是驱动程序,所以只要驱动程序能够提供哪一种方式,都可以。也就是说驱动程序支持 stream 方式,那么就可以用这种方式访问,驱动程序如果还支持block方式,那么你想用哪种方式访问都可以。具体往下看文件系统的层次。
- 套接字文件:一般隐藏在/var/run目录下,用于进程间的网络通信。
- 符号链接文件:类似于Windows中的快捷方式,是指向另一个文件的软连接。
- 管道文件:主要用于进程间通信。例如,用mkfifo命令创建一个FIFO文件,进程A和B通过此文件通信,A从管道文件读数据,B向管道文件写数据,实现随写随读。
优缺点
优点:开发者仅需要一套API(应用程序接口,模块接口。是一些预先定义的函数,提供应用程序和开发人员基于某软件或硬件得以访问一组例程的能力而不需要访问源码。通俗的理解:电灯是一个模块,电流是一个模块。想要电灯亮起了,就要链接电流和电灯。电灯和电流间就需要一个接口,把电灯插上去,通电就可以用了。但是,懂电流的电工完全可以不用知道怎么造电灯泡,做电灯泡的不需要知道电流怎么产生。linux中的API遵循POSIX标准。)和开发工具就可以调取linux中绝大部分资源。比如:linux中几乎所有读(读文件、系统状态、socket)的操作都可以用read函数来进行,所有写的操作(更改文件内容、更改系统参数、socket)都可以通过write函数进行。
缺点:使用任何硬件设备都必须与根目录下的某一个目录进行挂载操作。
文件系统层次
我觉得这个文章我看下来写的很好,我也可以理解。
https://blog.csdn.net/yuexiaxiaoxi27172319/article/details/45241923