文件存在却报错: no such file or directory ,记录下调试过程

178 天前
 xuelang

前段时间遇见了一个奇怪的问题,在执行二进制文件 protoc 的时候,报错 no such file or directory: ./protoc 。文件明明就在那里,可是一直报这个错,莫不是系统有 bug 了?

这里的二进制文件真实存在,检查权限也是对的,偏偏执行报错。第一次遇见这种问题,一时间都没有啥排查思路,这看起来就是根本不会发生的事。

大家可以先猜猜可能有哪些原因,以及如何验证?


在有 ChatGPT 之前,遇见解决不了的问题,就先去搜索引擎看看,搜索 no such file or directory but file exist ,有不少结果。这里第一个结果 No such file or directory? But the file exists! 比较匹配我的问题,在问题的高赞回答中,上来就给出了结论:可能是因为在不支持 32 位环境的 64 位机器中运行一个 32 位的二进制。具体到我的这个二进制文件,确实是从一个老的机器上拷到 64 位机器执行的。

不过为啥这样就报错?怎么知道是这个原因的? ChatGPT 在排查问题中究竟能发挥多大的作用?

完整内容在文章 ChatGPT 协助分析诡异的 no such file 问题

3115 次点击
所在节点    程序员
28 条回复
kkk9
178 天前
看见 GPT 直接关掉。😓
lisxour
178 天前
linux 下,如果确认文件存在,基本都是位数导致的,linux 下这个提示很脑瘫。
guanzhangzhang
178 天前
file 下它,还有 ldd 它看看
alittlehj
178 天前
文件是不是你代码创建的?如果是 有没有可能是并发问题,多个线程访问同一个文件?上一个线程刚删除了 下一个线程又来读了。
xuelang
178 天前
@lisxour 这个提示确实很迷惑,不过也是因为底层 execve 返回的错误就这样,说的是找不到 ELF 链接器 文件
xuelang
178 天前
@guanzhangzhang 起始这个问题,应该是 strace 看调用,才能排查到。。
xuelang
178 天前
@alittlehj 哈哈,是我的错,没说清,这里查到原因了的,在博客有写的。
xuelang
178 天前
@kkk9 怕不是对 ChatGPT 有啥误解吧,建议你多用用
whoisnian
178 天前
之前在 chroot 下跑 golang 程序也遇到了相同问题
https://whoisnian.com/2023/10/17/%E5%9C%A8-chroot-jail-%E4%B8%AD%E8%BF%90%E8%A1%8CGolang%E7%A8%8B%E5%BA%8F/

man 2 execve

If the executable is a dynamically linked ELF executable, the interpreter named in the PT_INTERP segment is used to load the needed shared objects.
This interpreter is typically /lib/ld-linux.so.2 for binaries linked with glibc (see ld-linux.so(8)).

ENOENT The file pathname or a script or ELF interpreter does not exist.
xuelang
178 天前
@whoisnian 对,完全一样的问题,第一次遇见比较懵
kkk9
178 天前
@xuelang #8 谢谢建议,不用。
listenerri
178 天前
前段时间遇到过这个问题,仔细分析了下,是跟 linux 动态链接器有关,关于动态链接器我博客里翻译了一篇挺好的文章:

https://listenerri.com/2023/10/08/ld-so-linux-%E5%8A%A8%E6%80%81%E8%BF%9E%E6%8E%A5%E5%99%A8%E6%98%AF%E4%BB%80%E4%B9%88/

我觉得 linux 报的找不到文件这个错误,并不是指找不到要执行的二进制文件,而是找不到二进制文件依赖的动态链接器 ld...so 文件
julyclyde
178 天前
@xuelang 我看了 @kkk9 的言论和你的博客,我觉得他说的对
xuelang
178 天前
@julyclyde 嗯,希望有一天你不会觉得自己曾经错了
xuelang
178 天前
@listenerri 对,看了你的文章,讲的不错啊。
xuelang
178 天前
@kkk9 那就让时间来让你回心转意
julyclyde
178 天前
@xuelang 那不至于
贵 GPT 并没有提供超出搜索引擎额外的信息量
选 GPT 而不选搜索引擎,其实只是你为了满足自己“用上新鲜玩意”的虚荣心罢了
对最终结果没什么影响
rrfeng
178 天前
说白了是 ENOENT 翻译成错误信息的时候不完善。
xuelang
178 天前
@julyclyde 说真的,我真不屑于在这跟你辩论这个。
xuelang
178 天前
@rrfeng 嗯嗯,是的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/991345

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX