“Linux下一切皆文件”
Linux 下一切皆文件这个说法是指 Linux 系统中的一种设计理念,即将所有设备、资源和进程等抽象为文件或文件夹的形式。这种设计理念的好处在于统一了对待不同类型资源的方式,提供了统一的接口和工具来进行管理和操作。
Linux 下一切皆文件的含义可以总结为以下几点:
- 一致的接口:在 Linux 中,无论是硬件设备、网络连接、进程状态还是文件系统,都可以通过文件的方式来进行访问和操作,这为用户和开发者提供了一致的接口。
- 统一的权限管理:Linux 中的一切都是文件,因此都可以受到文件系统的权限管理机制的约束,包括读写执行权限、所有者和群组等。这简化了对不同资源的权限管理。
- 扩展性:Linux 文件系统的设计允许用户创建自定义的虚拟文件系统,从而将各种资源抽象为文件的形式,使得系统的可扩展性得到提升。
- 便于管理:通过文件系统的方式管理各种资源,使得操作和管理变得更加方便和灵活,比如可以通过文件操作来控制硬件设备、监控进程状态等。
“一切皆是文件”是 Unix/Linux 的基本哲学之一,那么为什么Linux在一切皆文件呢?
在windows中是文件的东西,它们在linux中也是文件,其次一些在windows中不是文件的东西, 比如进程, 磁盘, 也被抽象成了文件.。你可以使用访问文件的方法访问它们获得信息。甚至一些很离谱的东西,比如管道,也是文件。甚至类似于socket(套接字)这样的东西, 使用的接口跟文件接口也是一致的。
这样做最明显的好处是,开发者仅需要使用一套 API 和开发工具即可调取 Linux 系统中绝大部分的资源。举个简单的例子,Linux 中几乎所有读(读文件,读系统状态,读 socket,读PIPE)的操作都可以用read函数来进行;几乎所有更改(更改文件,更改系统参数,写 socket,写 PIPE)的操作都可以用write函数来进行。
因此,Linux 下一切皆文件的设计理念使得 Linux 系统更加灵活、统一和易于管理,这也是 Linux 系统备受推崇的设计之一。
不利之处在于,使用任何硬件设备都必须与根目录下某一目录执行挂载操作,否则无法使用。我们知道,本身Linux具有一个以根目录为树根的文件目录结构,每个设备也同样如此,它们是相互独立的。如果我们想通过Linux上的根目录找到设备文件的目录结构,就必须将这两个文件系统目录合二为一,这就是挂载的真正含义。
中文名称 | 英文名称 | 描述 |
普通文件 | Normal File | 如.mp4、.pdf、.html、.log等用户可以根据访问权限对普通文件进行查看、更改和删除。 |
目录文件 | directory file | /usr/ /home/目录文件包含了各自目录下的文件名和指向这些文件的指针。打开目录事实上就是打开目录文件,只要有访问权限,就可以随意访问这些目录下的文件。 |
硬链接 | hard links: | 若一个inode号对应多个文件名,则称这些文件为硬链接。硬链接就是同一个文件使用了多个别名删除时,只会删除链接, 不会删除文件。 |
符号链接 (软连接) | symbolic link | 若文件用户数据块中存放的内容是另一文件的路径名的指向,则该文件就是软连接。 |
字符设备文件 | char | 文件一般隐藏在/dev目录下,在进行设备读取和外设交互时会被使用到即串行端口的接口设备,例如键盘、鼠标等等。 |
块设备文件 | block | 存储数据以供系统存取的接口设备,简单而言就是硬盘。 |
FIFO管道文件 | pipe | 管道文件主要用于进程间通讯。FIFO可以解决多个程序同时存取一个文件所造成的错误。 |
套接字 | socket | 以启动一个程序来监听客户端的要求,客户端就可以通过套接字来进行数据通信。用于进程间的网络通信,也可以用于本机之间的非网络通信。 |