Linux文件系统

Linux文件系统就是通过各种机制把硬件存储设备转换成逻辑的层次路径结构。然后通过各条路径来存放数据文件,这就叫做文件路径。

设备文件创建文件系统的过程叫做格式化,也叫初始化。


在Linux文件系统中只有挂载了才能使用,通过mount挂载到挂载点。每个挂载点都可以是一个不同的文件系统。


Linux文件系统是一个倒植的树状结构。所有的文件或目录都在"/"下。除第一个"/"的斜线其他都叫做路径分隔符。如/var/spool/mail/root。 最后一个叫做叶子节点。前面的成为分叉节点(目录)。


文件由数据和元数据组成


目录只是目录中文件的数据和元数据的容器。(目录也是一种文件)


Linux文件系统严格区分大小写(跟操作系统无关)。


文件名可以是出了"/"和NUL以外的所有字符,但并不推荐使用。


文件名称最长4095个字节,用/分隔的路径不能超过255个字节。


linux的文件类型有


    -:普通文件

    d: 目录文件

    b: 块设备

    c: 字符设备

    l: 符号链接文件

    p: 管道文件pipe

    s: 套接字文件socket

文件路径分为绝对路径和相对路径

    绝对路径以"/"开始

    相对路径是不以"/"开始 

  由于发行版众多所有"/"下的一级子目录都由LSB(Linux Standard Base)来统一

   Linux的基本知识之文件系统_Linux的文件系统基本知识


/boot:引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader, grub)都存放于此目录

/bin:供所有用户使用的基本命令;不能关联至独立分区,OS启动即会用到的程序 (CentOS7中/bin是/usr/bin软链接)

/sbin:管理类的基本命令;不能关联至独立分区,OS启动即会用到的程序(CentOS7中/sbin是/usr/sbin的软链接)

/lib:启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules)(CentOS7中/lib是/usr/lib的软链接)

/lib64:专用于x86_64系统上的辅助共享库文件存放位置 ((CentOS7中/lib64是/usr/lib64的软链接))

/etc:配置文件目录

/home/USERNAME:普通用户家目录

/root:管理员的家目录

/media:便携式移动设备挂载点

/mnt:临时文件系统挂载点

/dev:设备文件及特殊文件存储位置

   b: block device,随机访问

   c: character device,线性访问

/opt:第三方应用程序的安装位置

/srv:系统上运行的服务用到的数据

/tmp:临时文件存储位置

/usr:包含所有的命令、程序库、文档和其它文件。(是Linux最重要的目录之一)

/var:系统可变的数据文件,如日志等。

/proc: 用于输出内核与进程信息相关的虚拟文件系统

/sys: 用于输出当前系统上硬件设备相关信息虚拟文件系统


inode工作原理

在讲inode之前我们要先了解元数据是什么!!

元数据Metadata),又称中介数据中继数据,为描述数据的数据(data about data),主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。元数据算是一种电子式目录,为了达到编制目录的目的,必须在描述并收藏数据的内容或特色,进而达成协助数据检索的目的。都柏林核心集(Dublin Core Metadata Initiative,DCMI)是元数据的一种应用,是1995年2月由国际图书馆电脑中心(OCLC)和美国国家超级计算应用中心(National Center for Supercomputing Applications,NCSA)所联合赞助的研讨会,在邀请52位来自图书馆员电脑专家,共同制定规格,创建一套描述网络上电子文件之特征。(百度百科)


 inode的内容主要记录得属性以及该文件实际数据是放置在哪个block内。inode中细致记录了权限、属主和属组、文件大小、时间戳、文件真正内容的指向。每个inode大小均为128bytes,每个文件都仅会占用一个inode节点,因此文件的数量是跟inode有关。

      系统读取文件是通过文件名和它的inode号来找取文件,而目录是目录下文件和inode号之间的映射。根据分析inode的权限和用户是否符合,若符合才能够开始实际读取block内的数据。

      inode要记录的东西非常多,但只有128bytes,直接指向block号码要花掉4个bytes,因为inode数量有限,文件大小不定,所以系统很聪明的将inode记录block号码的区域定义为12个直接、一个间接、一个双间接和一个三间接记录区。如图所示:Linux的基本知识之文件系统_Linux的文件系统基本知识_02
        

      12直接指向指向12个数据块。间接指向就是再拿出一个数据块来做指向数据块的记录区,再指向数据块。双间接就是拿一个数据块做指向记录区再指向两个记录区,最后指向数据。以此类推!

      12个直接指向为12*4=48K

       1个间接指向大小为(4K/4)*4K=4M

       1个双重间接指向为(4K/4)*(4K/4)*4K=4T

       1个三重间接指向为(4K/4)*(4K/4)*(4K/4)*4K=4P

       数据块的大小依文件系统而定。有1K,2K,4K,8K等。

   

  文件cp,rm,mv和inode;

  使用cp命令是将一个空闲的inode号,在inode表生成新条目在目录中创建一个目录项,将名称与inode编号关联拷贝数据从而生成新的文件。

  使用rm命令是删除inode指向,从而释放inode号再利用,数据不会立即删除而是放置列表中,知道别的数据重用数据块。(恢复数据就是根据此原理)

  使用mv命令是当在同一个文件系统中,只有文件名更改,而inode表不变。如果不是统一个文件系统就相当于cp,和rm。  文件名可自定,但inode会重新生成新的inode号。


软链接和硬链接的区别在于:

 硬链接:

       创建硬链接会增加硬链接条目

       删除原文件链接文件依然能使用

      不同文件系统不能做硬链接

      目录不能做硬链接

      inode节点号

软链接:

      软链接不会增加链接条目

     删除源文件链接文件不能使用

     不同系统都可做软链接

     目录也可以做软链接

     inode节点号不相同

     创建软链接加 -l参数

    软链接的链接路径不是指当前路径,而是源文件的相对路径。

    创建的链接文件用ls -l 显示为l(链接文件),颜色为浅蓝色