在linux设计中一切皆文件,不管是外设还是存储,都是以文件形式进行存储.平时的使用mv命令,几乎所有文件都是瞬间转移到了新目录下(在windows下转移文件就会慢一些),今天了解一下linux中的文件系统
基本介绍linu中用ls命令,可以查看当前目录所有的文件
[work@machine]$ ls -al
total 16
drwxr-xr-x 4 mengfanyu staff 128 1 11 22:50 .
drwxr-xr-x+ 78 mengfanyu staff 2496 4 6 14:28 ..
-rw-r--r--@ 1 mengfanyu staff 6148 2 20 23:32 .DS_Store
drwxr-xr-x 11 mengfanyu staff 352 1 11 23:06 my-app
Linux 支持很多文件类型,其中非常重要的文件类型有: 普通文件,目录文件,链接文件,设备文件,管道文件,Socket 套接字文件等。
- 普通文件(-) : 用于存储信息和数据, Linux 用户可以根据访问权限对普通文件进行查看、更改和删除。比如:图片、声音、PDF、text、视频、源代码等等。
- 目录文件(d,directory file) :目录也是文件的一种,用于表示和管理系统中的文件,目录文件中包含一些文件名和子目录名。打开目录事实上就是打开目录文件。
- 符号链接文件(l,symbolic link) :保留了指向文件的地址而不是文件本身。
- 字符设备(c,char) :用来访问字符设备比如硬盘。
- 设备文件(b,block) : 用来访问块设备比如硬盘、软盘。
- 管道文件(p,pipe) : 一种特殊类型的文件,用于进程之间的通信。
- 套接字(s,socket) :用于进程间的网络通信,也可以用于本机之间的非网络通信。
那么这么多文件是怎么存储到硬盘上的呢,总不能扫描硬盘查看某个文件把,那效率太慢了,所以就用了inode方式.Linux中目录的数据块中的每一项中都包含了文件名和其对应的inode。inode记录了文件的属性以及该文件实际存储位置,即数据块号(block number),每一个block(常见大小4KB),通过inode可以实现文件的查找定位。inode是Linux中的,Unix中是vnode。基本上,inode包含的信息至少有如下这些:
- 文件的类型
- 文件访问权限;
- 文件的所有者与组;
- 文件的大小;
- 链接数,即指向该inode的文件名总数;
- 文件的状态改变时间(ctime)、最近访问时间(atime)和最近修改时间(mtime);
- 文件特殊属性,SUID、SGID和SBIT;
- 文件内容的真正指向(pointer)。
可以用stat命令,查看某个文件的inode信息。
[work@machine]$ stat opt/
File: "opt/"
Size: 4096 Blocks: 8 IO Block: 4096 目录
Device: 805h/2053d Inode: 3495452682 Links: 7
Access: (0775/drwxrwxr-x) Uid: ( 500/ work) Gid: ( 500/ work)
Access: 2021-07-15 11:05:46.865590006 +0800
Modify: 2022-03-18 16:47:41.310539462 +0800
Change: 2022-03-18 16:47:41.310539462 +0800
block在使用"ls"命令时,加"-i"可以显示文件的inode编号
所以在磁盘或者叫一个文件系统(linux支持很多文件系统)中,将分为两个区域,一个是inode区域,一个是数据区域.
磁盘在写入时,并不能按字节实现一个字符的文件就占用一个字节的磁盘空间,这样效率太低了,在linux中写入数据采用块(block)写入,一个块大小默认为4KB,也就是说任何文件,最小占用4kb的数据,一个文件夹也是一种文件,所以一个文件夹本身(不是指文件夹里面的数据),最少占用一个块(4KB),但是文件夹建立的时候,会在文件夹里创建一个"."目录,来指向它自己,所以在理论上创建一个文件夹使用8KB的磁盘空间
操作系统读取磁盘文件的流程是这样的:
- 根据给定的文件的所在目录,获取该目录的数据实体,根据数据实体中的数据项,找到对应文件的inode;
- 根据文件inode,找到inodeTable;
- 根据inodeTable中的对应关系,找到对应的block;
- 读取文件。
系统读取磁盘文件流程示意图如下:
Linux 文件基本属性
详解Linux索引节点inode