[linux文件系统]文件访问操作

前言

简单总结上一篇的文件系统,一个文件或目录的元数据(Meta)都是保存在inode Table表中,我们要访问一个文件,就需要通过inode找到对应的数据块位置,然后再找到数据块读取。

实例

找到文件 /var/log/msg.txt的内容
找到文件 /var/log/msg.txt的内容

  • step1:linux文件系统会保存/ 根文件的inode,在inode Table中保存有/ 所在的数据块
    注意目录项,在上篇讲到(可以看目录项图),其数据块可以存放在inode 中,但也有存放指针指向数据块的位置,这里都保存在数据块中
  • step2:在存放根 的目录项中会有 . 的inode编号(根 目录) 以及根目录存放的所有目录inode编号,
    这里找到目录var的inode编号
  • step3:通过var的inode编号,在inode Table中找存放的数据块位置
  • step4:在4号数据块中有 . 的iNode编号(var 目录) …的inode编号(根目录),以及var下的目录inode编号和文件inodeb编号,找到log的inode编号
  • step5:通过log的inode编号,在inode Table中找存放的数据块6号块
  • step6、step7,可以继续分析

文件的删除

找到文件,将目录中条目项删除
文件的inode的inode bitmap标为0
文件占用的数据块的block bitmap对应的标为0

注:不用删除所在是数据块。所以刚删除的内容,也是能恢复的,只要知道其数据块的位置

文件的复制剪切

复制,复制数据到新的数据块
ls -i 查看文件的inode号
通过将文件a,复制到test下,会复制a文件到新的数据块,其inode号也改变
ps:可以将此复制过程,完整的想一遍,从找到文件,然后复制数据块,然后新建文件

[ubpara link]$ls
a  test
[ubpara link]$ls -il
总用量 8
660108 -rw-rw-r-- 1 ubpara ubpara    6 5月  14 19:17 a
660116 drwxrwxr-x 2 ubpara ubpara 4096 5月  14 19:20 test
[ubpara link]$cp a test/a
[ubpara link]$ls -il test/
总用量 4
660117 -rw-rw-r-- 1 ubpara ubpara 6 5月  14 19:20 a
[ubpara link]$

剪切,只是更改inode目录条项
将a文件剪切(移动)到test目录下,只修改文件项的内容,依然是原来的数据块。所以其inode号前后不变,都是660108

[ubpara link]$ls -il
总用量 8
660108 -rw-rw-r-- 1 ubpara ubpara    6 5月  14 19:17 a
660116 drwxrwxr-x 2 ubpara ubpara 4096 5月  14 19:21 test
[ubpara link]$mv a test/
[ubpara link]$ls -il test/
总用量 4
660108 -rw-rw-r-- 1 ubpara ubpara 6 5月  14 19:17 a
[ubpara link]$

总结

  • ls -i 可以查看文件的inode号
  • 复制是将数据块的内容进行复制一遍
  • 剪切只是修改了文件项中的内容,其数据块保持不变

将整个过程画一遍,你就会很清楚整个模块

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章