当前位置 : 主页 > 编程语言 > 其它开发 >

linux中的文件系统

来源:互联网 收集:自由互联 发布时间:2022-05-30
在linux设计中一切皆文件,不管是外设还是存储,都是以文件形式进行存储.平时的使用mv命令,几乎所有文件都是瞬间转移到了新目录下(在windows下转移文件就会慢一些),今天了解一下linux中

在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

那么这么多文件是怎么存储到硬盘上的呢,总不能扫描硬盘查看某个文件把,那效率太慢了,所以就用了inode方式.Linux中目录的数据块中的每一项中都包含了文件名和其对应的inode。inode记录了文件的属性以及该文件实际存储位置,即数据块号(block number),每一个block(常见大小4KB),通过inode可以实现文件的查找定位。inode是Linux中的,Unix中是vnode。基本上,inode包含的信息至少有如下这些:

  1. 文件的类型
  2. 文件访问权限;
  3. 文件的所有者与组;
  4. 文件的大小;
  5. 链接数,即指向该inode的文件名总数;
  6. 文件的状态改变时间(ctime)、最近访问时间(atime)和最近修改时间(mtime);
  7. 文件特殊属性,SUID、SGID和SBIT;
  8. 文件内容的真正指向(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

在使用"ls"命令时,加"-i"可以显示文件的inode编号
所以在磁盘或者叫一个文件系统(linux支持很多文件系统)中,将分为两个区域,一个是inode区域,一个是数据区域.

block

磁盘在写入时,并不能按字节实现一个字符的文件就占用一个字节的磁盘空间,这样效率太低了,在linux中写入数据采用块(block)写入,一个块大小默认为4KB,也就是说任何文件,最小占用4kb的数据,一个文件夹也是一种文件,所以一个文件夹本身(不是指文件夹里面的数据),最少占用一个块(4KB),但是文件夹建立的时候,会在文件夹里创建一个"."目录,来指向它自己,所以在理论上创建一个文件夹使用8KB的磁盘空间

操作系统读取磁盘文件的流程是这样的:

  1. 根据给定的文件的所在目录,获取该目录的数据实体,根据数据实体中的数据项,找到对应文件的inode;
  2. 根据文件inode,找到inodeTable;
  3. 根据inodeTable中的对应关系,找到对应的block;
  4. 读取文件。

系统读取磁盘文件流程示意图如下:

参考

Linux 文件基本属性
详解Linux索引节点inode

网友评论