省流版
问题
Linux目录下明明有可执行文件却提示找不到,“No such file or directory”
我做了如下努力:
- ls显示;(能够成功显示)
- 修改文件名;(能够正常复制、修改、移动,并且被复制的仍然不能运行)
- 调整文件属性,弄成
777
; - cat显示文件。(能够成功显示)
- root执行文件;(找不到文件)
- 直接输入
repeat
;(显示无该命令) - 切换到其他的目录下,再用相对路径执行
repeat
;(找不到文件) - 绝对路径执行
repeat
;(找不到文件) - exec执行:
exec ./repeat
;(找不到文件) - 换个别的终端执行:
/bin/sh ./repeat
;(报错) - 换了一个机子,能正常运行(说明并不是文件本身的问题)。
都是玄学办法,没有起到作用。
解决
检查文件的头部:readelf -h repeat
;
原来,这是32位的程序,在64位的Ubuntu中运行需要提前安装32位的库。
首先添加i32架构,然后更新镜像源,再安装就可以了,指令如下:
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 -y
sudo apt install lib32z1 -y
然后就可以了!就可以运行了!!!
详细解释版
Linux环境下可执行文件无法运行:“No such file or directory”问题的排查与解决
一、问题描述
在Linux系统中,有时会遇到明明目录下存在可执行文件,但尝试执行时却提示“No such file or directory”的错误。本文将详细阐述如何排查和解决这一问题。
二、问题排查
当遇到上述问题时,我进行了以下排查步骤:
-
使用ls命令查看文件:确保文件确实存在于指定目录下,并且能够正常显示。
-
修改文件名:尝试修改文件名,并检查是否能够正常复制、修改、移动。然而,复制后的文件仍然无法运行。
-
调整文件属性:将文件属性设置为777,赋予所有用户读、写、执行权限。
-
使用cat命令查看文件内容:确保文件内容完整无误。
-
使用root用户执行文件:尝试以root用户身份执行文件,但仍然提示找不到文件。
-
直接输入文件名执行:直接输入文件名执行,显示无该命令。
-
切换目录执行:切换到其他目录,使用相对路径执行文件,仍然提示找不到文件。
-
使用绝对路径执行:使用文件的绝对路径执行,仍然提示找不到文件。
-
使用exec命令执行:尝试使用exec命令执行文件,结果仍然是无法找到文件。
-
换终端执行:换到其他终端执行文件,仍然报错。
-
换机器测试:将文件复制到另一台机器上测试,发现能够正常运行,说明问题并非出在文件本身。
三、问题解决
经过上述排查步骤,初步排除了文件损坏、权限不足、路径错误等原因。此时,我考虑到可能是文件架构与系统架构不匹配的问题。于是,我检查了文件的头部信息:
readelf -h repeat
通过检查发现,该文件是一个32位的程序,而我当前的系统是64位的Ubuntu。因此,在64位系统上运行32位程序需要安装相应的32位库。
解决步骤如下:
- 添加i386架构支持:
sudo dpkg --add-architecture i386
- 更新软件包列表:
sudo apt-get update
- 安装必要的32位库:
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 -y
sudo apt install lib32z1 -y
安装完成后,再次尝试执行文件,问题得到解决,文件可以正常运行。
四、总结
在Linux系统中,当遇到可执行文件无法运行并提示“No such file or directory”的错误时,除了检查文件是否存在、权限是否正确、路径是否正确等常见问题外,还需要注意文件的架构是否与系统架构匹配。如果文件是32位的,而系统是64位的,则需要安装相应的32位库才能正常运行。
本账号所有文章均为原创,欢迎转载,请注明文章出处:https://blog.csdn.net/qq_46106285/article/details/124946919。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。