從inode角度描述cp,mv,rm行為

2021-09-30 15:40:10 字數 1411 閱讀 2526

1 概述

我們常以為目錄是個容器,放著目錄和檔案。實際上,目錄是個對映表。人使用檔名來引用檔案,計算機使用inode號碼來引用檔案。而目錄則是檔名和inode號碼之間的對映表。

2 cp和inode

用法:

cp [選項] 檔案 [檔案2|檔案3...]  目標

選項:-i 在覆蓋檔案前詢問

-r 遞迴地複製整個目錄樹

-p 保留許可權,所有者,和時間戳

-a -r和-p的結合

cp命令必須總是至少有兩個引數,如果給出的引數超過兩個,除了最後乙個引數以外的所有引數都會被解系成原始檔

目標影響cp的行為:

如果目標是目錄,複製後的檔案就會被放置其中

如果目標是檔案,複製後的檔案就會覆蓋目標

如果目標不存在,複製後的檔案就會被重新命名為目標名

inode角度:

1)分配乙個未用的inode號碼,在inode表中新增乙個新專案

2)在目錄對映表建立一行,關聯檔名和inode號碼

3 mv和inode

mv的行為和cp相同,除了mv時,原始檔會消失

當乙個檔案mv後,構成這個檔案的實際內容,不管是inode專案還是硬碟上的資料,都沒有被轉移。被轉移的僅僅是目錄對映表。

兩種情況:

1)目標和原檔案在同乙個檔案系統

a)在目錄對映表新建一行

b)刪除帶有源檔名的原有目錄行

2)如果目標是不同的檔案系統

mv的行為就是複製和刪除

案例:

[root@think water]# ll -i w

3496568 -rw-r--r-- 1 root root 17 09-25 15:12 w

[root@think water]# mv w /home/water

[root@think water]# cd /home/water

[root@think water]# ll -i w

3496568 -rw-r--r-- 1 root root 17 09-25 15:12 w

inode號碼仍就一樣。檔案系統上的資料沒轉移,inode表沒變,只不過其上的時間戳被更新

4 rm和inode

rm -r 刪除目錄及其內容,但每刪一樣之前都會詢問

rm -f 刪除目錄及其內容,但每刪一樣之前不會詢問

inode分析:

1)遞減鏈結計數,從而釋放inode號碼,這個inode號碼可以被重用

2)把資料塊掛到可用空間列表

3)刪除目錄對映表中的相關行

但是底層資料實際上沒有被刪除,只是當資料塊被另乙個檔案使用時,原來的資料就會被覆蓋

描述角度的分布彙總

最近在尋找描述角度的分布時,發現了一本書 statistical analysis of circular data 對於這些分布的特性與應用比較詳細,在這裡先記錄幾個典型分布作為之前博文的備選。f c 1 2 f theta frac fc 2 1 其中 0,2 0,1 2 theta in 0,...

從記憶體角度看問題

本人程式設計時間雖然不長。但現在覺得一些問題不能光從語法角度理解,能從在記憶體中是如何的角度考慮,似乎問題想得更清楚,更容易理解。畢竟我們讓乙個應用程式執行,就是啟動乙個程序,作業系統賦予它位址空間,將相應的 和資料載入到位址空間。再載入dll,啟動新執行緒,也都是在分配記憶體 物理空間 載入 或維...

從設計角度分析MVC

ps 原來寫文章是從來也不寫提綱的,現在通過不斷的設計訓練和 注釋的影響,沒提綱就寫不下去了 言歸正傳,mvc作為一種軟體設計模式,它用一種業務邏輯 資料和介面顯示互相分離的方法組織 將業務邏輯單獨封裝,使得在介面及與使用者互動的形式改變時不影響到邏輯。1 模式簡介 mvc是一種建立web應用程式的...