Bash:没有这样的文件或目录?

时间:2016-01-28 20:57:09

标签: linux bash binary webserver wkhtmltopdf

我尝试在Linux共享网络服务器(Debian,64位)上使用可执行脚本(wkhtmltopdf)。我很确定我编译的所有内容都是正确的,但每当我想执行文件时,我都会得到一个回复​​:

> ./wkhtmltopdf -H
-bash: ./wkhtmltopdf: No such file or directory

为了确保文件存在,这里是ls输出:

> ls
wkhtmltoimage  wkhtmltopdf

此外,我测试了文件命令,输出以下内容:

> file wkhtmltopdf
wkhtmltopdf: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped

我现在的问题是:

为什么bash告诉我没有'文件或目录',当显然有一个?

我的第一个猜测是共享服务器不允许执行二进制文件?但是,它不应该是权限问题,具有不同的bash输出吗?

编辑:

> id 
uid=2725674(p8907906) gid=600(ftpusers) groups=600(ftpusers)

> ls -l wkhtmltopdf
-rwxrwxrwx 1 p8907906 ftpusers 39745960 Jan 20 09:33 wkhtmltopdf

> ls -ld
drwx---r-x 2 p8907906 ftpusers 44 Jan 28 21:02 .

2 个答案:

答案 0 :(得分:5)

我打赌你错过动态链接器。做一个

readelf --all ./wkhtmltopdf | grep interpreter

你应该得到这样的输出:

[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]

您的系统很可能缺少解释器(示例中为/lib64/ld-linux-x86-64.so.2)。在这种情况下,bash会大喊No such file or directory,就像二进制文件本身缺失一样。

您可以尝试使用不同的链接器。有时你可以成功。做一个:

/path/to/the/linker /path/to/your/executable

此命令:

find /lib* -name ld-linux\*

将帮助您找到系统上的链接器。或者您可以在 运行的某个命令上执行readelf命令。它将向您显示正确的,有效的链接器。

OR ,因为您正在运行Debian系统,只需执行

sudo apt-get install wkhtmltopdf

安装该工具的原生版本:)

答案 1 :(得分:0)

就我而言

$ readelf --all ./wkhtmltopdf | grep interpreter
      [Requesting program interpreter: /lib/ld-linux.so.2]

在可执行文件正在运行的计算机上:

$ ls -lah /lib/ld-linux.so.2
lrwxrwxrwx 1 root root 25 Apr 16  2018 /lib/ld-linux.so.2 -> i386-linux-gnu/ld-2.27.so
$ dpkg -S /lib/ld-linux.so.2  # -S, --search filename-search-pattern: Search for a filename from installed packages.
libc6:i386: /lib/ld-linux.so.2

所以要解决此问题(reference

sudo dpkg --add-architecture i386
sudo apt update
sudo apt install libc6:i386  # GNU C Library: Shared libraries (from apt show)