在Ubuntu上运行二进制文件的麻烦

时间:2016-06-11 18:55:30

标签: ubuntu terminal binaryfiles

我只是想运行一个二进制文件,但是当我尝试使用我的终端时,它表现得很奇怪,我无法弄清楚问题是什么。

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

1 个答案:

答案 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位应用程序从一个版本稍微改变到下一个版本。您可能会发现这些有用: