跳到主要内容

Linux 文件类型

七种文件类型

Linux 系统中一共有七种文件类型,即普通文件、目录文件、符号链接文件、字符设备文件、块设备文件、套接字文件和管道文件。七种文件类型及其标识如下表所示。

文件类型标识文件类型
-普通文件
d目录文件
l符号链接
c(伪文件)字符设备(character device)
b(伪文件)块设备(block device)
s(伪文件)套接字文件(socket)
p(伪文件)命名管道文件(pipe)

其中,文件、目录、符号链接 3 中类型占用存储空间;另外四种(套接字、块设备、字符设备、管道)是伪文件,不占用磁盘空间。

提示:符号链接记录的是路径,路径不长时存在 inode 里面。

普通文件和目录

Linux 下的普通文件就相当于我们在 Windows 系统各个盘里看到的那些文件和文件夹。

字符设备与块设备文件

字符设备只能以字节为最小单位访问,而块设备以块为单位访问,例如 512 字节,1024 字节等。

块设备可以随机访问,但是字符设备不可以,字符和块没有访问量大小的限制,块也可以以字节为单位来访问。

套接字文件

使用套接字(socket)除了可以实现网络间不同主机间的通信外,还可以实现同一主机的不同进程间的通信,且建立的通信是双向的通信。

Unix 域套接字是通过套接字 API 实现的简单的协议族。实际上它并不代表一个网络协议;它只能连接到同一台机器上的套接字。它提供了灵活的 IPC 机制。它的地址是它所在的文件系统的路径名,创建之后套接字就和路径名绑定在一起。用来表示 Unix 域地址的套接字文件能够使用 stat() 但是不能通过 open() 打开,而且应该使用套接字 API 对它进行操作。

Unix 域套接字是面向连接的,每个套接字的连接都建立了一个新的通讯信道。服务器可能同时处理许多连接,但对于每个连接都有不同的文件描述符。这个属性使 Unix 域套接字能够比命名管道更好的适应 IPC 任务。

链接文件

链接文件可以分为硬链接文件和软链接文件。

硬链接

硬链接就是通过设备节点 inode 创建的,硬链接就是同一个文件使用了多个别名,他们有共同的 inode。

由于硬链接是有着相同 inode 号仅文件名不同的文件,因此,删除一个硬链接文件并不影响其他有相同 inode 号的文件。

硬链接不能对目录进行创建,只可对文件创建。

软链接

软链接文件是通过文件的绝对路径创建的,软链接(也叫符号链接)与硬链接不同,文件用户数据块中存放的内容是另一文件的路径名的指向。软链接就是一个普通文件,只是数据块内容有点特殊。软链接可对文件或目录创建。

删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接就变成了死链接。

命名管道文件

命名管道(pipe)文件负责将一个进程的信息传递给另一个进程,从而使该进程的输出成为一个另一个进程的输入的内存部分,这样的文件被称作命名管道文件,又称管道文件。

管道是 Linux 提供的最早的进程间通信方式之一,大致可以分为有无名管道和命名管道两种。Linux 中的命名管道提供两个进程之间的通讯方式,可以把一个程序的输出直接连接到另一个程序的输入。

管道通常用于从一个进程读取数据直接发送给第二个进程处理的场合。

查看文件类型

在 Linux 系统中,可以使用 ls 命令加 -l 选项查看文件类型。例如:

$ ls -l
-rw-rw-r-- 1 root utmp 292292 210 16:16 lastlog
drwxr-xr-x 2 mongodb mongodb 4096 212 00:00 mongodb
drwxr-xr-x 2 mosquitto root 4096 125 00:00 mosquitto

输出结果中第一栏的第一个字母即代表该文件的类型。