bash - 没有这样的文件或目录 : Cannot execute but is visible to ls, file and tab-completion

标签 bash ubuntu amazon-lightsail

我正在亚马逊 lightsail 实例上安装 flexnet。我刚刚将内容提取到 /opt 并尝试运行任何 lm* 命令。使用 ls 我可以看到我拥有所有权和执行权限。我可以对文件夹的任何内容运行 file,它会告诉我它是什么。

但是当我尝试执行任何操作时,bash 会提示没有这样的文件或目录。示例:

jabozzo@ICUC_services:/opt/flexnet/bin$ ls -all
total 4684
drwxr-xr-x 2 jabozzo jabozzo    4096 Nov  8  2016 .
drwxr-xr-x 6 jabozzo jabozzo    4096 Dec 19 15:46 ..
lrwxrwxrwx 1 jabozzo jabozzo       6 Dec 14  2016 lmcksum -> lmutil
lrwxrwxrwx 1 jabozzo jabozzo       6 Dec 14  2016 lmdown -> lmutil
-rwxr-xr-x 1 jabozzo jabozzo 1551536 Nov  8  2016 lmgrd
lrwxrwxrwx 1 jabozzo jabozzo       6 Dec 14  2016 lmhostid -> lmutil
lrwxrwxrwx 1 jabozzo jabozzo       6 Dec 14  2016 lmnewlog -> lmutil
lrwxrwxrwx 1 jabozzo jabozzo       6 Dec 14  2016 lmpath -> lmutil
lrwxrwxrwx 1 jabozzo jabozzo       6 Dec 14  2016 lmremove -> lmutil
lrwxrwxrwx 1 jabozzo jabozzo       6 Dec 14  2016 lmreread -> lmutil
lrwxrwxrwx 1 jabozzo jabozzo       6 Dec 14  2016 lmstat -> lmutil
lrwxrwxrwx 1 jabozzo jabozzo       6 Dec 14  2016 lmswitchr -> lmutil
-rwxr-xr-x 1 jabozzo jabozzo 1362736 Nov  8  2016 lmutil
lrwxrwxrwx 1 jabozzo jabozzo       6 Dec 14  2016 lmver -> lmutil
-rwxr-xr-x 1 jabozzo jabozzo 1701200 Nov  8  2016 mgcld
-rwxr-xr-x 1 jabozzo jabozzo   49088 Nov  8  2016 mgls_admin
-rwxr-xr-x 1 jabozzo jabozzo    1593 Nov  8  2016 mgls_child_ver
-rwxr-xr-x 1 jabozzo jabozzo  112736 Nov  8  2016 mgls_ok
jabozzo@ICUC_services:/opt/flexnet/bin$ file lmutil 
lmutil: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-lsb-x86-64.so.3, for GNU/Linux 2.6.9, stripped
jabozzo@ICUC_services:/opt/flexnet/bin$ ./lmutil
-bash: ./lmutil: No such file or directory
jabozzo@ICUC_services:/opt/flexnet/bin$ /opt/flexnet/bin/lmutil 
-bash: /opt/flexnet/bin/lmutil: No such file or directory

在示例中,如果我键入 ./lmu 并按 Tab 键完成,它将完成为 ./lmutils。使用绝对路径也无济于事。我还检查了是否存在所需的共享库:

jabozzo@ICUC_services:/opt/flexnet/bin$ ldd lmutil 
    linux-vdso.so.1 =>  (0x00007ffe09bb1000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f7e75ab4000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f7e757ab000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f7e75595000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7e751cb000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f7e74fc7000)
    /lib64/ld-lsb-x86-64.so.3 => /lib64/ld-linux-x86-64.so.2 (0x00007f7e75cd1000)

最佳答案

如果您尝试运行可执行文件并收到“没有这样的文件或目录”错误,这通常意味着可执行文件无法找到正确的动态加载程序。如果您查看 file 命令的输出,您会看到:

...interpreter /lib64/ld-lsb-x86-64.so.3...

你的系统有/lib64/ld-lsb-x86-64.so.3吗?如果不是,则表明这些二进制文件是为不同的体系结构(例如,64 位与 32 位)或不同版本的 C 库 (glibc) 构建的。

解决方案包括:

  • 安装包含必要解释器的包。

  • 找到一组已针对您系统上安装的 C 库版本编译的可执行文件。

  • 在安装了适当 C 库的 Docker 容器或 chroot 环境中运行。

一个 hacky 解决方案是使用 patchelf命令更改嵌入在二进制文件中的解释器路径。根据您的环境,这可能有效,也可能导致一切崩溃。

此外,仅从 .so.2.so.3 的符号链接(symbolic link)可能有效。

关于bash - 没有这样的文件或目录 : Cannot execute but is visible to ls, file and tab-completion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48175694/

相关文章:

amazon-web-services - 如何更改我的 LightSail 实例使用的 key 对?

amazon-web-services - 为使用 Elastic Beanstalk 和 LightSail 的子域配置 SSL

linux - Gitlab rake 备份时间戳到别的东西

bash - JQ 问题与对 Json 文件的评论

python - 使用 sudo 在 Python 3.6 中导入错误?

ruby - 'pathutil' ruby​​ gem 是否与 jekyll (v3.9.0) 和 ruby​​ (v3.0.0) 兼容?

linux - 从 bash 输出中排除一个字符串

linux - Bash 循环脚本运行良好,但在使用源代码运行时会出现语法错误

为 ubuntu 使用 oracle 自解压安装程序时 Java 不可见

php - 是否可以在 Amazon lightsail 实例上运行 cron 作业?