Linux

如何找出兩個目錄是否指向同一位置

  • June 3, 2015

以下路徑是否指向相同的磁碟位置?

/home/username
/app/home/username

依次將目錄更改為每個目錄並查看pwd -P. 使用該-P標誌,pwd將顯示已解析所有符號連結的物理目前工作目錄。

sd(){       set '' "$1" '' "${2?sd() requires two arguments!}"
           while [ "$#" -gt 2 ]
           do    [  "${1:--L}" "${2:--L}" ${3:+"$4"} ] &&
                 [  "${1:--L}" ${3:+"-L"} "${3:-$4}" ] &&
                 [  "${2:-$3}" -ef "$4"/. ] && return  || ${1:+"return"}
                 set "$@" "$2";shift 2;set ! "$@"
           done  3>/dev/null 2>&"$((${#DBG}?2:3))"
   }

sd()首先檢查它的兩個參數是否都是符號連結,如果是,接下來檢查這兩個參數是否都連結到具有相同 inode 和設備號的目錄。如果是這樣,sd() return那是真的

否則,它會檢查兩者是否都不是符號連結,並且再次檢查兩者是否都是具有相同設備和 inode 編號的目錄。否則,它將返回 false。

所以…

ln -s dir1 ln3; ln -s dir1 ln4; ln -s dir2 ln5

sd dir1 dir2; echo $?
1
sd dir1 ln3;  echo $?
1
sd ln4 ln3;   echo $?
0
sd ln4 ln5;   echo $?
1
mount --bind dir1 dir2
sd dir1 dir2; echo $?
0

最好不要進行連結檢查——例如,如果您想知道連結的目標是否與某個目錄相同,或者根本不關心它是否是連結。在這種情況下,您只需要一個[ fname1 -ef fname2 ]測試。

哦,我想我還應該提到,這假定所有參數的搜尋權限。如果呼叫使用者沒有執行測試所需的權限,它將失敗。

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