![检测所有指向 /tmp 的链接?](https://linux22.com/image/1330557/%E6%A3%80%E6%B5%8B%E6%89%80%E6%9C%89%E6%8C%87%E5%90%91%20%2Ftmp%20%E7%9A%84%E9%93%BE%E6%8E%A5%EF%BC%9F.png)
我想找出哪些文件链接指向我/tmp
在 Ubuntu 上的文件夹。
背景:
我遇到了一个问题,我的/tmp
文件夹权限被意外更改为 755。系统无法再以 root 以外的用户身份正常运行。
也许有一个链接到/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和-相同文件开关:
- -相同文件将根据目标文件的 inode 进行比较,
- -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
从此输出中,您可以看到 inode 编号(第一列)和箭头(最后一列),/bin/sh 是指向 /bin/dash 的符号链接。如果它们是硬链接,则不同文件的 inode 编号将相同,最后一列中将没有箭头。
最后,如果我需要在整个文件系统中查找这些链接,我会排除一些目录,例如/dev,/进程和/系统从搜索中。这将通过-小路和-修剪swicthes(你可以添加任意数量的-o切换含义或者),2> /dev/null 复制代码是为了掩盖潜在的错误:
$ sudo find -L / \( -path /dev -o -path /proc -o -path /sys \) -prune -samefile /bin/dash -exec ls -lhi {} \; 2>/dev/null
由于搜索整个文件系统会花费大量时间(主要取决于文件系统的大小),因此我将把此选项视为最后的手段。这就像大海捞针:并非不可能,但需要付出很多努力……
答案3
感谢这个问题,我找到了答案:Linux:查找给定“原始”文件的所有符号链接?(反向“readlink”)
find / -exec ls -ald {} ';' 2>/dev/null | grep '\-> /tmp' |grep -v /proc/