• Linux文件系统


                             Linux文件系统

    参考1:http://www.cnblogs.com/f-ck-need-u/p/7016077.html#blog4.1

    参考2:https://blog.csdn.net/new0801/article/details/63687127

     

    一.    文件系统为何物?

    1.那得先想想没有文件系统的话会怎么样吧?(文章链接 : http://www.cnblogs.com/shangye/p/6177993.html)

       想一想没有文件系统软件的话,我们应该怎么去了解数据?磁盘上存储的是一堆的01代码。如果想通过这种方式直接去了解数据的话,确实会有点困 难,当然也是可以做到的!如果有了文件系统呐?就像我们通过显示器为用户显示图像一样,我们也可以在磁盘上使用抽象的方式来为用户提供方便的查看数据,操作数据的界面和命令。这样就可以普及到给大众用户使用啦。所以对于现代操作系统的话,为了实现以文件的方式来管理数据,我们必须使用文件系统来管理文件。

     

    2. 分区以及兼容各种文件系统所出现的VFS

      一个磁盘就是一个独立空间,一个独立空间上面只能拥有一种文件技术。所以为了实

    现多文件系统,就必须将一个磁盘划分为多个有边界的,互相独立的存储空间。这项技术我们就叫做分区。所以对于每一个分区,他们都是一个独立的文件系统。

           众多种类的文件系统也带来的一定的麻烦?如何在一个操作系统上处理多个文件系统。为此,最简单的方法就是在操作系统上为所有可能的文件系统开发相关的系统调用和接口。但是,如果真这么做的话,对于开发者来说,任务量太大了也太麻烦了。那么如果能在一个操作系统上同时兼容多个文件系统呐?为此,Linus使用统一的接口将这种差异屏蔽了,这种技术就叫做VFS(虚拟文件系统)。

     

           我们都知道Linux分为用户态和内核态,用户态请求硬件资源需要调用System Call通过内核态去实现。用户的这些文件操作都有对应的System Call函数接口,接口调用VFS对应的函数。对于不同的文件系统,它们都实现了VFS这些函数,通过指针注册到VFS里面。所以,用户的操作通过VFS转到各种文件系统。然后, 文件系统把文件读写命令转化为对磁盘LBA的操作,起到一个翻译和磁盘管理的作用。

    二.    文件系统的结构和原理

    1.文件的组成

        文件 = 元数据(metadata) + 数据(data)  如下图

    http://www.cnblogs.com/f-ck-need-u/p/7016077.html#blog4.1(4.2文件系统的完整结构里有详细介绍各个部分的作用)

     

    2.     从如何删除乱码文件到学习文件的inode原理

        如何删除一个乱码文件呐?最简单傻瓜的方法就是把当前目录下的其他文件先移动

        到其他目录下,然后删除该目录下的乱码文件,之后再将之前移动的文件移回到当前目录下即可。

        当然我们还有更加简单一点的方法。我们可以通过乱码文件的inode来对文件进行删除。那么,下面就让我们来了解了解inode的原理吧。

           

        这是一个inode相应的结构。元数据里面存储了相关的inode号,文件类型,权限,链接次数,uid,gid以及文件大小,时间戳相关数据和指向相应数据块的指针。数据块里面存储的才是文件的数据。

        好的!文件的存储我们搞懂了。那么目录存储在哪里呐?以及我们的文件名要存储在哪里?下面让我们一一了解。

             

        由上图可知,在目录文件的数据块中存储了其下的文件名,目录名,目录自身的相对名称 . 和上级目录的相对名称。还存储了指向inode table中这些文件名对应的inode号的指针(并非直接存储inode号码)、目录项长度rec_len、文件名长度name_len和文件类型file_type。

       

        上面这张图可以看出文件的存储以及目录的存储。

        所以,删除乱码文件的第二种方式就是通过inode号来进行删除。(http://www.jb51.net/LINUXjishu/32910.html

    3.     如何发现文件被篡改?

    Inotify 和 fswatch (http://icodeit.org/2015/03/build-monitor-script-based-on-inotify/

    4.     软链和硬链

    软链接:创建软连接会创建一个新的inode节点,其对应数据块内容存储所链接的文件名信息,这样原文件即便删除了,重新建立一个同名的文件,软连接依然能够生效。

    硬链接:创建硬链接,并不会新建inode节点,只是links加1,还有再目录文件对应数据块上增加一条文件名和inode对应关系记录;只有将硬链接和原文件都删除之后,文件才会真正删除,即links为0才真正删除。

     

                                        软链接

     

                                       硬链接

  • 相关阅读:
    CentOS下安装Git
    MongoDB 从入门到精通专题教程
    mongodb分布式集群架构
    CentOS6.2 下安装中文语言包
    英语流利说 第18天
    英语流利说 第17天
    英语流利说 第16天
    英语流利说 第15天
    英语流利说 第14天
    英语流利说 第13天
  • 原文地址:https://www.cnblogs.com/xautxuqiang/p/9015517.html
Copyright © 2020-2023  润新知