Ubuntu系统find命令无法检索到已存在的docker.sock文件问题咨询
问题原因
/var/run是符号链接,find默认不跟随软链接遍历
Ubuntu 20.04默认将/var/run设置为指向/run的软链接,执行ls -ld /var/run可验证,输出类似:
lrwxrwxrwx 1 root root 4 Oct 18 20:00 /var/run -> /run
GNU find的默认行为是-P选项生效,遍历过程中遇到符号链接时,仅把链接本身作为文件处理,不会进入链接指向的目标目录扫描内容。你执行find /var/run时,find仅检查了/var/run这个软链接本身的文件名是否匹配docker.sock,自然不会返回/run目录下的匹配结果。
你直接执行ls /var/run/docker.sock时,shell会自动解析/var/run这个软链接指向的/run路径,所以能正常显示目标文件的属性,和find的默认遍历逻辑完全不同。
2. 同名目录干扰匹配
从你给出的ls输出可以看到/var/run/march/docker.sock是目录,而/run/docker.sock是实际的docker套接字文件,find默认不加类型过滤的情况下会匹配所有类型的文件,你搜索/run时返回的两个结果里,/run/march/docker.sock是目录,/run/docker.sock才是真正的docker服务套接字。
解决方法
- 方法1:给find添加
-L参数,强制跟随符号链接遍历-L参数会让find在遍历过程中跟随所有遇到的符号链接进入目标目录扫描,命令如下:
sudo find -L /var/run -name docker.sock sudo find -L /var -name docker.sock
注意:使用-L参数时要注意避免符号链接循环导致的无限遍历。
- 方法2:直接搜索实际目录
/run
既然docker相关的运行时文件都存放在/run目录下,直接搜索/run路径即可,这也是最推荐的方式,避免不必要的软链接跟随操作。 - 方法3:添加类型过滤,只匹配套接字文件
如果你要排除同名目录的干扰,只找docker的套接字文件,可以添加-type s参数:
# 直接搜索实际路径 sudo find /run -type s -name docker.sock # 跟随软链接搜索/var/run sudo find -L /var/run -type s -name docker.sock
内容的提问来源于stack exchange,提问作者Gavin Hunter21
相关产品推荐
相关产品推荐

