/home/amnesia/myfile:找不到命令 — 64 位可执行文件,64 位内核

/home/amnesia/myfile:找不到命令 — 64 位可执行文件,64 位内核

尝试在终端上运行可执行文件(我使用的是 Tails live OS),但我不断收到错误消息。我已经设置了权限。我写的命令:

sudo ./home/amnesia/myfile

我收到“命令未找到”?

我尝试使用或不使用 sudo 运行它:

$ sudo /home/amnesia/myfile
sudo: unable to execute /home/amnesia/myfile: No such file or directory
$ /home/amnesia/myfile
bash: /home/amnesia/myfile: No such file or directory

有关文件的信息(它是二进制文件,而不是脚本):

$ ls -l /home/amnesia/myfile
-rwxrwxrwx 1 amnesia amnesia 15327 Sep  3  2013 /home/amnesia/myfile
$ file /home/amnesia/myfile
ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared lies), for GNU/Linux 2.6.9, not stripped

有关我的系统的信息:

$ uname -a
Linux amnesia 3.16-3-amd64 #1 SMP Debian 3.16.5-1 (2014-10-10) x86_64 GNU/Linux
$ file /bin/ls
/bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, BuildID[sha1]=0xd3280633faaabf56a14a26693d2f810a32222e51, stripped

答案1

$ /home/amnesia/myfile
bash: /home/amnesia/myfile: No such file or directory
$ file /home/amnesia/myfile
ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared lies), for GNU/Linux 2.6.9, not stripped

确实myfile存在,但运行它时会显示“没有这样的文件或目录”的消息。这种情况发生在以下情况下:

  • 该文件依赖于加载程序 - 它是动态链接的可执行文件,并且需要加载程序来加载动态链接库。 (加载器也可以是由 shebang 行指定的解释器,但 bash 会检测到这种情况并给出不同的错误消息。)
  • 加载程序文件不存在。

“没有这样的文件或目录”消息实际上与加载程序有关,但 shell 不知道涉及加载程序,因此它报告原始文件的名称。我在中更详细地解释了这一点Optware 安装的二进制文件中显示“没有这样的文件或目录”

为什么不能运行这个程序?因为您没有 64 位可执行文件的动态加载程序。

$ uname -a
Linux amnesia 3.16-3-amd64 #1 SMP Debian 3.16.5-1 (2014-10-10) x86_64 GNU/Linux
$ file /bin/ls
/bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, BuildID[sha1]=0xd3280633faaabf56a14a26693d2f810a32222e51, stripped

您的系统具有 64 位内核,但系统的其余部分是 32 位。 Linux支持这种配置(64位内核可以运行64位程序和32位程序,但32位内核只能运行32位程序)。内核可以很好地加载程序;您将能够运行静态链接的 amd64 可执行文件。但是,您没有 64 位加载程序 ( /lib64/ld-linux-x86-64.so.2),也可能没有任何 64 位库。因此您无法运行动态链接的 amd64 可执行文件。

为什么要运行 64 位内核和 32 位用户区?

  • 要使用大约3GB以上的物理内存。 (这不是唯一的方法 - 另一种可能性是运行支持 PAE 的 32 位内核。)
  • 能够运行 64 位二进制文​​件,例如通过在实时操作系统上启动,然后在某处 chroot 到已安装的 64 位系统。
  • 为了减少发行版的维护工作:为最新的硬件提供单个内核,并将其设为 64 位。
  • 运行 64 位虚拟机(某些 VM 引擎需要 64 位内核才能运行 64 位 VM)。

我不认为 Tails 提供 64 位系统。您应该获得 32 位版本的可执行文件。如果不能,请使用其他发行版(可能在虚拟机中)。

答案2

如果你还没有:chmod

chmod u+x /home/amnesia/myfile

并删除“.”从一开始。当您位于文件所在的同一目录中时需要它

sudo /home/amnesia/myfile

这是演示: Demo

答案3

我建议检查以下内容:

  • 跑步file /home/amnesia/myfile。这将确定您尝试执行的文件类型;
  • 运行脚本没有 sudo获得更有意义的信息;
  • 如果它类似于 shell 脚本,aset -x也会帮助您弄清楚发生了什么。您还可以使用sh -x;运行脚本
  • 可能是 Shebang 线断了(例如:糟糕的解释器)。粘贴head -5 /home/amnesia/myfile;的输出
  • 可能是您的脚本中有“DOS”换行符。如果该文件是一个带有 DOS 换行符的脚本,一个简单的dos2unix myfileperl -pi -e 's/\r\n/\n/g' input.file可以解决问题;

答案4

我有同样的问题。在 Debian 7.8 上,修复方法是安装该lsb软件包:

apt-get install lsb

我必须在 CentOS 上安装一个类似的软件包(不记得具体是哪个)。

相关内容