Find

如何在 Linux 中有效地跟踪硬連結?

  • September 9, 2020

軟連結很容易通過readlinketc 追踪到原始文件……但我很難追踪到原始文件的硬連結。

$ ll -i /usr/bin/bash /bin/bash  
1310813 -rwxr-xr-x 1 root root 1183448 Jun 18 21:14 /bin/bash*  
1310813 -rwxr-xr-x 1 root root 1183448 Jun 18 21:14 /usr/bin/bash*
                  ^

上面是預期的 - 很酷 - > 兩個文件都指向同一個 inode 1310813

(但連結數,用 表示^,顯示為 1。從 Gilles 回答可以理解原因)

$ find / -samefile /bin/bash 2>/dev/null
/usr/bin/bash

以上是預期的 - 所以沒有問題。

$ find / -samefile /usr/bin/bash 2>/dev/null
/usr/bin/bash  

上面酷。如何使用該文件作為參考來跟踪原始文件或每個硬連結?/usr/bin/bash

奇怪 - 下面也沒有幫助。

$ find / -inum 1310813 2>/dev/null
/usr/bin/bash

一是硬連結的情況下沒有原始文件;所有的硬連結都是平等的。

但是,這裡不涉及硬連結,如 1ls -l的輸出中的連結計數所示:

$ ll -i /usr/bin/bash /bin/bash  
1310813 -rwxr-xr-x 1 root root 1183448 Jun 18 21:14 /bin/bash*  
1310813 -rwxr-xr-x 1 root root 1183448 Jun 18 21:14 /usr/bin/bash*

您的問題是由於符號連結而出現的,該bin符號連結指向usr/bin. 要查找所有可用的路徑bash,您需要使用以下選項告訴find遵循符號連結:-L

$ find -L / -xdev -samefile /usr/bin/bash 2>/dev/null
/usr/bin/rbash
/usr/bin/bash
/bin/rbash
/bin/bash

我在-xdev這裡使用是因為我知道您的系統安裝在單個文件系統上;這避免了下降到/dev, /proc,/run/sys

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