我只是想运行一个二进制文件,但是当我尝试使用我的终端时,它表现得很奇怪,我无法弄清楚问题是什么。
rohan@rohan:~$ cd Desktop/
rohan@rohan:~/Desktop$ ls
chal challenge __MACOSX
rohan@rohan:~/Desktop$ cd challenge
rohan@rohan:~/Desktop/challenge$ ls
binary1 binary2 binary3
rohan@rohan:~/Desktop/challenge$ ./binary1
bash: ./binary1: Permission denied
rohan@rohan:~/Desktop/challenge$ sudo ./binary1
[sudo] password for rohan:
sudo: ./binary1: command not found
rohan@rohan:~/Desktop/challenge$
我也试过给它权限但它仍然无法执行它。任何帮助,将不胜感激。谢谢。
此外,这些是文件的详细信息,我的系统是64位,ubuntu 16.04LTS,我需要获取什么以及如何运行此文件。
file /home/rohan/Desktop/challenge/binary1
type EXEC (Executable file)
pic false
has_va true
root elf
class ELF32
lang c
arch x86
bits 32
machine Intel 80386
os linux
subsys linux
endian little
strip false
static false
linenum true
lsyms true
relocs true
rpath NONE
答案 0 :(得分:0)
您可以从shell脚本中获取该行为,该脚本的第一行表示运行在该路径中找不到的程序:
#!/bin/nosuchprogram
echo xx
另外,如果脚本碰巧有回车符/换行符结尾,则结果相同。
如果它是"二进制"在文件中,您可以先使用file
实用程序来说明它可能是什么:
file binary3
如果它恰好是可能在当前系统上运行的类型,请查看ldd
,以查找缺少的库:
ldd binary3
同样,如果您的Ubuntu系统是64位计算机,则可能没有库来支持32位应用程序。作为快速检查(如果您不知道您的系统是什么),arch
程序会告诉您默认架构是什么。一些较旧的系统不具备此功能,但file
再次成为您的朋友:
$ file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, BuildID[sha1]=0x55f1e005df252708d4c456dcc2c7dccea1006553, stripped
(在Ubuntu上可以同时拥有32位和64位库,但大多数都是其中之一)。
如何使64位Ubuntu上运行的32位应用程序从一个版本稍微改变到下一个版本。您可能会发现这些有用: