“没有这样的文件或目录”但它存在

我只是想从命令行运行一个可执行文件, ./arm-mingw32ce-g++ ,但随后我收到错误消息,

bash: ./arm-mingw32ce-g++: No such file or directory

我正在运行 Ubuntu Linux 10.10。 ls -l 列表

-rwxr-xr-x 1 root root  433308 2010-10-16 21:32 arm-mingw32ce-g++

使用 sudo ( sudo ./arm-mingw32ce-g++ ) 给出

sudo: unable to execute ./arm-mingw32ce-g++: No such file or directory

我不知道为什么操作系统甚至看不到文件。有什么想法吗?

stack overflow "No such file or directory" but it exists
原文答案

接受的答案

此错误可能意味着 ./arm-mingw32ce-g++ 不存在(但确实存在),或者它存在并且是内核识别的动态链接可执行文件,但其动态加载程序不可用。您可以通过运行 ldd /arm-mingw32ce-g++ ; 来查看需要哪些动态加载程序;任何标记为 not found 的东西都是您需要安装的动态加载器或库。

如果您尝试在 amd64 安装上运行 32 位二进制文​​件:


答案:

作者头像

当我尝试在 Ubuntu 上构建 Selenium 源代码时,我遇到了这个错误。即使在我涵盖了所有先决条件之后,具有正确 shebang 的简单 shell 脚本也无法运行。

file file-name # helped me in understanding that CRLF ending were present in the file.

我在 Vim 中打开了这个文件,我可以看到,因为我曾经在 Windows 机器上编辑过这个文件,它是 DOS 格式的。我使用以下命令将文件转换为 Unix 格式:

dos2unix filename # actually helped me and things were fine.

我希望我们在跨平台编辑文件时要小心,我们也应该注意文件格式。

作者头像

如果尝试运行脚本并且 shebang 拼写错误,也可能会发生此错误。确保它读取 #!/bin/sh#!/bin/bash 或您正在使用的任何解释器。

作者头像

在尝试运行 Python 脚本时,我收到了同样的错误消息——这不是 @Warpspace 的预期用例(请参阅其他评论),但这是我搜索的热门搜索之一,所以也许有人会发现它很有用。

在我的情况下,shebang 行( rn )会绊倒 DOS 行结尾( n 而不是 #!/usr/bin/env python )。一个简单的 dos2unix myfile.py 修复了它。

作者头像

我找到了我的 Ubuntu 18 here 的解决方案。

sudo dpkg --add-architecture i386

然后:

sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
作者头像

对于一个没有 32/64 位问题的简单 bash 脚本,我遇到了同样的错误。这可能是因为您尝试运行的脚本中有错误。这个 ubuntu forum post 表示对于普通脚本文件,您可以在前面添加 sh 并且您可能会从中获得一些调试输出。例如

$ sudo sh arm-mingw32ce-g++

看看你是否得到任何输出。

就我而言,实际问题是我试图执行的文件是 Windows 格式而不是 Linux。

作者头像

我收到此错误 “No such file or directory” 但它存在,因为我的文件是在 Windows 中创建的,我尝试在 Ubuntu 上运行它,并且该文件包含无效的 15r ,其中曾经有一个新行。我刚刚创建了一个新文件来截断不需要的东西

sleep: invalid time interval ‘15r’
Try 'sleep --help' for more information.
script.sh: 5: script.sh: /opt/ag/cont: not found
script.sh: 6: script.sh: /opt/ag/cont: not found
root@Ubuntu14:/home/abc12/Desktop# vi script.sh 
root@Ubuntu14:/home/abc12/Desktop# od -c script.sh 
0000000   #   !   /   u   s   r   /   b   i   n   /   e   n   v       b
0000020   a   s   h  r  n   w   g   e   t       h   t   t   p   :   /

0000400   :   4   1   2   0   /  r  n
0000410
root@Ubuntu14:/home/abc12/Desktop# tr -d 015 < script.sh > script.sh.fixed
root@Ubuntu14:/home/abc12/Desktop# od -c script.sh.fixed 
0000000   #   !   /   u   s   r   /   b   i   n   /   e   n   v       b
0000020   a   s   h  n   w   g   e   t       h   t   t   p   :   /   /

0000400   /  n
0000402
root@Ubuntu14:/home/abc12/Desktop# sh -x script.sh.fixed 
作者头像

以下命令适用于 16.4 Ubuntu

当您的 .sh 文件损坏或未按照 unix 协议格式化时,就会出现此问题。

dos2unix 将 .sh 文件转换为 Unix 格式!

sudo apt-get install dos2unix -y
dos2unix test.sh
sudo chmod u+x test.sh 
sudo ./test.sh
作者头像

正如其他人所提到的,这是因为找不到加载程序,而不是您的可执行文件。不幸的是,信息不够清楚。

您可以通过更改可执行文件使用的加载程序来修复它,请参阅我在另一个问题中的完整答案: Multiple glibc libraries on a single host

基本上你必须找到它试图使用的加载器:

$ readelf -l arm-mingw32ce-g++ | grep interpreter
  [Requesting program interpreter: /lib/ld-linux.so.2]

然后找到等效加载器的正确路径,并更改您的可执行文件以使用实际路径中的加载器:

$ ./patchelf --set-interpreter /path/to/newglibc/ld-linux.so.2 arm-mingw32ce-g++

您可能还需要设置包含的路径,在您尝试运行它之后您会知道是否需要它。查看其他线程中的所有详细信息。

作者头像

我在 Mac 上创建的文件也遇到了同样的问题。如果我尝试在带有 ./filename 的 shell 中运行它,我会收到未找到文件的错误消息。我认为文件有问题。

我做了什么:

打开到服务器的 ssh 会话
猫文件名
将输出复制到剪贴板
rm 文件名
触摸文件名
vi 文件名
i 用于插入模式
从剪贴板粘贴内容
ESC 结束插入模式
:wq!

这对我有用。

相关问题