Linux文件类型

Linux文件类型教程

Linux 中一共有七种文件类型,即普通文件(-)、目录文件(d)、字符设备文件©、块设备文件(b)、套接字文件(s)、符号链接文件(l)和管道文件§。

Linux七种文件类型详解

文件属性 文件类型
- 常规文件,即 file
d 目录文件
b block device 即块设备文件,如硬盘;支持以 block 为单位进行随机访问
c character device 即字符设备文件,如键盘支持以 character 为单位进行线性访问
l symbolic link 即符号链接文件,又称软链接文件
p pipe 即命名管道文件
s socket 即套接字文件,用于实现两个进程进行通信

普通文件

Linux 下的普通文件就是我们在 Windows 系统各个盘里看到的那些文件。

字符设备与块设备文件

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

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

套接字文件

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

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

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

链接文件

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

硬链接

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

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

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

软链接

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

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

命名管道文件

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

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

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

Linux查看文件

我们在 Linux 上,使用 ls 命令,随便查看一个文件,具体命令如下:

ls -l haicoder.txt

运行后,终端输出如下:

05_Linux七种文件类型.png

我们看到,最前面的输出的字符 -rw-r--r-- 就是文件的属性信息,其中第 1 个字母代表的就是文件类型,这里的 - 代表的就是普通的文件。现在,我们再次使用 ls 命令,查看一个文件夹,具体命令如下:

ls -ld haicoder

运行后,终端输出如下:

06_Linux七种文件类型.png

我们看到,这次输出的第一个字符变成了 d,即,表明其是一个文件夹。

Linux查看设备文件

我们在 Linux 上,使用 ls 命令,查看 /dev 目录下文件,具体命令如下:

ls -l /dev

运行后,终端输出如下:

07_Linux七种文件类型.png

我们看到,第一行的输出和第三行的输出的第 1 个字母代表是 c,表明其是一个字符设备文件,我们继续往下看,可以看到如下的输出:

08_Linux七种文件类型.png

我们可以看到,第一行的第一个设备信息为 l,其代表的就是链接文件,同时,第四行的第一个设备信息为 s,表明其为 socket 文件,我们接着往下看,可以看到如下的输出:

09_Linux七种文件类型.png

我们可以看到,第一行的第一个设备信息为 b,其代表的就是块设备文件。

Linux文件类型总结

Linux 中一共有七种文件类型,即普通文件(-)、目录文件(d)、字符设备文件©、块设备文件(b)、套接字文件(s)、符号链接文件(l)和管道文件§。