導航:首頁 > 操作系統 > linux元數據

linux元數據

發布時間:2023-03-13 15:06:40

『壹』 linux文件系統的演變

說起文件系統的演變與發展,不得不從最早期的 Minix 操作系統開始說起。

Minix(MINI-UNIX) 是早期的一個迷你版本的 「類UNIX操作系統」 ,由荷蘭阿姆斯特丹自由大學計算機科學系的塔能鮑姆教授自行開發的可以與UNIX操作系統兼容的一個操作系統,因其小型,該操作系統被命名為 MINIX 。

MINIX 系統在設計之初,採用程序模塊化的思想,將一眾程序放在用戶空間運行,而不是在操作系統的內核中運行。如 「文件系統」 「存儲器管理」 等程序均是如此。

受 MINIX 操作系統的影響,早期的Linux操作系統也曾採用由塔能鮑姆教授開發的MINIX的文件系統。

然而,不只因為早期的 MINIX 操作系統並為真正意義上的開源軟體(在保護著作的前提下進行收費),而且基於 MINIX 的內部使用16位的偏移量,使文件系統能夠支持的最大空間只有64MB,支持的最大文件名為14字元,導致後來 Linux 操作系統轉而開發出了 ext(Extended File System) 第一代可擴展文件系統。

ext(Extended File System) 為Linux系統最早的擴展文件系統,採用 「UNIX文件系統」 的元數據結構,克服了 「MINIX」 操作系統性能不佳的問題。

ext 文件系統採用 虛擬文件系統(VFS) ,最大可支持2GB的文件系統。與 MINIX 文件系統不同的是, ext 可以使用最高2GB的存儲空間並同時處理255個字元的文件名。

但,在 ext 文件系統中,文件創建時生成的 inode 信息是不變的,這導致文件發生修改後 inode 中儲存的文件時間戳並不會發生變化;而且 ext 並不會為文件妥善分配空間,磁碟上的多個文件四散分布,嚴重製約了文件系統的性能。

ext 文件系統推出後不久,其開發者便意識到 ext 文件系統中存在很大缺陷( inode不變性 和 文件空間碎片化 ),並在一年後推出了 ext2 (Second Extened File System) 第二代擴展文件系統,用來代替 ext 文件系統。

ext2 吸取了 「UNIX文件系統」 的眾多優點,並且因其良好的可擴展性( 為系統在磁碟上存儲的數據結構預留了很多空間提供給開發者使用 ),在20世紀90年代眾多文件系統中脫穎而出。

眾多新的特性, POSIX(可移植操作系統介面) 、 訪問控製表 等都是在這一代擴展文件系統上實現的。直至今天, POSIX 仍被眾多操作系統所沿用。

不僅如此, ext2 還在 ext 的基礎上進行了完善,能夠最大支持的單個文件達到 2TB。

ext2 文件系統與20世紀90年代的眾多文件系統一樣,將數據寫入到磁碟的過程中如果發生系統奔潰或斷電,極容易導致文件損壞或丟失。

正是因為類似 ext2 等同時期的一眾文件系統,在遭遇系統奔潰或斷電時會出現文件損壞或丟失。盡管 ext2 文件系統擁有開機後對文件系統中文件的一致性校驗,但校驗的過程極為耗時,且校驗的過程中,操作系統上的任何卷組都是不可訪問的。

然而 ext2 遺留的問題在 ext3(Third Extended File System) 中得到了解決。

ext3 文件系統採用日誌記錄的方式,記錄下了操作系統運行中的所有事件,這意味著即便遇到操作系統非正常關機後也無須對文件系統進行校驗,從而防止了文件系統中數據丟失的可能。

盡管 ext3 使用日誌系統進行記錄文件系統的變化,但這並沒有影響 ext3 文件系統處理數據的速度。基於日誌系統在磁碟上的優化,在 ext3 中數據的傳輸效率是高於 ext2 的,並且可以通過重新設置日誌的級別來提升文件系統的性能。

其次, ext3 在設計之初就吸收了 ext2 的很多思想,這使得 ext2 文件系統遷移到 ext3 變得極為便利。事實上, ext3 可以在從 ext2 遷移 ext3 的過程中,無須進行文件系統資料的備份,且無須擔心升級後的數據恢復問題。

也正是因為 ext3 設計之初沿用了眾多 ext2 的功能,這使得 ext3 缺乏變通。例如, 「inode的動態分配」 「可變塊大小」 等問題並沒有得到解決。不僅如此, ext3 文件系統在被掛載為寫入時,無法對文件系統進行完整性校驗。

第四代擴展文件系統( Fourth Extended File System, ext4 ) 是繼 ext3 文件系統的後續版本,不僅支持 ext3 的日誌文件體系 ,同樣支持 大文件系統 ,不僅提高了文件系統對於存儲碎片化的抵抗,而且改進了 inode固一化 的問題。

同時, ext4 文件系統在開發之初就考慮到很多問題,對眾多問題的優化和改進也使得 ext4 擁有了眾多新的特性。例如, 大文件系統 、 使用Extent文件存儲的方式 、 預分配空間 、 延遲文件獲取空間的時間 、 突破原有子目錄限制 、 增加日誌校驗和 、 在線整理磁碟 、 文件系統快速檢查 、 向下兼容其他ext文件系統`。

時至今天, ext4 文件系統已經成為Linux發行版默認使用的文件系統。

與 ext2 文件系統同一時期出現的,還有 xfs 文件系統。 xfs 文件系統是高性能的文件系統,最早在 IRIX 操作系統上開發,後期被移植到 Linux 操作系統上。現在所有的 Linux發行版 都支持 xfs 的使用。

相比 32位 Linux 的操作系統來說,64位 xfs 的文件系統能夠支持的單個文件系統要遠遠超出 32位 操作系統。

xfs 對文件系統元數據提供了日誌支持,當文件系統發生變化後,總是會保證源數據在數據塊寫入磁碟之前被寫入日誌中,磁碟中有一處緩沖區專門用來存放日誌,從而不會影響正常的文件系統。

xfs 同樣支持 「條帶化分配」 。在條帶化RAID陣列上創建 xfs 文件系統時,可以指定 條帶化數據單元。通過配置條帶化單元,使 數據分配、inode分配、日誌等與RAID條帶單元對齊,來提高文件系統的性能。

與 ext4 文件系統不同的是, xfs 文件系統還支持在線恢復。 xfs 文件系統提供了 xfsmp 和 xfsrestore 工具協助備份 xfs 文件系統中的數據。

以下為各文件系統的出現時間及特性:

參考自: https://zh.wikipedia.org/wiki/Ext4

『貳』 Linux日誌式文件系統面面觀

文件系統是用來管理和組織保存在磁碟驅動器上的數據的系統軟體,其實現了數據完整性的保 證,也就是保證寫入磁碟的數據和隨後讀出的內容的一致性。除了保存以文件方式存儲的數據以外,一個文件系統同樣存儲和管理關於文件和文件系統自身的一些重要信息(例如:日期時間、屬主、訪問許可權、文件大小和存儲位置等等)。這些信息通常被稱為元數據(metadata)。

由於為了避免磁碟訪問瓶頸效應,一般文件系統大都以非同步方式工作,因此如果磁碟操作被突然中斷可能導致數據被丟失。例如如果出現這種情況:如果當你處理一個在linux的ext2文件系統上的文檔,突然機器崩潰會出現什麼情況?

有這幾種可能:

*當你保存文件以後,系統崩潰。這是最好的情況,你不會丟失任何信息。只需要重新啟動計算機然後繼續工作。

*在你保存文件之前系統崩潰。你會丟失你所有的工作內容,但是老版本的文檔還會存在。

*當正在將保存的文檔寫入磁碟時系統崩潰。這是最糟的情況:新版文件覆蓋了舊版本的文件。這樣磁碟上只剩下一個部分新部分舊的文件。如果文件是二進制文件那麼就會出現不能打開文件的情況,因為其文件格式和應用所期待的不同。

在最後這種情況下,如果系統崩潰是發生在驅動器正在寫入元數據時,那麼情況可能更糟。這時候就是文件系統發生了損壞,你可能會丟失整個目錄或者整個磁碟分區的數據。

linux標准文件系統(ext2fs)在重新啟動時會通過調用文件掃描工具fsck試圖恢復損壞的元數據信息。由於ext2文件系統保存有冗餘的關鍵元數據信息的備份,因此一般來說不大可能出現數據完全丟失。系統會計算出被損壞的數據的位置,然後或者是通過恢復冗餘的元數據信息,或者是直接刪除被損壞或是元數據信息損毀的文件。

很明顯,要檢測的文件系統越大,檢測過程費時就越長。對於有幾十個G大小的分區,可能會花費很長時間來進行檢測。由於Linux開始用於大型伺服器中越來越重要的應用,因此就越來越不能容忍長時間的當機時間。這就需要更復雜和精巧的文件系統來替代ext2。

因此就出現了日誌式文件系統(journalling filesystems)來滿足這樣的需求。

什麼是日誌式文件系統

這里僅僅對日誌式文件系統進行簡單的說明。如果需要更深入的信息請參考文章日誌式文件系統,或者是日誌式文件系統介紹。

大多數現代文件系統都使用了來自於資料庫系統中為了提高崩潰恢復能力而開發的日誌技術。磁碟事務在被真正寫入到磁碟的最終位置以前首先按照順序方式寫入磁碟中日誌區(或是log區)的特定位置。

根據日誌文件系統實現技術的不同,寫入日誌區的信息是不完全一樣的。某些實現技術僅僅寫文件系統元數據,而其他則會記錄所有的寫操作到日誌中。

現在,如果崩潰發生在日誌內容被寫入之前發生,那麼原始數據仍然在磁碟上,丟失的僅僅是最新的更新內容。如果當崩潰發生在真正的寫操作時(也就是日誌內容已經更新),日誌文件系統的日誌內容則會顯示進行了哪些操作。因此當系統重啟時,它能輕易根據日誌內容,很快地恢復被破壞的更新。

在任何一種情況下,都會得到完整的數據,不會出現損壞的分區的情況。由於恢復過程根據日誌進行,因此整個過程會非常快只需要幾秒鍾時間。

應該注意的是使用日誌文件系統並不意味著完全不需要使用文件掃描工具fsck了。隨機發生的文件系統的硬體和軟體錯誤是根據日誌是無法恢復的,必須藉助於fsck工具。

目前Linux環境下的日誌文件系統

在下面的內容里將討論三種日誌文件系統:第一種是ext3,由Linux內核Stephen Tweedie開發。ext3是通過向ext2文件系統上添加日誌功能來實現的,目前是redhat7.2的默認文件系統;Namesys開發的ReiserFs日誌式文件系統,可以下載,目前Mandrake8.1採用該日誌式文件系統。SGI在2001年三月發布了XFS日誌式文件系統。可以在 oss.sgi.com/projects/xfs/下載。下面將對這三種日誌文件系統採用不同的工具進行檢測和性能測試。

安裝ext3

關於ext3文件系統技術方面的問題請參考Dr. Stephen Tweedie的論文和訪談。ext3日誌式文件系統直接來自於其祖先ext2文件系統。其具有完全向後兼容的關鍵特性,實際上其僅僅是在ext2日誌式文件系統上添加了日誌功能。其最大的缺點是沒有現代文件系統所具有的能提高文件數據處理速度和解壓的高性能。

ext3從 2.2.19開始是作為一個補丁方式存在的。如果希望對內核添加對ext3文件系統的支持,就需要使用補丁,可以得到補丁程序,一共需要如下文件:

* ext3-0.0.7a.tar.bz2:內核補丁

* e2fsprogs-1.21-WIP-0601.tar.bz2 支持ext3的e2fsprogs程序套件

拷貝linux-2.2.19.tar.bz2和ext3-0.0.7a.tar.bz2到/usr/src目錄下,進行解壓:

mv linux linux-old

tar -Ixvf linux-2.2.19.tar.bz2

tar -Ixvf ext3-0.0.7a.tar.bz2

cd linux

cat ../ext3-0.0.7a/linux-2.2.19.kdb.diff | patch -sp1

cat ../ext3-0.0.7a/linux-2.2.19.ext3.diff | patch -sp1

首先對內核添加SGI的kdb內核調試器補丁,第二個是ext3文件系統補丁。下來就需要配置內核,對文件系統部分的"Enable Second extended fs development code"回答Yes。然後編譯

內核編譯安裝以後,需要安裝e2fsprogs軟體套件:

tar -Ixvf e2fsprogs-1.21-WIP-0601.tar.bz2

cd e2fsprogs-1.21

./configure

make

make check

make install

下來要做的工作就是在分區上創建一個ext3文件系統,使用新內核重新啟動,這時候你有兩種選擇創建新的日誌文件系統或者對一個已有的ext2文件系統升級到ext3日誌文件系統。

對於需要創建新ext3文件系統的情況下,只需要使用安裝的e2fsprogs軟體包中的mke2fs命令加-f參數就可以創建新的ext3文件系統:

mke2fs -j /dev/xxx

這里/dev/xxx是希望創建ext3文件系統的新分區。-j參數表示創建ext3而不是ext2文件系統。可以使用參數"-Jsize="來指定希望的日誌區大小(n單位為M)。

升級一個已有的ext2,使用tune2fs就可以了:

tune2fs -j /dev/xxx

你可以對正在載入的文件系統和沒有載入的文件系統進行升級操作。如果當前文件系統正在被載入,則文件.journal會在文件系統載入點的所在目錄被創建。如果是升級一個當時沒有載入的文件系統,則使用隱含的系統inode來記錄日誌,這時候文件系統的所有內容都會被保留不被破壞。

你可以使用下面的命令載入ext3文件系統:

mount -t ext3 /dev/xxx /mount_dir

由於ext3實際上是帶有日誌功能的ext2文件系統 ,因此一個ext3文件系統可以以ext2的方式被載入。

安裝XFS文件系統

如果需要從技術方面了解XFS文件系統,請參考SGI的XFS文件系統和SGI信息頁面。也可以參考FAQ。

XFS是一個SGI開發的linux環境下的日誌文件系統,它是一個成熟的技術,最初是使用在IRIX系統上的文件系統。XFS遵循GPL版權申明。目前xfs文件系統最新版本是1.02。下載得到對內核xfs文件系統支持補丁或者直接下載RPM包方式的內核,下面我們就以補丁方式說明如何對2.4.14內核使用xfs。首先下載如下內容

patch-2.4.14-xfs-1.0.2.bz2

patch-2.4.14-xfs-1.0.2-kdb.bz2

拷貝Linux內核linux-2.4.2.tar.bz2到 /usr/src目錄下,修改老的內核目錄名,然後解壓新內核:

mv linux linux-old

tar -Ixf inux-2.4.2.tar.bz2

拷貝每個每個補丁到內核源碼目錄下(例如:/usr/src/linux),並打補丁:

zcat patch-2.4.14-xfs-1.0.2.bz2 | patch -p1

zcat patch-2.4.14-xfs-1.0.2-kdb.bz2 | patch -p1

然後配置內核,打開文件系統部分的內核選項:"XFS filesystem support" (CONFIG_XFS_FS)和"Page Buffer support" (CONFIG_PAGE_BUF)。同時需要升級下面這些系統工具到下面或更高的版本:

motils-2.4.0

autoconf-2.13

e2fsprogs-devel-1.18

安裝新內核並重啟伺服器。

然後下載xfs工具。這個軟體包包括下面的命令來處理文件系統,使用下面的命令來安裝該軟體包::

tar -zxf xfsprogs-1.2.0.src.tar.gz

cd xfsprogs-1.2.0

make configure

make

make install

安裝這些命令以後,就可以創建新的XFS文件系統:

mkfs -t xfs /dev/xxx

如果xxx是一個已經存在的文件系統,那麼就需要使用"-f"參數來創建新分區,但是記得這將會破壞該分區的所有數據。

mkfs -t xfs -f /dev/xxx

創建以後就可以使用基於下面的命令載入新文件系統:

mount -t xfs /dev/xxx /mount_dir

安裝ReiserFS文件系統

如果希望更多地從技術方面了解reiserFS文件系統,請參考NAMESYS和FAQ。

ReiserFS文件系統從2.4.1-pre4開始就是Linux內核的正式支持的文件系統了。為了使用reiserFS文件系統那你首先需要在系統上安裝文件系統支持工具(如:創建ReiserFS文件系統的mkreiserfs工具)。最新的ReiserFS文件系統版本可以以補丁的方式添加到2.2.x或者2.4.x內核中。這里我們以2.2.19為例:

第一步,首先下在內核源碼,並下在ReiserFS文件系統的2.2.19補丁 ,目前補丁最新版本是linux-2.2.19-reiserfs-3.5.34-patch.bz2。同時應該下載工具軟體包:reiserfsprogs-3.x.0j.tar.gz。

然後解壓內核源碼和補丁包到/usr/src中:

tar -Ixf linux-2.2.19.tar.bz2

bzcat linux-2.2.19-reiserfs-3.5.34-patch.bz2 | patch -p0

編譯內核支持reiserfs,安裝內核。然後安裝文件系統工具軟體:

cd /usr/src/linux/fs/reiserfs/utils

make

make install

安裝新內核並重新啟動。現在就可以創建新的'reiserfs文件系統,並載入:

mkreiserfs /dev/xxxx

mount -t reiserfs /dev/xxx /mount_dir

文件系統性能測試

測試環境使用的計算機環境如下:Pentium III - 16 Mb RAM - 2 Gb HD,操作系統為RedHat6.2。所有的文件系統都能正常工作,所以就進行benchmark分析來對它們進行性能比較。首先我直接拔掉系統電源以模擬系統掉電情況,以測試日誌文件系統恢復過程。所有的文件系統都成功地經過了文件掃描檢測階段,在數秒以後系統都經過了掃描然後正常啟動了系統。

下一步就採用了bonnie++性能測試程序進行測試,這個程序對一個文件進行資料庫類型的訪問,進行了創建、讀和刪除小文件,這些操作對於Squid、INN或者Maildir格式的郵件伺服器程序(qmail)是最常見的操作。性能測試命令為:

bonnie++ -d/work1 -s10 -r4 -u0

其對載入在/work1目錄下的文件系統進行了10Mb(-s10)的測試。因此在執行測試之前必須創建適當類型的文件系統並載入到目錄/work1下。其他的參數指定內存大小(-r4)的M數,和以root身份運行測試程序,測試結果如下:

每種測試都有兩組數據:文件系統速度(K/sec)和CPU佔用率(%CPU)。速度越高,文件系統越好。而對於CPU率來說,數字越小性能越好。可以看到Reiserfs文件系統在文件操作方面(Sequential Create和Random Create部分的) 的性能最好,超出其他文件系統10倍之多。在其他方面(Sequential Output和Sequential Input)則和其他文件系統性能不相上下。對於其他文件系統則沒有特別明顯的區別。XFS性能接近ext2文件系統,ext3文件系統則比ext2要稍微慢上一些(因為記錄日誌需要一些額外的時間)。 最後使用從得到的性能測試程序mongo,並對其進行了修改以對三種日誌文件系統進行測試。這里在mongo.pl程序中添加了添加了載入xfs和ext3文件系統的命令,並對其進行格式化處理,然後就開始性能測試分析。 該腳本格式劃分區/dev/xxxx,載入其並在每個階段運行指定數目的進程:創建、拷貝、符號連接處理、讀、顯示文件狀態信息、重命名和刪除文件。同時,該程序在創建和拷貝階段以後會計算分段數(fragmentation)。

Fragm = number_of_fragments / number_of_files

可以在結果文件中得到同樣的測試比較結果:

log - 原始結果

log.tbl - 比較程序的輸出結果

log_table - 表格式的結果

下面的命令進行測試:

mongo.pl ext3 /dev/hda3 /work1 logext3 1

如果要測試其他文件系統,就需要把上面命令的參數中的ext3修改為reiserfs或xfs。其他參數分別為要載入的分區,載入路徑,保存測試結果的文件名及啟動的進程數。

下面的表格是測試結果。數據單位為秒。值越低性能越好。第一個表格測試使用的數據塊大小為100位元組,第二個表格為1000位元組,最後一個為10000位元組

從上面的表格可以看到ext3在狀態刪除和重命名方面要性能更好一些,而ReiserFS文件系統在文件創建和拷貝性能表現更出色。同時也可以看到reiserFS正如其技術文檔提到的其在小文件處理方面性能相當出色。

結論

目前Linux至少有兩個健壯可靠的日誌文件系統可供選擇(XFS和reiserFS),其都得到了廣泛的應用。例如Mandrake8.1就默認支持reiserFS文件系統。

從性能測試的結果可以看到,reiserFS是最好的選擇。

『叄』 Linux文件存儲和刪除的過程

我們在Linux上創建或刪除一個文件或文件夾,都習以為常,但這背後的實現原理是什麼呢?

imap:inode map映射表

bmap:block map映射表

假如要存儲a.txt到/tmp目錄下。

當a.txt文件要存儲到/tmp下時:

1) 元數據區分配node id :從元數據區的inode table中找一個空閑的inode號分配給a.txt,如2222。再將imap表中2222這個inode號標記為已使用。

2) 數據區添加記錄 :在/tmp的data block中添加一條a.txt文件的記錄。該記錄中包括一個指向inode號的指針,例如"0x2222"。

3) 元數據區分配data block(每段空間)並寫數據到數據區data block :從元數據區bmap中找出空閑的data block,並開始將a.txt中的數據寫入到data block中。每寫一段空間( ext4每次分配一段空間 )就從bmap中找一次空閑的data block,直到存完所有數據。

4) 元數據區設置inode id的data block point :元數據區在inode table中設置關於2222這條記錄的data block point指針,通過該指針可以找到a.txt使用了哪些data block。

當要刪除a.txt文件時:

1) 元數據區取消inode id的data block  point :在inode table中刪除指向a.txt的data block指針。這里只要一刪除,外界就找不到a.txt的數據了。但是這個文件還存在,只是它是被"損壞"的文件,因為沒有任何指針指向數據塊。

2) 元數據區釋放node id :在imap中將2222的inode號標記為未使用。這個inode號就被釋放,可以被後續的文件重用。

3) 數據區刪除記錄 :刪除父目錄/tmp的data block中關於a.txt的記錄。這里只要一刪除,外界就看不到也找不到這個文件了。

4) 元數據區釋放data block :在bmap中將a.txt佔用的block標記為未使用。這里被標記為未使用後,這些data block就可以被後續文件覆蓋重用。

考慮一種情況,當一個文件被刪除時,但此時還有進程在使用這個文件,這時是怎樣的情況呢?外界是看不到也找不到這個文件的,所以刪除的過程已經進行到了第(3)步。但進程還在使用這個文件的數據,也能找到這個文件的數據,是因為進程在載入這個文件的時候就已經獲取到了該文件佔用哪些data block,雖然刪除了文件,但bmap中這些data block還沒有標記為未使用。

詳細分析和df的統計結果為什麼不一樣

『肆』 Linux軟鏈接和硬鏈接的區別之ln命令詳解

1. 先來了解一下Linux數據是如何保存和查詢的

對操作系統來說,數據分為兩種:1. 用戶數據 (user data) 2.元數據 (metadata)。用戶數據就是保存和記錄文件的內容。比如一個1M的ppt文件,500K的txt文件。這都屬於用戶數據。這個文件總有屬性吧,比如大小、修改時間、訪問時間、創建時間、存儲的位置(文件所在的inode)、文件創建者等等信息。這些屬性信息或者理解為匯總信息,我們稱它為元數據。一句話,用戶數據是文件的真實內容,而元數據則是匯總信息。

在 Linux 中,元數據中的 inode 號(inode 號即索引節點號)才是文件的唯一標識而非文件名。文件名僅是為了方便人們的記憶和使用,系統或程序通過 inode 號尋找正確的文件數據塊。

2. 查看文件對應的inode號

134474678 latest.tar.gz

linux查看文件對應的inode號

可以看出latest.tar.gz這個文件, inode 號是134474678,Linux查找讀寫該文件時,以為個inode號碼為標識,而不是文件名。文件名類似於網站域名,僅僅是方便人類記憶。

也就是說, inode134474678有一個硬鏈接,它就是latest.tar.gz。

3. 根據inode號查找對應的文件

那麼,問題來了,系統上有沒有第二個文件,它的inode號碼也是13447467。

使用find查找一下:

查找結果如下:

/root/latest.tar.gz

/root/latest2.tar.gz

linux根據inode號查找對應的文件

硬碟上真的有第二個文件它的inode號碼也是134474678,像這種情況,我們認為inode134474678有兩個硬鏈接。當然,這是本文作者提前准備好的。

為解決文件的共享使用,Linux 系統引入了兩種鏈接:硬鏈接 (hard link) 與軟鏈接(又稱符號鏈接,即 soft link 或 symbolic link)。鏈接為 Linux 系統解決了文件的共享使用,還帶來了隱藏文件路徑、增加許可權安全及節省存儲等好處。

4. 確認硬鏈接的數量

查看一下文件latest.tar.gz

輸出結果如下:

-rwxr-xr-x. 2 root root 8743850 Oct 11 15:00 latest.tar.gz

請留意輸出的結果中的數字2,表示該文件存在2個硬鏈接。

正常情況下,一個inode只有一個鏈接,如下例

輸出結果:

-rw-r--r--. 1 root root 9 Nov 21 11:39 abc.txt

請留意輸出的結果中的數字1,表示該文件只存在1個硬鏈接,默認情況下,文件都是只有一個硬鏈接的。

5. 查看軟鏈接

再來看一個文件

lrwxrwxrwx. 1 root root 15 Sep 26 15:57 /dev/stdout -> /proc/self/fd/1

linux查看軟鏈接

我們發現,/dev/stdout實際上指向另一個文件/proc/self/fd/1,這就是軟鏈接。類似於Windows系統上的快捷方式。

6. 軟鏈接與硬鏈接的區別

6.1 軟鏈接特點

6.2 硬鏈接特點

ln鏈接符原理如下:

Linux ln鏈接符原理圖

7. 創建文件的鏈接

Linux ln命令是一個非常重要而且常用命令,它用於為文件或者目錄創建鏈接。

7.1 創建軟鏈接

創建一個文件,用於演示軟鏈接。

創建軟鏈接示例:

檢查結果:

輸出文件屬性

lrwxrwxrwx. 1 root root 8 Nov 26 17:48 soft123.txt -> soft.txt

linux創建軟鏈接

可以看出這個文件指向當前目錄soft.txt,配置成功。7.2 創建硬鏈接

創建一個文件,用於演示硬鏈接。

創建硬鏈接,沒有使用選項

檢查結果:

輸出文件屬性:

-rw-r--r--. 2 root root 0 Nov 26 17:47 hard123.txt

linux創建硬鏈接

留意以上輸出數字2,表明該文件有2個副本。

8. 總結

ln命令可以創建文件的副本,也可以創建軟鏈接。

『伍』 五分鍾讓你明白linux的軟鏈接和硬鏈接的用法

 什麼是軟鏈接和硬鏈接,很多人對這個概念比較模糊,這里幫助你明白他們之間的區別和用法。

為解決文件的共享使用,Linux 系統引入了兩種鏈接:硬鏈接 (hard link) 與軟鏈接(又稱符號鏈接,即 soft link 或 symbolic link)。

在 Linux 中,元數據中的 inode 號(inode 號即索引節點號)才是文件的唯一標識而非文件名,文件內容要通過inode 號來尋找,就像交通指示牌一樣,指示著數據找尋的方向。

軟鏈接可以理解成快捷方式,和原文件的inode號不一樣。它和windows下的快捷方式的作用是一樣的,軟鏈接數據塊中記錄的亦是相對路徑指向。

硬鏈接和原文件對應一個inode,就是對應一個文件,可以理解成一個文件有幾個別名.

下面這張圖表明了他們之間的區別了。

這二張圖詳細的給出這二個文件的異同處。

1,軟鏈接可以理解成快捷方式,也清楚知道原文件在哪兒。它和windows下的快捷方式的作用是一樣的,和windows一樣,刪除源文件,快捷方式也用不了。

2,硬鏈接可以說做了一個備份,但並沒有增加空間,因為文件就一個,這種可以防止源文件刪除後不能使用的問題,但也有局限性,不能對目錄和跨文件系統使用。

相信通過上面的說明,你已經明白了二者之間的區別和用途了。

閱讀全文

與linux元數據相關的資料

熱點內容
伺服器如何配置host 瀏覽:997
守望執行命令 瀏覽:369
加密狗插上去了怎麼辦 瀏覽:624
錘子m1怎麼把文件夾重置 瀏覽:213
APP的數據會存在哪裡 瀏覽:66
一支輕快又解壓的舞 瀏覽:588
80x86編程手冊 瀏覽:767
android機制使用 瀏覽:363
國外太空探索網站源碼 瀏覽:645
dotaimba命令大全 瀏覽:15
手解剖pdf 瀏覽:735
單片機無法燒寫程序 瀏覽:413
pline命令 瀏覽:113
760貼片機編程視頻 瀏覽:335
歐姆龍plc編程第36講 瀏覽:917
我的世界如何將一個伺服器弄崩 瀏覽:10
php網站訪問量代碼 瀏覽:433
怠速壓縮機咔咔響 瀏覽:178
怎麼才能修改APP中的數據 瀏覽:690
哪裡有搶單的app 瀏覽:464