AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 49852
Accepted
Amandasaurus
Amandasaurus
Asked: 2009-08-05 08:21:14 +0800 CST2009-08-05 08:21:14 +0800 CST 2009-08-05 08:21:14 +0800 CST

Bash 无法启动存在且具有所有正确权限的程序

  • 772

这是一个gentoo服务器。有一个程序prog无法执行。(是的,设置了执行权限)

关于文件

$ ls
prog
$ ./prog
bash: ./prog: No such file or directory
$ file prog
prog: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5, dynamically linked (uses shared libs), not stripped
$ pwd
/usr/local/bin
$ /usr/local/bin/prog
bash: /usr/local/bin/prog: No such file or directory
$ less prog | head
ELF Header:
Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
Class:                             ELF32
Data:                              2's complement, little endian
Version:                           1 (current)
OS/ABI:                            UNIX - System V
ABI Version:                       0
Type:                              EXEC (Executable file)
Machine:                           Intel 80386
Version:                           0x1

我有一个少花哨的,以表明它是一个实际的可执行文件,这里有一些更多的数据:

$ xxd prog |head
0000000: 7f45 4c46 0101 0100 0000 0000 0000 0000  .ELF............
0000010: 0200 0300 0100 0000 c092 0408 3400 0000  ............4...
0000020: 0401 0a00 0000 0000 3400 2000 0700 2800  ........4. ...(.
0000030: 2600 2300 0600 0000 3400 0000 3480 0408  &.#.....4...4...
0000040: 3480 0408 e000 0000 e000 0000 0500 0000  4...............
0000050: 0400 0000 0300 0000 1401 0000 1481 0408  ................
0000060: 1481 0408 1300 0000 1300 0000 0400 0000  ................
0000070: 0100 0000 0100 0000 0000 0000 0080 0408  ................
0000080: 0080 0408 21f1 0500 21f1 0500 0500 0000  ....!...!.......
0000090: 0010 0000 0100 0000 40f1 0500 4081 0a08  ........@...@...

和

$ ls -l prog
-rwxrwxr-x 1 1000 devs 725706 Aug  6  2007 prog

$ ldd prog
      not a dynamic executable

$ strace ./prog
1249403877.639076 execve("./prog", ["./prog"], [/* 27 vars */]) = -1 ENOENT (No such file or directory)
1249403877.640645 dup(2)                = 3
1249403877.640875 fcntl(3, F_GETFL)     = 0x8002 (flags O_RDWR|O_LARGEFILE)
1249403877.641143 fstat(3, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
1249403877.641484 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b3b8954a000
1249403877.641747 lseek(3, 0, SEEK_CUR) = -1 ESPIPE (Illegal seek)
1249403877.642045 write(3, "strace: exec: No such file or dir"..., 40strace: exec: No such file or directory
) = 40
1249403877.642324 close(3)              = 0
1249403877.642531 munmap(0x2b3b8954a000, 4096) = 0
1249403877.642735 exit_group(1)         = ?

关于服务器

FTR 服务器是一个 xen domU,程序是一个闭源的 linux 应用程序。此 VM 是另一个具有相同根文件系统(包括此程序)的 VM 的副本,可以正常工作。

我已经尝试了以上所有作为 root 和同样的问题。

我有没有提到根文件系统是通过 NFS 安装的。但是它挂载了'defaults,nosuid',其中应该包括执行。我还可以从该安装的驱动器运行许多其他程序

/proc/cpu信息:

processor   : 0
vendor_id   : GenuineIntel
cpu family  : 15
model       : 4
model name  :                   Intel(R) Xeon(TM) CPU 3.00GHz
stepping    : 1
cpu MHz     : 2992.692
cache size  : 1024 KB
fpu     : yes
fpu_exception   : yes
cpuid level : 5
wp      : yes
flags       : fpu tsc msr pae mce cx8 apic mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm constant_tsc pni monitor ds_cpl cid cx16 xtpr
bogmips : 5989.55
clflush size    : 64
cache_alignment : 128
address sizes   : 36 bits physical, 48 bits virtual
power management:

我可以运行的文件示例

我可以在该服务器上安装的文件系统上运行其他程序。例如:

$ ls -l ls
-rwxr-xr-x 1 root root 105576 Jul 25 17:14 ls
$ file ls
ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), stripped
$ ./ls
attr        cat    cut        echo        getfacl   ln    more       
... (you get the idea) ...
rmdir       sort       tty
$ less ls | head
ELF Header:
  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF64
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           Advanced Micro Devices X86-64
  Version:                           0x1
linux bash architecture gentoo executable
  • 8 8 个回答
  • 4825 Views

8 个回答

  • Voted
  1. Best Answer
    Toby Stafford
    2009-08-05T08:36:53+08:002009-08-05T08:36:53+08:00

    您的lm标志/proc/cpuinfo表明您的服务器具有 64 位 CPU。

    来自的信息file prog表明该程序是为 32 位架构编译的。尝试安装 32 个库。我不熟悉如何在 Gentoo 中执行此操作,但也许这篇Gentoo wiki 文章可以提供帮助。

    我在尝试在 64 位安装的 Ubuntu 上运行 Android 调试桥时遇到了一个类似的问题(bash 报告找不到文件),因为它是为 32 位编译的。

    • 10
  2. James Sneeringer
    2009-08-05T08:32:15+08:002009-08-05T08:32:15+08:00

    尝试以下操作:

    ldd /usr/local/bin/prog
    

    或者在下面运行它strace:

    strace /usr/local/bin/prog
    

    我猜该程序链接到一个共享库,该库要么丢失,要么编译为错误的架构。鉴于它是封闭源代码,任何一种都是可能的。

    • 3
  3. Coops
    2009-08-05T11:55:11+08:002009-08-05T11:55:11+08:00

    在文件系统挂载上设置 exec 标志怎么样?

    mount -o remount,exec server:/path /mntpoint
    

    如果没有为文件系统设置 exec 标志,则不能从该文件系统运行任何可执行文件。

    • 2
  4. nik
    2009-08-05T08:40:11+08:002009-08-05T08:40:11+08:00

    你能得到结果吗,

    • which prog
    • cat /proc/cpuinfo- 我假设你有/proc

    小指针,

    1. 您能否成功运行其他也显示 32 位的可执行文件?
      • 你能在挂载点上运行其他一些可执行文件
        吗(你可以在服务器机器上复制一个,应该在复制后出现在挂载上)
    • 1
  5. atk
    2009-08-05T11:29:16+08:002009-08-05T11:29:16+08:00

    该文件可能并未真正命名为“prog”。Unix 允许您在文件名中使用任何字符,包括退格、空格等。例如,文件可以命名为“p^Hprog”,而您看到的只是“prog”。既然你有 bash,你可以利用自动完成功能:

    > ls ./[TAB] # where [TAB] means you hit the tab key

    如果这匹配任何东西,你可以

    > mv ./[TAB]

    如果您正在编写代码,您可能希望列出目录中的所有文件并显示文件名中每个字符的十六进制值。

    • 1
  6. w00t
    2009-08-05T11:51:29+08:002009-08-05T11:51:29+08:00
    $ less prog | head
    ELF Header:
    Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
    Class:                             ELF32
    Data:                              2's complement, little endian
    Version:                           1 (current)
    

    这很可疑(除非你有高级LESSPIPE)......你能做到吗

    ls -l prog
    

    (尺寸)

    xxd prog | head
    

    (实际内容)

    另外,尝试将其重命名为 myprog 然后运行 ​​./myprog

    • 1
  7. Kristofor Varhus
    2011-06-17T10:31:05+08:002011-06-17T10:31:05+08:00

    是的,我意识到这个问题已经存在两年了。但这里有一个可能的答案:

    execve() 在找不到 ELF 解释器时返回 ENOENT。就我而言,我需要来自 /lib/ld_lsb.so.3 -> ld_linux.so.2 的符号链接。这是 ELF 解释器的 Linux Standard Base 指定位置。您的发行版中可能有一个提供此符号链接的软件包,可能命名为“lsb”。

    • 1
  8. MarkHu
    2012-06-16T17:52:52+08:002012-06-16T17:52:52+08:00

    我发现这个花絮隐藏在 PDF 中:

    要安装 32 位运行时支持,请执行以下命令:

    • $ sudo apt-get 更新
    • $ sudo apt-get 安装 ia32-libs

    请注意,这会安装超过 200 个软件包,并且需要几分钟才能完成。

    这样做允许我在 64 位 Linux 下运行:ldd工作,以及,例如,NVIDIAnvflash二进制文件......

    • 0

相关问题

  • 多操作系统环境的首选电子邮件客户端

  • 你最喜欢的 Linux 发行版是什么?[关闭]

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve