linux文件类型详解
一、简述
linux下一切都是文件,目录也是文件的一种分类。文件类型可以通过ls -l命令查看,属性的第一个字符指明了这个文件的类型,如下:
每一行最左边的第一个字符表示文件的类型,对应的含义为:
- -普通文件
- b块设备文件
- c字符设备文件
- d目录文件
- p管道文件
- l链接文件
2.1、普通文件
- 在linux下以“-”标明的文件表示普通文件,如我们常见的以.txt、.bin、.c结尾的文件都是普通文件;
- 普通文件通常用touch命令创建,如我们在桌面上创建一个text.c文件并查看它的属性:
2.2、目录文件
- linux下的目录文件以"d"标识;
- 目录文件可以使用mkdir命令创建;
- 目录文件通过”ls -ld 目录名“的格式查看其属性,使用"ls -l 文件名"的格式查看目录的内容属性
2.3、链接文件
- linux下的链接文件以“-l”标识,链接文件分为软连接(符号链接)和硬链接。
2.3.1、软链接
- 软链接类似于windows下的快捷方式,它存储的是另一个文件的指向,我们可以通过软链接快速的访问它所指向的文件或目录;
- 软链接的对象可以是目录和文件;
- 当我们删除软链接指向的源文件时,之前创建的链接文件会变成红色,而且无法被正常访问。
- 软链接占用的空间很小,从图中看,只有6个byte;
- 软链接可以通过“ln -s 链接文件”的格式创建,利用ls -l可以查看软链接指向的实际文件;
2.3.2、硬链接
-
首先需要说明一点,在linux系统中每一个文件都对应一个i节点,i节点中存储了文件的大小、所有者等属性。每一个i节点可以对应多个不同的文件名,在i节点中会记录有多少个文件名指向这个i节点,删除一个文件其实只是删除这个文件名,只有当i节点中的链接数为0时,系统才会从磁盘中删除这个文件,i节点中的链接数其实就是硬链接的个数。所以我们可以这样理解:创建一个硬链接其实就是给源文件增加了一个别名,这个别名和源文件的i节点绑定;
-
创建硬链接只是建立一个文件名和i节点的对应关系,因此硬链接并不会占用磁盘空间。因为所有的硬链接其实都是指向的磁盘中同一块内存中的某个文件,所以使用"ls -l"命令得到的所有硬链接文件都会显示相同的大小,但是实际的文件只有一个。
-
我们在创建硬链接之后,使用ls -l的到的磁盘空间的确是翻倍的,但是实际的磁盘空间并未翻倍,参考https://blog.51cto.com/jk6627/1949090
-
修改任意一个硬链接的内容,所有与之相关的(和同一个i节点关联的硬链接)内容都会随之改变。
2.4、块设备文件
- 块设备文件支持以块(block)为单位的访问方式。在 EXT4 文件系统中,一个 block 通常为 4KB 的大小,也就是说每次可以存取 4096(或其整数倍) 个字节的数据。应用程序可以随机访问块设备文件的数据,程序可以自行确定数据的位置,硬盘、软盘等都是块设备。使用 ls -l 命令查看,块设备文件的第一个字符是 “b”(block)。
2.5、字符设备文件
- 字符设备文件以字节流的方式进行访问,由字符设备驱动程序来实现这种特性,这通常要用到 open、close、read、write 等系统调用。字符终端、串口和键盘等就是字符设备。另外,由于字符设备文件是以文件流的方式进行访问的,因此可以顺序读取,但通常不支持随机存取。使用 ls -l 命令查看,字符设备文件的第一个字符是 “c”(char)。
字符设备和块设备的说明摘自:https://www.cnblogs.com/tongye/p/10410098.html
2.6、管道文件
-
管道文件在linux下以“p”标识,"p"是“pipe”的缩写;
-
管道文件可以使用mkfifo命令创建,如下:
-
管道文件通常用做进程间通信,详细内容请参考:https://blog.****.net/weixin_39270987/article/details/108352394
2.7、套接字
- 套接字也是进程间通信的一种方式,不过我们通常用套接字来进行网络通信。在网络编程中,我们使用socket函数创建一个套接字。
- 参考https://blog.****.net/weixin_39270987/article/details/107772737