find找到文件结果无法访问或者文件不存在

你提到:

ls: 无法访问 /usr/lib64/mysql/libmysqlclient.so.20*: 没有那个文件或目录
但是之前用 find 又找到了这两个文件:

/usr/lib64/mysql/libmysqlclient.so.20
/usr/lib64/mysql/libmysqlclient.so.20.3.31

这看起来矛盾,但其实这是由于 路径和当前 shell 环境中通配符行为的差异 导致的。


✅ 正确理解这个问题

🔍 1. find 成功找到文件说明它们确实存在

find / -name 'libmysqlclient.so.20' 2>/dev/null

输出:

/usr/lib64/mysql/libmysqlclient.so.20

这说明系统中确实存在这个文件路径。


🤔 2. 为什么 ls 报错?

你执行的是:

ls -l /usr/lib64/mysql/libmysqlclient.so.20*

报错:

ls: 无法访问 /usr/lib64/mysql/libmysqlclient.so.20*: 没有那个文件或目录

但这并不意味着文件不存在。这是因为 Bash 在执行命令前先进行了通配符扩展(globbing)

💡 Bash 的 globbing 行为:

  • 当你写 /usr/lib64/mysql/libmysqlclient.so.20* 时,Bash 会尝试在 当前目录下匹配该模式
  • 如果 /usr/lib64/mysql/ 下没有匹配 libmysqlclient.so.20* 的文件,Bash 就不会替换它,而是把原始字符串传给 ls
  • 然后 ls 去查找这个“带星号”的路径,当然失败了

✅ 如何验证这一点?

你可以使用引号来避免 Bash 提前展开通配符:

ls -l "/usr/lib64/mysql/libmysqlclient.so.20*"

或者直接列出具体文件名:

ls -l /usr/lib64/mysql/libmysqlclient.so.20 /usr/lib64/mysql/libmysqlclient.so.20.3.31

如果这两个文件确实存在,你应该能看到类似输出:

lrwxrwxrwx 1 root root       24 Jun 20 15:00 /usr/lib64/mysql/libmysqlclient.so.20 -> libmysqlclient.so.20.3.31
-rwxr-xr-x 1 root root 10487528 Jun 20 15:00 /usr/lib64/mysql/libmysqlclient.so.20.3.31

✅ 总结

现象 原因 解决方法
find 能找到文件,但 ls 报错 Bash 的 globbing 机制导致通配符未正确展开 使用引号包裹路径,或直接指定完整文件名

✅ 推荐操作

运行以下命令查看文件是否存在及其类型:

ls -l /usr/lib64/mysql/libmysqlclient.so.20
ls -l /usr/lib64/mysql/libmysqlclient.so.20.3.31

如果你仍然看到错误,请贴出完整的输出,我可以帮你进一步判断是软链接、真实库文件还是其他问题 👍

posted @ 2025-06-28 22:28  aidengduff  阅读(278)  评论(0)    收藏  举报