[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號
  • 複製是將數據塊的內容進行復制一遍
  • 剪切只是修改了文件項中的內容,其數據塊保持不變

將整個過程畫一遍,你就會很清楚整個模塊

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