find / -xdev 是安全扫描的起点,它跳过所有挂载点(含 /proc /sys 等伪文件系统),避免因 NFS/CIFS 等失效挂载导致阻塞;若遇响应慢的挂载点,需结合 mount 和 -prune 排除;线上应优先限定关键路径而非全盘扫描。

直接用 find / 扫全盘时,如果某个挂载点(比如 NFS、CIFS 或断连的 USB 设备)已失效但未卸载,find 尝试进入该路径会阻塞等待——不是报错退出,而是卡住不动。这不是命令写错了,而是内核级挂起,必须从机制上绕过。
用 -xdev 限制只查本文件系统
这是最简单有效的第一道防线。加 -xdev(等价于 -mount)后,find 遇到任何挂载点边界(如 /mnt/nas、/media/usb、/var/lib/docker)就自动跳过,不递归、不等待、不报错。
-
find / -xdev -name "*.php"—— 安全起点,适用于大多数服务器环境 - 它天然跳过
/proc、/sys、/dev等伪文件系统,因为它们本身就是独立挂载点 - 注意:
-xdev必须放在路径之后、其他条件之前,否则无效
手动排除已知失效或高危挂载路径
有些挂载点虽未断开但响应极慢(如弱网 NFS),-xdev 不起作用(因为它仍是同一文件系统类型)。这时需结合 mount 和 df 主动识别并排除:
- 先查当前挂载:
mount | grep -E '(nfs|cifs|fuse|sshfs)' - 再看哪些实际在用且可能异常:
df -hT | awk '$2 ~ /(nfs|cifs|fuse)/ {print $7}' - 把结果路径加入
-prune:例如发现/mnt/backup响应慢,就写成find / \( -path '/mnt/backup' -prune \) -o -name "*.php"
配合超时与非阻塞访问(进阶)
对极个别顽固挂载点(如卡死的 debugfs 或异常 FUSE),可辅以系统级控制:
- 临时降低 NFS 超时:挂载时加
timeo=5,soft,nolock(需重新 mount) - 避免触发阻塞节点:不加
-depth,默认先处理目录元数据而非内容;慎用-ls或-exec stat,它们会强制读取 inode - 若已卡住,用
strace -p $(pgrep -f "find.*php")查最后卡在哪个openat路径,针对性-prune
更稳妥的做法:别扫全盘,改查关键路径
线上环境极少需要真“全盘”扫描。绝大多数目标集中在有限路径:
- Web 文件:
find /var/www /srv/www /home/*/public_html -name "*.php" - 临时区:
find /tmp /var/tmp -type f -name "*.php" - 用户主目录:
find /home -maxdepth 3 -name "*.php" - 所有操作都默认带
-xdev,再加2>/dev/null屏蔽权限提示

















