Shell-Script

確定文件是硬連結還是符號連結?

  • March 17, 2021

我正在創建一個 shell 腳本,它將獲取文件的文件名/路徑並確定該文件是符號連結還是硬連結。

唯一的問題是,我不知道如何查看它們是否是硬連結。我創建了 2 個文件,一個是硬連結,一個是符號連結,用作測試文件。但是如何確定文件是 shell 腳本中的硬連結還是符號文件?

另外,如何找到符號連結的目標分區?假設我有一個連結到不同分區的文件,我將如何找到該原始文件的路徑?

Jim 的回答解釋瞭如何測試符號連結:通過使用test’s -Ltest.

但是,嚴格來說,測試“硬連結”並不是您想要的。硬連結之所以起作用,是因為 Unix 處理文件的方式:每個文件都由一個 inode 表示。然後單個 inode 有零個或多個名稱目錄條目,或者從技術上講,有硬連結(你稱之為“文件”)。

值得慶幸的是,該stat命令(如果可用)可以告訴您一個 inode 有多少個名稱。

所以你正在尋找這樣的東西(這裡假設 GNU 或 busybox 實現stat):

if [ "$(stat -c %h -- "$file")" -gt 1 ]; then
   echo "File has more than one name."
fi

-c '%h'位告訴stat只輸出到 inode 的硬連結數,即文件具有的名稱數。-gt 1然後檢查是否大於 1。

請注意,與任何其他文件一樣,符號連結也可以連結到多個目錄,因此您可以將多個硬連結指向一個符號連結。

引用自:https://unix.stackexchange.com/questions/167610