linux文件类型详解

一、简述

linux下一切都是文件,目录也是文件的一种分类。文件类型可以通过ls -l命令查看,属性的第一个字符指明了这个文件的类型,如下:
linux文件类型详解

每一行最左边的第一个字符表示文件的类型,对应的含义为:

  • -普通文件
  • b块设备文件
  • c字符设备文件
  • d目录文件
  • p管道文件
  • l链接文件

2.1、普通文件

  • 在linux下以“-”标明的文件表示普通文件,如我们常见的以.txt、.bin、.c结尾的文件都是普通文件;
  • 普通文件通常用touch命令创建,如我们在桌面上创建一个text.c文件并查看它的属性:
    linux文件类型详解

2.2、目录文件

  • linux下的目录文件以"d"标识;
  • 目录文件可以使用mkdir命令创建;
  • 目录文件通过”ls -ld 目录名“的格式查看其属性,使用"ls -l 文件名"的格式查看目录的内容属性
    linux文件类型详解

2.3、链接文件

  • linux下的链接文件以“-l”标识,链接文件分为软连接(符号链接)和硬链接。

2.3.1、软链接

  • 软链接类似于windows下的快捷方式,它存储的是另一个文件的指向,我们可以通过软链接快速的访问它所指向的文件或目录;
  • 软链接的对象可以是目录和文件;
  • 当我们删除软链接指向的源文件时,之前创建的链接文件会变成红色,而且无法被正常访问。
  • 软链接占用的空间很小,从图中看,只有6个byte;
  • 软链接可以通过“ln -s 链接文件”的格式创建,利用ls -l可以查看软链接指向的实际文件;
    linux文件类型详解

2.3.2、硬链接

  • 首先需要说明一点,在linux系统中每一个文件都对应一个i节点,i节点中存储了文件的大小、所有者等属性。每一个i节点可以对应多个不同的文件名,在i节点中会记录有多少个文件名指向这个i节点,删除一个文件其实只是删除这个文件名,只有当i节点中的链接数为0时,系统才会从磁盘中删除这个文件,i节点中的链接数其实就是硬链接的个数。所以我们可以这样理解:创建一个硬链接其实就是给源文件增加了一个别名,这个别名和源文件的i节点绑定;

  • 创建硬链接只是建立一个文件名和i节点的对应关系,因此硬链接并不会占用磁盘空间。因为所有的硬链接其实都是指向的磁盘中同一块内存中的某个文件,所以使用"ls -l"命令得到的所有硬链接文件都会显示相同的大小,但是实际的文件只有一个。

  • 我们在创建硬链接之后,使用ls -l的到的磁盘空间的确是翻倍的,但是实际的磁盘空间并未翻倍,参考https://blog.51cto.com/jk6627/1949090
    linux文件类型详解

  • 修改任意一个硬链接的内容,所有与之相关的(和同一个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、管道文件

2.7、套接字