前言
Linux 中一切皆为文件,文件类型也有多种。
一、Linux文件类型
Linux 中一切皆为文件,文件类型也有多种。通过ls -l
命令可以查看文件属性信息,其中行首第一个字符即代表该文件的文件类型。
1、普通文件
使用ls -l
命令后,第一列第一个字符为 “-” 的文件为普通文件,如下图所示,普通文件一般为灰色字体,绿色字体的是可执行文件,红色字体的是压缩文件。我这里的压缩文件不是红色,应该是shell
工具的原因。
2、目录文件
Linux 中的目录也是文件,目录文件中保存着该目录下其他文件的inode
号和文件名等信息,目录文件中的每个数据项都是指向某个文件inode
号的链接,删除文件名就等于删除与之对应的链接。目录文件的字体颜色是蓝色,使用 ls -l 命令查看,第一个字符为"d"(directory)。
例子1:查看目录文件中的内容,有一下内容。
删除abc文件。
再次查看目录文件,发现abc
已经被删除。
例子2:目录文件中保存着该目录下其他文件的inode
号
目前还不知道怎么查看目录文件中保存的inode号,有知道的可以评论区告诉我一下。
3、设备文件
Linux 中的硬件设备如硬盘、鼠标等也都被表示为文件,即为设备文件。设备文件一般存放在/dev/
目录下,文件名为黄色。设备文件分为以下两种:
3.1、块设备文件
块设备文件支持以块(block)为单位的访问方式。在 EXT4 文件系统中,一个 block 通常为 4KB 的大小,也就是说每次可以存取 4096(或其整数倍) 个字节的数据。应用程序可以随机访问块设备文件的数据,程序可以自行确定数据的位置,硬盘、软盘等都是块设备。使用 ls -l 命令查看,块设备文件的第一个字符是 “b”(block)。
3.1、字符设备文件
字符设备文件以字节流的方式进行访问,由字符设备驱动程序来实现这种特性,这通常要用到 open、close、read、write
等系统调用。字符终端、串口和键盘等就是字符设备。另外,由于字符设备文件是以文件流的方式进行访问的,因此可以顺序读取,但通常不支持随机存取。使用 ls -l
命令查看,字符设备文件的第一个字符是 “c”(char)。
4、链接文件
链接文件一般指的是一个文件的软连接(或符号链接),使用 ls -l 命令查看,第一个符号为 “l”,文件名为浅蓝色。下图中,yum
就是一个链接文件,从结果上还可以看到它是文件 dnf-3
的软链接,删除原文件 dnf-3
的话,对应的软链接文件 yum
也会消失。可以使用 ln
命令来创建一个文件的链接文件。
4.1、软链接
软链接(又称符号链接),使用 ln -s file file_softlink
命令可以创建一个文件的软链接文件:
比如上图中的yum
链接:ln -s dnf-3 yum
软链接相当于给原文件创建了一个快捷方式,如果删除原文件,则对应的软链接文件也会消失。两个文件的inode
号是不一样的。
4.2、硬链接
硬链接,相当于给原文件取了个别名,其实两者是同一个文件,删除二者中任何一个,另一个不会消失;对其中任何一个进行更改,另一个的内容也会随之改变,因为这两个本质上是同一个文件,只是名字不同。使用 ls -i
命令查看,可以发现硬链接的两个文件的 inode
号是一样的:
同样的,使用 ln
命令可以创建一个文件的硬链接:ln test.txt test_hardlink
注意区分硬链接文件和普通文件
硬链接文件和普通文件的第一个字符都是"-",只能通过inode
号来区分,硬链接文件共用一个inode
号,普通文件独用一个inode
号。
5、管道文件
管道文件主要用于进程间通信,使用 ls -l 命令查看,第一个字符为 “p”(pipe)。可以使用 mkfifo
命令来创建一个管道文件,管道文件必须通过open()、read()、write()、close()
。
可以参考“王摆摆摆”博主的文章:Linux 下有名(命名)管道文件读写操作
在 FIFO(一种先进先出的数据缓存器) 中可以很好地解决在无关进程间数据交换的要求,FIFO 的通信方式类似于在进程中使用文件来传输数据,只不过 FIFO 类型的文件同时具有管道的特性,在读取数据时,FIFO 管道中同时清除数据。
6、套接字文件
套接字文件主要用于通信,特别是在网络上。使用 ls -l 命令查看,第一个字符为 “s”(socket)。
总结
本文主要对Linux的文件类型进行总结,包括不同类型文件的区分方式、作用。总共有7种文件类型:普通文件(“-”)、目录文件(“d”)、块设备文件(“b”)、字符设备文件(“c”)、链接文件(“l”)、管道文件(“p”)、套接字文件(“s”)。