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

182

我只想从命令行运行一个可执行文件,./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

我不知道为什么操作系统看不到已经存在的文件。有什么想法吗?

22个回答

2

我曾经遇到过一个问题,我在自己的 Mac 上创建了一个文件,但是在终端中运行 ./filename 时出现了文件未找到的错误消息。我认为该文件可能存在问题。

我的解决方案:

打开与服务器的 SSH 会话
cat filename
将输出内容复制到剪贴板
rm filename
touch filename
vi filename
进入插入模式 i
从剪切板粘贴内容
按 ESC 键退出插入模式
:wq!

这对我起了作用。


看一下之前的答案,你遇到了Windows风格的问题。如果你在文件上运行dos2unix.exe,你会得到相同的结果:-)。 - soninob

2
在一个 .sh 脚本中,每一行必须以单个字符 - 换行符(LF 或 "\n")结尾。
不要像我一样犯错误,因为我选择的文本编辑器是 Win 中的 Notepad++。 Win 的默认行尾是 "\r\n" (CR LF),这种行尾对于 Linux shell 脚本来说不是标准的。

1
我曾遇到这个问题,原因是一些编辑器(如Notepad++)中存在EOL。您可以在“编辑”菜单/ EOL转换中检查。应选择Unix(LF)。 希望这对您有用。

在这种情况下,这不太可能是问题,因为该命令未从文件中执行。 - RalfFriedl

1
对于那些在运行Java程序时遇到此错误的人,可能是您正在尝试在32位Linux操作系统上运行64位Java程序。当我在64位Java上运行ldd时才意识到这一点,它报告如下:ldd /usr/java/jdk1.8.0_05/bin/java。而旧的32位Java则报告了合理的结果:ldd /usr/java/jdk1.8.0_05/bin/java。

1
我在mingw32 bash中遇到了这个问题。我从Program Files(x86)\nodejs中执行了node/npm,然后将它们移动到disabled目录中(从路径中删除)。我也将Program Files\nodejs(即64位版本)添加到了路径中,但是在x86版本之后。重新启动bash shell后,可以找到64位版本的npm。node一直正常工作(使用node -v检查时,当x86版本被移动时,版本号发生了变化)。
我认为,与其重新启动bash,使用bash -r可能会起作用:https://unix.stackexchange.com/a/5610

1

尝试运行 terraform/terragrunt(单个 Go 二进制文件)时遇到了此错误。

使用 which terragrunt 查找可执行文件所在位置,在本地目录或使用完整路径运行时出现奇怪的错误。

bash: ./terragrunt: No such file or directory

问题在于有两个terragrunt安装,使用brew uninstall terragrunt删除其中一个后问题得以解决。删除之后,which terragrunt显示新路径为/usr/bin/terragrunt,一切工作正常。

0

另一个可能的原因是:该文件是动态链接到 musl 的二进制文件(很可能是为 Alpine 准备的)

在 Debian 系统上,您需要安装

apt-get update -y && apt-get install -y musl musl-dev musl-tools

0

对于未来的读者,我在尝试使用gunicorn启动Django服务器时遇到了这个问题。我使用AWS CodeBuild构建虚拟环境并运行测试,使用CodeDeploy将构建的工件放置到生产服务器上并启动新版本(所有环境都是Ubuntu 20.04)。我错误地认为env/bin/...包含本地库的实际二进制文件,但事实并非如此。它只是带有构建机器上Python解释器路径的shebang的Python脚本。在我的情况下,安装软件包和实际运行软件包的机器是不同的。更具体地说,env/bin中的所有文件都有shebang #!/codebuild/output/src715682316/src/env/bin/python,因此在生产服务器上运行env/bin/gunicorn当然会失败。晦涩的错误消息是Ubuntu告诉我env/bin/gunicorn不存在,而不是说/codebuild/output/src715682316/src/env/bin/python不存在。我通过使用python3 env/bin/gunicorn而不是env/bin/gunicorn来启动gunicorn来解决了这个问题。


0
在我的情况下,事实证明该文件是一个符号链接:
$ cat deluge-gtk.lock
cat: deluge-gtk.lock: No such file or directory
$ file deluge-gtk.lock
deluge-gtk.lock: broken symbolic link to 32309

类似这样的误导性错误在Linux上非常常见。相关讨论:https://lwn.net/Articles/532771/


0

尝试更改在终端/命令提示符中未显示的文件或文件夹的名称。

步骤1:更改文件或文件夹的名称。 步骤2:cd 文件名/文件夹名


这个问题已经有15个现有的答案,包括一个被接受的回答,获得了100个赞。你确定你的答案还没有被提供吗?如果没有,为什么有人会更喜欢你的方法而不是现有的方法呢?你是否利用了新的能力?是否存在适合你的方法的情况? - Jeremy Caney
目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接