文件存在却报错: no such file or directory ,记录下调试过程 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
xuelang
V2EX    程序员

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

  •  
  •   xuelang
    selfboot 2023-11-13 10:01:38 +08:00 3896 次点击
    这是一个创建于 721 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前段时间遇见了一个奇怪的问题,在执行二进制文件 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 问题

    28 条回复    2023-11-14 15:33:42 +08:00
    kkk9
        1
    kkk9  
       2023-11-13 10:28:18 +08:00   6
    看见 GPT 直接关掉。
    lisxour
        2
    lisxour  
       2023-11-13 10:33:31 +08:00
    linux 下,如果确认文件存在,基本都是位数导致的,linux 下这个提示很脑瘫。
    guanzhangzhang
        3
    guanzhangzhang  
       2023-11-13 11:06:57 +08:00
    file 下它,还有 ldd 它看看
    alittlehj
        4
    alittlehj  
       2023-11-13 11:32:02 +08:00
    文件是不是你代码创建的?如果是 有没有可能是并发问题,多个线程访问同一个文件?上一个线程刚删除了 下一个线程又来读了。
    xuelang
        5
    xuelang  
    OP
       2023-11-13 11:40:33 +08:00
    @lisxour 这个提示确实很迷惑,不过也是因为底层 execve 返回的错误就这样,说的是找不到 ELF 链接器 文件
    xuelang
        6
    xuelang  
    OP
       2023-11-13 11:40:55 +08:00
    @guanzhangzhang 起始这个问题,应该是 strace 看调用,才能排查到。。
    xuelang
        7
    xuelang  
    OP
       2023-11-13 11:41:28 +08:00
    @alittlehj 哈哈,是我的错,没说清,这里查到原因了的,在博客有写的。
    xuelang
        8
    xuelang  
    OP
       2023-11-13 11:42:10 +08:00
    @kkk9 怕不是对 ChatGPT 有啥误解吧,建议你多用用
    whoisnian
        9
    whoisnian  
       2023-11-13 12:13:11 +08:00 via Android   1
    之前在 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
        10
    xuelang  
    OP
       2023-11-13 12:47:49 +08:00
    @whoisnian 对,完全一样的问题,第一次遇见比较懵
    kkk9
        11
    kkk9  
       2023-11-13 12:49:05 +08:00
    @xuelang #8 谢谢建议,不用。
    listenerri
        12
    listenerri  
       2023-11-13 13:52:39 +08:00   2
    前段时间遇到过这个问题,仔细分析了下,是跟 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
        13
    julyclyde  
       2023-11-13 14:03:14 +08:00
    @xuelang 我看了 @kkk9 的言论和你的博客,我觉得他说的对
    xuelang
        14
    xuelang  
    OP
       2023-11-13 14:10:54 +08:00
    @julyclyde 嗯,希望有一天你不会觉得自己曾经错了
    xuelang
        15
    xuelang  
    OP
       2023-11-13 14:12:09 +08:00
    @listenerri 对,看了你的文章,讲的不错啊。
    xuelang
        16
    xuelang  
    OP
       2023-11-13 14:12:32 +08:00
    @kkk9 那就让时间来让你回心转意
    julyclyde
        17
    julyclyde  
       2023-11-13 14:30:32 +08:00   4
    @xuelang 那不至于
    贵 GPT 并没有提供超出搜索引擎额外的信息量
    选 GPT 而不选搜索引擎,其实只是你为了满足自己“用上新鲜玩意”的虚荣心罢了
    对最终结果没什么影响
    rrfeng
        18
    rrfeng  
       2023-11-13 14:36:01 +08:00
    说白了是 ENOENT 翻译成错误信息的时候不完善。
    xuelang
        19
    xuelang  
    OP
       2023-11-13 14:58:04 +08:00
    @julyclyde 说真的,我真不屑于在这跟你辩论这个。
    xuelang
        20
    xuelang  
    OP
       2023-11-13 14:58:16 +08:00
    @rrfeng 嗯嗯,是的
    sherlockwhite
        21
    sherlockwhite  
       2023-11-13 15:49:10 +08:00
    @julyclyde #17 虚荣心。。真无语,多用用吧
    proxytoworld
        22
    proxytoworld  
       2023-11-13 15:55:29 +08:00
    @julyclyde
    贵 GPT 并没有提供超出搜索引擎额外的信息量

    GPT 确实没有添加额外的知识量,但可以减小我检索知识的成本...
    matepi
        23
    matepi  
       2023-11-13 16:28:34 +08:00
    我曾经碰到过类似的报错
    明明可执行文件存在,权限也正确,但在高级语言环境里面调用执行的时候就报
    cannot execute binary file
    一搜,都是说什么 32 位、64 位问题

    最后看了一堆,突然扫到别人写的/bin/sh -c ,才突然意识到自己错哪里了
    为了在非交互式 shell 里面加环境,都加了/bin/sh 等去加载环境、和长命令行处理
    然后错就错在/bin/sh -c 写成了/bin/sh -C (受 windows 兼容性 cmd /C ,一不注意写到 linux 的分支里也写了大写的-C )
    xuelang
        24
    xuelang  
    OP
       2023-11-13 17:16:49 +08:00
    @matepi 你这个确实更加隐蔽,不好排查。
    wangybsyuct
        25
    wangybsyuct  
       2023-11-13 17:30:41 +08:00
    根据你和网友的反馈,我是这样认为的。提示 no such file or directory: ./protoc ,你是使用什么工具执行去执行这个 protoc 的,自己的 shell ,或者 crontab ,或者是服务程序,或者是 webserver 里的一个点击,等等,这个很关键,因为你是使用了相对路径点撇./,这样执行一个程序是很省事,但是有隐患的,你使用了相对路径,相对谁呢?你在 shell 里,当然是相对于当前你运行的那个窗口的 shell ,其它的执行环境就不一定了。你在你当前 shell 窗口下执行正确(排除 32 位和 64 位和链接库的问题),那就看可能是执行环境的问题了
    julyclyde
        26
    julyclyde  
       2023-11-13 18:04:57 +08:00   2
    @proxytoworld 只给出一个答案,但不一定是正确那个。你看 GPT 的话就断绝了获得更全面知识的可能性了,虽然省了时间
    xuelang
        27
    xuelang  
    OP
       2023-11-13 19:11:00 +08:00
    @julyclyde 谁说 GPT 只给一个答案了? 另外,用 GPT 学习效率比搜索引擎快很多,获得知识也更全面的
    kkk9
        28
    kkk9  
       2023-11-14 15:33:42 +08:00
    看了下后来的评论,没什么好争论的,我在 #1 发表的只是我个人意见。我回复的时候并没有点开链接,不过心里大概猜到了。点开看看,果然和猜测的一样,只不过是尬吹 GPT 在解决问题中的“所谓优势”。

    我个人看来,GPT 就和英汉字典一样的,有的人一辈子都离不开它,有的人学习阶段使用,后来就再也不用了。取决于什么人,也取决于怎么用。

    既然在 GPT 中提问要提炼问题,整理需求,引导它给出自己需要的答案,在没有 GPT 的时代里,你也是这样和搜索引擎对话的,搜索不理想,换个问法。那显然你并不比 GPT 蠢,你还要去验证方案,甚至可能还要和它掰扯(指正?)某些显而易见的错误。

    所以,在排查问题中发挥最大作用的就是你本人,你的大脑。用 GPT 并没有减少搜索成本,也没有增加自己的学习效率,甚至损失了在广阔知识中浏览时了解到其他知识的机会。

    > OP 原文:自从有了 ChatGPT ,平时遇到问题,第一反应都是拿来问 ChatGPT 。

    真正促进学习的仍然是人类自己,不要让自己的大脑萎缩了。如果有一天你的环境里没有 GPT 了,你还能保持学习吗?就像这个时代还剩下多少人坚持写字练字了?拿起笔手抖啊抖的?

    很多事情是方便了,可有些真正的本质也就丢了。

    提高自己的能力,推荐一本书籍 How To Ask Questions The Smart Way

    https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     6001 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 36ms UTC 02:18 PVG 10:18 LAX 18:18 JFK 21:18
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86