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

Hod*_*rrr 3 linux 64bit executable

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

sudo ./home/amnesia/myfile
Run Code Online (Sandbox Code Playgroud)

我收到“命令未找到”?

我尝试使用或不使用 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
Run Code Online (Sandbox Code Playgroud)

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

$ 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
Run Code Online (Sandbox Code Playgroud)

有关我的系统的信息:

$ 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
Run Code Online (Sandbox Code Playgroud)

Gil*_*il' 6

$ /home/amnesia/myfile\nbash: /home/amnesia/myfile: No such file or directory\n$ file /home/amnesia/myfile\nELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared lies), for GNU/Linux 2.6.9, not stripped\n
Run Code Online (Sandbox Code Playgroud)\n\n

所以myfile存在,但运行它会给出消息 \xe2\x80\x9cNo such file or directory\xe2\x80\x9d。在以下情况下会发生这种情况:

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

消息 \xe2\x80\x9cNo such file or directory\xe2\x80\x9d 实际上与加载程序有关,但 shell 不知道涉及加载程序,因此它报告原始文件的名称。我在\xe2\x80\x9cNo such file or directory\xe2\x80\x9d isn't such file or directory\xe2\x80\x9d中更详细地解释了这一点 Optware 安装的二进制文件。

\n\n

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

\n\n
$ uname -a\nLinux amnesia 3.16-3-amd64 #1 SMP Debian 3.16.5-1 (2014-10-10) x86_64 GNU/Linux\n$ file /bin/ls\n/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\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

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

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

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

\n