Linux

即使文件存在並且在 PATH 中,Linux 執行檔也會失敗並顯示“找不到文件”

  • April 15, 2020

我想啟動wine執行檔(2.12 版),但出現以下錯誤($=shell 提示):

$ wine
bash: /usr/bin/wine: No such file or directory
$ /usr/bin/wine
bash: /usr/bin/wine: No such file or directory
$ cd /usr/bin
$ ./wine
bash: ./wine: No such file or directory

但是,該文件在那裡:

$ which wine
/usr/bin/wine

執行檔肯定存在並且沒有死符號連結:

$ stat /usr/bin/wine
 File: /usr/bin/wine
 Size: 9712            Blocks: 24         IO Block: 4096   regular file
Device: 802h/2050d      Inode: 415789      Links: 1
Access: (0755/-rwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2017-07-13 13:53:00.000000000 +0200
Modify: 2017-07-08 03:42:45.000000000 +0200
Change: 2017-07-13 13:53:00.817346043 +0200
Birth: -

它是一個 32 位 ELF:

$ file /usr/bin/wine
/usr/bin/wine: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), 
dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, 
BuildID[sha1]=eaf6de433d8196e746c95d352e0258fe2b65ae24, stripped

我可以獲得執行檔的動態部分:

$ readelf -d /usr/bin/wine
Dynamic section at offset 0x1efc contains 27 entries:
 Tag        Type                         Name/Value
0x00000001 (NEEDED)                     Shared library: [libwine.so.1]
0x00000001 (NEEDED)                     Shared library: [libpthread.so.0]
0x00000001 (NEEDED)                     Shared library: [libc.so.6]
0x0000001d (RUNPATH)                    Library runpath: [$ORIGIN/../lib32]
0x0000000c (INIT)                       0x7c000854
0x0000000d (FINI)                       0x7c000e54
[more addresses without file names]

但是,我無法使用以下命令列出共享對象依賴項ldd

$ ldd /usr/bin/wine
/usr/bin/ldd: line 117: /usr/bin/wine: No such file or directory

strace顯示:

execve("/usr/bin/wine", ["wine"], 0x7fff20dc8730 /* 66 vars */) = -1 ENOENT (No such file or directory)
fstat(2, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 4), ...}) = 0
write(2, "strace: exec: No such file or di"..., 40strace: exec: No such file or directory
) = 40
getpid()                                = 23783
exit_group(1)                           = ?
+++ exited with 1 +++

編輯以添加@jww的建議:問題似乎發生在請求動態連結庫之前,因為沒有ld生成調試消息:

$ LD_DEBUG=all wine
bash: /usr/bin/wine: No such file or directory

即使只列印 的可能值LD_DEBUG,也會發生錯誤

$ LD_DEBUG=help wine
bash: /usr/bin/wine: No such file or directory

編輯添加@Raman Sailopal的建議:問題似乎出在執行檔中,因為將內容複製/usr/bin/wine到另一個已創建的文件會產生相同的錯誤

root:bin # cp cat testcmd    

root:bin # testcmd --help
Usage: testcmd [OPTION]... [FILE]...
Concatenate FILE(s) to standard output.
[rest of cat help page]

root:bin # dd if=wine of=testcmd  
18+1 records in
18+1 records out
9712 bytes (9.7 kB, 9.5 KiB) copied, 0.000404061 s, 24.0 MB/s

root:bin # testcmd
bash: /usr/bin/testcmd: No such file or directory

有什麼問題或者我可以做些什麼來找出失去的文件或目錄?


uname -a:

Linux laptop 4.11.3-1-ARCH #1 SMP PREEMPT Sun May 28 10:40:17 CEST 2017 x86_64 GNU/Linux

這:

$ file /usr/bin/wine
/usr/bin/wine: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), 
dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, 
BuildID[sha1]=eaf6de433d8196e746c95d352e0258fe2b65ae24, stripped

結合這個:

$ ldd /usr/bin/wine
/usr/bin/ldd: line 117: /usr/bin/wine: No such file or directory

強烈建議系統沒有/lib/ld-linux.so.2ELF解釋器。也就是說,這個 64 位系統沒有安裝任何 32 位兼容庫。因此,@user1334609 的回答基本上是正確的。

引用自:https://unix.stackexchange.com/questions/378301