Linux系统中的文件种类:
当你在 Linux 系统中使用 ls -l
或者其他类似的命令查看文件列表时,你可能会注意到每个文件或目录前都有一个字符,它代表了文件的类型。以下是这些字符及其代表的文件类型的简要介绍:
-
-
:普通文件 (Regular file)- 这是最常见的文件类型,如文本文件、二进制文件、图片、视频等。
-
d
:目录文件 (Directory)- 表示这是一个目录。你可以进入目录并查看其中的内容。
-
p
:管道文件 (Named pipe)- 这种文件通常用于进程间通信。一个进程可以向管道写入数据,另一个进程可以从中读取数据。
-
s
:本地 socket 文件 (Socket)- 它用于进程间的网络通信。不同的进程可以通过本地 socket 交换数据。
-
l
:链接文件 (Symbolic link or symlink)- 这是一个指向另一个文件或目录的指针。它并不包含实际的文件数据,只是一个到其他文件或目录的引用。
-
c
:字符设备 (Character device)- 这种文件表示字符设备,如键盘或鼠标。字符设备是一次处理一个字符的设备。
-
b
:块设备 (Block device)- 这种文件表示块设备,如硬盘或USB驱动器。块设备是一次处理一块数据的设备。
Linux内核按驱动程序实现模型框架不同可以分为三类:
1. 字符设备 (Character Devices)
- 描述: 这些设备是按字节操作的。数据从设备读取或写入就像从文件流中读取或写入一样。
- 特点:
- 顺序访问。
- 通常没有缓存。
- 示例设备: 键盘、串行端口。
2. 块设备 (Block Devices)
- 描述: 这些设备是按块操作的,例如硬盘。
- 特点:
- 可以随机访问。
- 通常有缓存。
- 示例设备: 硬盘、光盘驱动器。
3. 网络设备 (Network Devices)
- 描述: 这些设备用于网络通信。
- 特点:
- 数据是按照包或帧的形式发送和接收的。
- 示例设备: 以太网卡、Wi-Fi适配器。
应用程序与设备的交互:
- 虚拟文件系统 (VFS): 这是 Linux 内核中的一个抽象层,它允许应用程序通过一个通用的接口与不同类型的文件系统进行交互。
- 字符设备文件: 应用程序通过字符设备文件与字符设备驱动程序交互,然后由驱动程序与实际的字符设备交互。
- 文件系统 & 块设备文件: 应用程序首先与文件系统交互,文件系统则与块设备文件进行交互,之后由块设备驱动程序与实际的块设备进行通信。
- 套接字 (Socket): 这是应用程序与网络设备之间进行通信的接口。
- 应用程序与网络协议栈进行交互,网络协议栈进一步与网络设备驱动程序交互,然后由网络设备驱动程序与实际的网络接口设备进行通信。
设备号 (Device Number) 的作用与组成:
设备号是 Linux 中用于标识特定设备的一种机制。它由两部分组成:主设备号和次设备号。
-
主设备号 (Major Number):
- 用于标识设备的驱动程序。具有相同主设备号的设备被认为是由同一个驱动程序控制的。
- 例如,所有的 IDE 硬盘可能共享一个主设备号,而 SCSI 硬盘则有另一个主设备号。
-
次设备号 (Minor Number):
- 用于区分使用相同驱动程序的不同设备。
- 例如,系统中的第一个 IDE 硬盘可以有次设备号 0,第二个 IDE 硬盘可以有次设备号 1,依此类推。
这两个数字组合起来为系统中的每一个设备提供了一个唯一的标识。
设备文件 (/dev 目录):
/dev
目录包含了系统中所有设备的特殊文件。这些文件使得设备看起来像是文件,从而允许用户空间的应用程序通过文件系统的接口与设备进行通信。这也是 Linux 的“一切皆文件”哲学的一个体现。
设备文件的名称通常与设备的功能或驱动程序的名称相关。例如:
/dev/sda
通常表示第一个 SCSI 或 SATA 硬盘。/dev/tty0
表示第一个终端设备。
总的来说,设备号和 /dev
目录的结合使得 Linux 可以支持大量不同类型的设备,同时为用户和应用程序提供了一个统一的接口来与这些设备进行交互。