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

浙公网安备 33010602011771号