Die Shell meldet ein mehrdeutiges " Keine solche Datei oder Verzeichnis " für eine ausführbare Datei, wenn die Shell keine Abhängigkeit für diese ausführbare Datei findet.
Die fehlende Abhängigkeit ist normalerweise eine erforderliche gemeinsam genutzte Bibliothek oder ein dynamischer Lader.
Verwenden Sie den Befehl strace, um explizit den open () -Syscall anzuzeigen, der während der Ausführungsanforderung fehlschlägt (z strace /usr/local/phantomjs/bin/phantomjs
. B. ).
Nachtrag
execve("/usr/local/phantomjs/bin/phantomjs", ["/usr/local/phantomjs/bin/phantom"...], [/* 13 vars */]) = -1 ENOENT (No such file or directory)
Evecve syscall hat den Fehlercode ENOENT zurückgegeben, der in der Manpage als " Dateiname oder Skript oder ELF-Interpreter nicht vorhanden ist oder eine gemeinsam genutzte Bibliothek für Datei oder Interpreter nicht gefunden werden konnte."
Normalerweise habe ich gesehen, dass strace eine bessere Auflösung der fehlenden Datei bietet.
Der nächste Schritt besteht darin, die ausführbare Datei auf ihre Abhängigkeiten zu untersuchen.
Mit dem Befehl strings können Sie den dynamischen Linker / Loader, die gemeinsam genutzten Bibliotheken und Einstiegspunkte extrahieren, die am Anfang der ausführbaren Datei aufgeführt sind.
strings /usr/local/phantomjs/bin/phantomjs | less
Für jeden Dateinamen, den Sie in dieser Liste angeben können, müssen Sie überprüfen, ob die Datei in Ihrem Root-Dateisystem installiert ist.
$ file modetest modetest: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 3.10.0, stripped $ strings modetest | less /lib/ld-linux-armhf.so.3 <= libdrm.so.2 <= drmModeFreeObjectProperties drmModeFreePlaneResources _ITM_deregisterTMCloneTable ... libpthread.so.0 <= pthread_join pthread_create __errno_location ... libc.so.6 <= strcpy exit mmap64 ...
Von Ihrem vorherigen Update2 wäre die erste Datei /lib64/ld-linux-x86-64.so.2 .