Linux文件系统分析

时间:2021-04-01 20:08:15

 

1. 文件系统

  • 文件系统是一个对存储设备上的数据进行组织的机制,这种机制便于用户和操作系统进行交互。文件系统有对应的物理空间,Linux下每个分区都是一个文件系统,都有自己的目录结构。文件系统包含着文件中的数据、文件系统的结构,操作系统内的所有文件、目录、软连接以及文件保护信息等都存储在其中。Linux支持多种格式的文件系统,并且可以同时挂载多个文件系统。
  • Linux下文件系统的体系结构如下:

Linux文件系统分析

  • VFS,虚拟文件系统。VFS层的作用是隔离了不同文件系统之间的差异,为上层提供统一的API接口。
  • General Block Device Layer层的作用是隔离不同存储设备的硬件差异,为上层提供统一的IO操作接口。

2. 根文件系统

2.1 根文件系统简述

  • 根文件系统首先是一种文件系统,它不仅具有普通文件系统的存储数据文件的功能,而且相对于普通的文件系统,它的特殊之处在于:它是内核启动时所挂载的第一个文件系统,内核代码的映像文件保存在根文件系统中,系统引导启动程序会在根文件系统挂载之后从中把一些初始化脚本(如rcS,inittab)和服务加载到内存中去运行。
  • Linux的文件结构是单个树状结构,根目录是所有Linux文件和目录所在的地方,需要挂载一个具体的磁盘分区。根文件系统被挂载到根目录下“/”后,在根目录下就有根文件系统的各个目录,文件:/bin /sbin /mnt等,再将其他分区挂接到/mnt目录上,/mnt目录下就有这个分区的各个目录,文件。
  • 挂载,指的是将一个文件系统和一个存储设备进行关联。执行挂载时,要提供文件系统类型、文件系统和一个挂载点。

Linux文件系统分析

P.S.:上图目录结构中所列出的目录/bin,/dev,/etc,/lib,/proc,/var,/usr对于根文件系统来说是必须具有的,其他目录都是可选的。

2.2 查看文件系统挂载情况

在Linux下,可以使用命令查看文件系统的挂载情况。

“mount”命令,查看具体的挂载情况:

# mount
rootfs on / type rootfs (rw)
/dev/root on / type nfs (rw,relatime,vers=2,rsize=4096,wsize=4096,namlen=255,hard,nolock,proto=udp,port=65535,timeo=10,retrans=3,

sec=sys,mountport=65535,mountproto=,addr=192.168.1.100)


proc on /proc type proc (rw,relatime)
sysfs on /sys type sysfs (rw,relatime)
tmpfs on /var type tmpfs (rw,relatime)
tmpfs on /tmp type tmpfs (rw,relatime)
tmpfs on /dev type tmpfs (rw,relatime)

 

# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/root             19478204   5695772  12769952  31% /
tmpfs                   175892         0    175892   0% /var
tmpfs                   175892         0    175892   0% /tmp
tmpfs                   175892         0    175892   0% /dev

 

 

2.3 根文件系统的目录结构 “df”命令,查看文件系统的相关信息:

在嵌入式体统中,为了精简系统。/bin,/dev,/etc,/lib,/proc,/var,/usr对于根文件系统来说是必须具有的,其他目录都是可选的。

/                 

/bin         

该目录下存放所有用户都可以使用的、基本的命令,譬如cd,ls,cp等。这些命令在挂载其它文件系统之前就可以使用,所以/bin目录必须和根文件系统在同一个分区中。

/sbin           

该目录下存放的是基本的系统命令,它们用于启动系统,修复系统等,与/bin目录相似,在挂接其他文件系统之前就可以使用/sbin,所以/sbin目录必须和根文件系统在同一个分区中。

/dev

该目录下存放的是设备文件,设备文件是Linux中特有的文件类型。在Linux系统下,以文件的方式访问各种设备,即通过读写某个设备文件操作某个具体硬件。譬如通过"dev/ttySAC0"文件可以操作串口0。

/etc

该目录下存放着各种配置文件,对于PC上的Linux系统,/etc目录下的文件和目录非常多,这些目录文件是可选的,它们依赖于系统中所拥有的应用程序是否需要配置文件。在嵌入式系统中,这些内容可以大为精减。

/lib

该目录下存放共享库和可加载驱动程序模块。共享库用于启动系统、支持可执行程序的运行。

/home               

用户目录,它是可选的,对于每个普通用户,在/home目录下都有一个以用户名命名的子目录,里面存放用户相关的配置文件。

/root

根用户的目录,与此对应,普通用户的目录是/home下的某个子目录。

/usr

该目录存放的是共享、只读的程序和数据,/usr目录下的内容可以在多个主机间共享。

/var

与/usr目录相反,/var目录中存放可变的数据,比如spool目录(mail,news),log文件,临时文件。

/proc

该是一个空目录,常作为proc文件系统的挂载点,proc文件系统是个虚拟的文件系统,它没有实际的存储设备,里面的文件都是由内核临时生成的,用来表示系统的运行状态,也可以操作其中的文件控制系统。

/mnt

用于临时挂载某个文件系统的挂接点,通常是空目录,也可以在里面创建子目录来临时挂载光盘、硬盘,譬如/mnt/cdram /mnt/hda1 。

/tmp

用于存放临时文件,通常是空目录,一些需要生成临时文件的程序用到的/tmp目录下,所以/tmp目录必须存在并可以访问。

3. 常用的文件系统

Linux支持多种文件系统,包括ext2、ext3、vfat、ntfs、iso9660、jffs、romfs和nfs等,为了对各类文件系统 进行统一管理,Linux引入了虚拟文件系统VFS(Virtual File System),为各类文件系统提供一个统一的操作界面和应用编程接口。

 

参考链接: 

      http://tieba.baidu.com/p/2852126057

                      https://blog.csdn.net/special00/article/details/51262334

      https://www.cnblogs.com/linfeng-learning/p/9285545.html