當前位置: 首頁> 最新文章列表> 怎麼用lstat() 獲取文件的inode 號?一文看懂inode 的作用與意義

怎麼用lstat() 獲取文件的inode 號?一文看懂inode 的作用與意義

M66 2025-06-22

在Linux 或類Unix 系統中,每個文件都有一個唯一的標識符,稱為。它不僅標識文件的位置,還存儲文件的元信息,如權限、所有者、文件大小以及文件的創建和修改時間。理解inode 對於深入理解文件系統非常重要,尤其是在處理硬鏈接、文件權限和存儲結構時。

本文將通過PHP 中的lstat()函數,演示如何獲取文件的inode 號,並結合實例講解inode 的作用與意義。


什麼是inode?

簡單來說,inode 是文件在文件系統中的“身份證”,它包含:

  • 文件類型(普通文件、目錄、符號鏈接等)

  • 文件權限

  • 擁有者和所屬用戶組

  • 文件大小

  • 創建、修改和訪問時間

  • 鏈接數(硬鏈接數)

  • 數據塊指針(文件數據實際存儲位置)

文件名本身不在inode 中,文件名存儲在目錄項中,通過inode 與文件內容關聯。


為什麼要獲取inode?

  • 硬鏈接:多個不同的文件名可以指向同一個inode,實現文件的“別名”。

  • 判斷文件是否相同:兩個路徑如果inode 相同,說明指向同一個文件。

  • 文件系統調試與維護:管理員和程序員可以通過inode 判斷文件狀態,進行優化和修復。


PHP 中的lstat() 函數介紹

lstat()是PHP 的內置函數,用來獲取文件或符號鏈接的詳細信息,包括inode 號。與stat()不同, lstat()不會跟隨符號鏈接,而是獲取符號鏈接本身的信息。

lstat()返回一個數組,包含文件的各種屬性,其中'ino'就是inode 號。


代碼示例:用lstat() 獲取文件的inode 號

<?php
// 指定要獲取信息的文件路徑
$file = '/path/to/your/file.txt';

// 使用 lstat 獲取文件信息
$fileInfo = lstat($file);

if ($fileInfo === false) {
    echo "无法獲取文件信息";
} else {
    // 獲取 inode 號
    $inode = $fileInfo['ino'];
    echo "文件 {$file} 的 inode 號是: {$inode}\n";
}
?>

注意:如果你要通過URL 獲取遠程文件信息,PHP 的lstat()無法直接操作遠程文件,只能處理本地文件路徑。


結合實際:檢測兩個文件是否是硬鏈接

假設有兩個文件路徑,我們想判斷它們是否指向同一個inode,即是否是硬鏈接。

 <?php
$file1 = '/path/to/file1.txt';
$file2 = '/path/to/file2.txt';

$info1 = lstat($file1);
$info2 = lstat($file2);

if ($info1 && $info2) {
    if ($info1['ino'] === $info2['ino']) {
        echo "文件 {$file1} 和 {$file2} 是硬鏈接,inode 號相同: {$info1['ino']}\n";
    } else {
        echo "文件 {$file1} 和 {$file2} 不是硬鏈接,inode 號不同\n";
    }
} else {
    echo "无法獲取文件信息\n";
}
?>

總結

  • inode 是文件系統的重要概念,是文件的唯一標識。

  • PHP 的lstat()函數可以輕鬆獲取文件的inode 號及其它詳細信息。

  • inode 號可以用於判斷硬鏈接、文件身份驗證等場景。

  • 理解inode 有助於更深入掌握文件系統結構和文件管理。