Linux
如何找出兩個目錄是否指向同一位置
以下路徑是否指向相同的磁碟位置?
/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 ]
測試。哦,我想我還應該提到,這假定所有參數的搜尋權限。如果呼叫使用者沒有執行測試所需的權限,它將失敗。