檢測所有存在的指向 /tmp 的連結嗎?

檢測所有存在的指向 /tmp 的連結嗎?

/tmp我想找出Ubuntu 上存在哪些文件連結指向我的資料夾。

背景:
我遇到了一個問題,我的/tmp資料夾權限被意外更改為 755。

也許有一個連結到/tmp某個地方和命令

chmod 755 . -Rf 

在該資料夾中呼叫正在影響主/tmp資料夾。

我不得不用以下方法修復它:

chmod 777 /tmp
chmod +t /tmp
sudo chown root:root /tmp

我只有一個檔案系統,所以應該不會有問題。

答案1

嘗試這個:

find / -path /proc -prune -o \( -lname '*/tmp' -o -lname '*/tmp/' \) -exec ls -l {} \;

範例輸出:

# find / -path /proc -prune -o -lname '*/tmp' -exec ls -l {} \;
lrwxrwxrwx. 1 sergey sergey 4 Sep 22 11:27 /home/sergey/xxx/tmp -> /tmp
lrwxrwxrwx. 1 root root 10 Jun 20 10:28 /usr/tmp -> ../var/tmp
find: `/run/user/sergey/gvfs': Permission denied

答案2

據我所知,沒有簡單的方法來列出指向 inode 的所有符號連結。因此我建議使用標準尋找實用程式與-L-同一個文件開關:

  • -同一個文件將根據目標檔案的索引節點進行比較,
  • -L將在搜尋中包含您要尋找的符號連結。

以下是 /bin 中 /bin/dash 的範例:

$ find -L  /bin -samefile /bin/dash -exec ls -lhi {} \;
786515 lrwxrwxrwx 1 root root 4 Mar 29  2012 /bin/sh -> dash
786436 -rwxr-xr-x 1 root root 108K Mar 29  2012 /bin/dash

從這個輸出中,您可以看到/bin/sh 的索引節點號(第一列)和箭頭(最後一個)位於到/bin/dash 的符號連結中。如果它們是硬鏈接,則不同檔案的 inode 編號將相同,並且最後一列中不會有箭頭。

最後,如果我需要在整個文件系統上查找這些鏈接,我會排除一些目錄,例如/dev,/行程/系統從搜尋中。這將透過-小路-修剪開關(您可以添加任意數量的開關)-o切換意義或者),2>/dev/空這裡是為了掩蓋潛在的錯誤:

$ sudo find -L  / \( -path /dev -o -path /proc -o -path /sys \) -prune -samefile /bin/dash -exec ls -lhi {} \; 2>/dev/null

由於在整個檔案系統中搜尋可能需要花費大量時間(主要取決於其大小),因此我將將此選項視為最後的手段。這就像大海撈針一樣:不是不可能,而是需要付出很大的努力…

答案3

我找到了答案,感謝這個問題:Linux:查找給定「原始」檔案的所有符號連結? (反向「閱讀連結」)

find / -exec ls -ald {} ';' 2>/dev/null | grep '\-> /tmp' |grep -v /proc/

相關內容