檔案系統零散知識

2021-07-29 13:53:45 字數 2301 閱讀 4785

1.檔案管理

檔案系統描述檔案在硬碟中的組織,儲存在硬碟中的檔案,目錄,軟鏈結。

為了更加方便的管理持久化檔案儲存,作業系統一般對應胖進行有規劃的管理,

規劃包括:

。分割槽。格式化

檔案系統指乙個分區內,檔案儲存組織的方式

在linux下,通過mount命令將分割槽掛載到虛擬檔案系統

2,inode

乙個音訊分割槽,被格式化之後,可以認為硬碟被劃分成兩部分:管理資料和資料

管理資料部分儲存著這個分割槽的分割槽資訊,以及inode表.

inode儲存檔案的屬性資訊,stat命令能看到的資訊,大部分都是儲存在inode裡的乙個inode占用128或256個位元組,這個依賴具體的檔案系統,每當在硬碟上建立乙個檔案/目錄           時,系統為這個檔案/目錄分配乙個inode。值得注意的是,檔名,不存在inode中,而是存在檔案內容部分.

3,資料塊

資料部分被簡單的,根據等大尺寸劃分成n塊,一般每塊資料塊的尺寸為1024--4096,由具體檔案系統決定

4,檔案

當建立乙個檔案時,系統為該檔案分配乙個inode.如果往該檔案寫資料,那麼系統為該檔案分配資料庫,inode會記錄這個資料塊的位置,當乙個資料塊不夠用的時候,系統會繼續為他分配資料塊

5,目錄

當建立乙個目錄時,系統為該目錄分配乙個inode,同時分配乙個資料庫,並且在該資料塊中,記錄檔案好對應的inode,同時分配乙個資料塊,並且在該資料塊中,記錄檔案和對應的inode

如果該目下建立檔案,newfile,會為該檔案建立inode,最後將newfile檔名he ==和它的indoe,做了一條記錄,儲存在目錄的數資料塊.

如果乙個inode被別人引用,那麼它的引入計數器加1.

6,路口和定址

linux系統採用以/劃分的路徑字串來定址檔案

比如命令mkdir testdir,定址和操作過程如下圖:

補充:檢視磁碟資訊

sudo fdisk -l

磁碟名字sda sdb....

分割槽名字 sda1 sda2....

分割槽sudo fdisk /dev/sdb

n 建立新分割槽

p輸出分割槽資訊

w儲存分割槽資訊並退出

分割槽和掛載

sudo mkfs.ext4 /dev/sdb1

sudo mount  /dev/sdb1 xxyy

掛載成功之後,對xxyy目錄的讀寫,其實實在/dev/sdb1檔案系統中

開機自動掛載

通過mount掛載的目錄時臨時的.如果希望開機就掛載,那麼可以將掛載命令寫入到etc/profil.或者修改/etc、fstab檔案,/etc/fstab描述了開機需要掛載的檔案系統資訊

去除掛載

通過手動umount去除掛載

7 硬鏈結和軟連線

硬鏈結不占用inode,只占用目錄項

軟鏈結占用inode

建立鏈結命令ln,硬鏈只將對應的inode在目錄總增加乙個名字,並且將inode的引用計數器+1

為了可以跨檔案系統和對目錄進行鏈結,建立軟鏈結這種軟鏈結這個方式. ln -s

8,虛擬檔案系統 vfs

記憶體無法載入硬碟所有內容,應為一般記憶體比硬碟小,但是在linux 核心中,維護了乙個虛擬檔案系統,將硬碟的目錄結構對映到記憶體中,這個對映一般只包含已經被開啟的檔案

9, 檔案刪除

使用unlink命令和函式可以刪除乙個檔案。

如果此時檔案已經被開啟,那麼該檔案也可以被unlink,但是刪除操作不會立即執行,而會保留到檔案關閉時執行

unlink 刪除檔案,如果是鏈結,就刪除鏈結,如果不是鏈結就刪除檔案

rmdir 只能刪除空目錄

rm 會判斷引數型別,如果是檔案那麼會呼叫unlink,如果是目錄會呼叫rmdir

如果要刪除非空目錄,要使用rm -r, -r選項先刪除目錄中的檔案,再呼叫rmdir

10 檔案時間

對檔案的訪問,會導致檔案時間發生變化,系統會自動記錄使用者對檔案的操作的時間戳,以便將來可以查詢檔案修改時間

如果需要故意修改,那麼可以通過utime函式,修改檔案的訪問時間和修改時間

touch 命令也可以將檔案的時間修改為當前時間,touch命令的***是,如果引數所指檔案不存在, 那麼建立乙個空檔案

當使用者進行打規模拷貝時,cp操作會修改檔案的訪問時間,如果想提高效率,可以使用-p選項,避免檔案屬性的修改時間

11 目錄操作

建立和刪除目錄

mkdir和rmdir

遍歷目錄

opendir, closedir, readdir, rewinddir , telldir, seekdir

零散知識收集

success在介面com.opensymphony.xwork2.action中定義,另外同時定義的還有error,input,login,none。值得一提的是struts 2.0中的result不僅僅是struts 1.x中forward的別名,它可以實現除forward外的很激動人心的功能,...

C 零散知識

全域性變數的初始化時機 c 是在編譯期初始化,c 是在程式執行時,main 函式之前初始化.不使用中間變數實現 strlen int mystrlen const char str c 語言函式引數入棧順序為從右至左。具體原因為 c 方式引數入棧順序 從右至左 的好處就是可以動態變化引數個數。通過棧...

Python 零散知識

1.set 集合 2.格式化字串時 可以使用 元組 eg info zhangsan 18 print s 年齡是 d info 3.zip的 使用方法 a 1,2,3 b 4,5,6 c 4,5,6,7,8 zipped zip a,b 打包為元組的列表 1,4 2,5 3,6 zip a,c 元...