Shell-Script
確定文件是硬連結還是符號連結?
我正在創建一個 shell 腳本,它將獲取文件的文件名/路徑並確定該文件是符號連結還是硬連結。
唯一的問題是,我不知道如何查看它們是否是硬連結。我創建了 2 個文件,一個是硬連結,一個是符號連結,用作測試文件。但是如何確定文件是 shell 腳本中的硬連結還是符號文件?
另外,如何找到符號連結的目標分區?假設我有一個連結到不同分區的文件,我將如何找到該原始文件的路徑?
Jim 的回答解釋瞭如何測試符號連結:通過使用
test
’s-L
test.但是,嚴格來說,測試“硬連結”並不是您想要的。硬連結之所以起作用,是因為 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。請注意,與任何其他文件一樣,符號連結也可以連結到多個目錄,因此您可以將多個硬連結指向一個符號連結。