2013-11-25 44 views
0

當你在linux中複製文件時(使用contex menu copy命令)linux是否創建文件的硬鏈接? 此外,如果刪除原始文件而不是硬鏈接,該文件仍會保留在內存中,但它的指針被刪除會發生什麼? 我很難理解一些內存的東西。 要釋放磁盤空間,您需要刪除這兩個文件,對不對? 硬鏈接指向原始文件的內存位置嗎?我曾經看到term inode,我現在很清楚確定inode的真實含義。硬鏈接linux,內存

回答

1

inode是除內容以外的所有文件數據。 「這個目錄包含文件foo,它是這個驅動器上的文件編號3,bar,它是文件編號4,quux,17,即123,最後是ohmygod,77321341 」。編號爲3的節點包含「該文件創建於1970年1月1日,最後修改於1990年1月1日,最後一次於1990年1月2日修改。它的大小爲722字節,這些字節在驅動器」還有其他一些事情。

stat()系統調用顯示需要多少個塊,以及幾乎所有其他與inode相關的塊。

+0

如何調用stat()? – user2982390

+0

這取決於編程語言。如果你只是想玩,試試perl,perl對於小黑客來說是個不錯的選擇。人perlfunc,搜索統計。 – arnt

+0

如何從終端調用它? :d – user2982390

0

複製不會創建硬鏈接,那將是違規的行爲。硬鏈接只是對同一個文件的額外的頭等名稱;通過一個名稱修改文件(而不是通過保存臨時名稱,然後移動它,如同一些編輯器那樣),並且當以其他名稱訪問時,您將看到文件中的更改。不是我期望的副本。

請注意,文件的名字沒有特別之處。所有的硬鏈接都只是指向同一個文件。

一旦指向文件的最後一個目錄條目被刪除,仍然可能有文件句柄打開指向它(從打開該文件的程序)。只要其中一個存在,該文件仍然存在並可以使用。它不能由以前沒有做過的進程打開,因爲它沒有名字了。

當沒有更多的目錄條目指向一個文件,並且沒有任何程序有更多的文件打開句柄時,它再也無法達到。因此,操作系統釋放磁盤上的空間。

+0

你告訴我我已經知道的一切:/ 如何查看特定文件消耗多少空間? 當我複製文件並使用ll -h命令時,它總是說4K – user2982390

+0

您問「做A做B?」,我的答案以「不,A不做B」開頭。如果您已經知道,爲什麼要問?在大多數文件系統上,小文件總是會佔用一個完整的塊,而在您的計算機上似乎是4k。 –

+0

此外,您正在討論「刪除兩個文件」,其中只有一個文件,其中有兩個目錄條目指向它。似乎你應該重新閱讀我寫的內容。 –