it-swarm.com.de

"Keine solche Datei oder Verzeichnis", aber es existiert

Ich möchte einfach eine ausführbare Datei von der Befehlszeile aus ausführen, ./arm-mingw32ce-g++

Ich verwende Ubuntu Linux 10.10. ls -l

Die Verwendung von Sudo (Sudo ./arm-mingw32ce-g++

Ich habe keine Ahnung, warum das Betriebssystem die Datei nicht einmal sehen kann, wenn sie da ist. Irgendwelche Gedanken?

66
Warpspace

Dieser Fehler kann bedeuten, dass ./arm-mingw32ce-g++ nicht existiert (aber es existiert) oder dass er existiert und eine dynamisch verknüpfte ausführbare Datei ist, die vom Kernel erkannt wird, deren dynamischer Loader jedoch nicht verfügbar ist. Sie können den erforderlichen dynamischen Lader anzeigen, indem Sie ldd /arm-mingw32ce-g++ ausführen. Alles, was mit not found markiert ist, ist der dynamische Lader oder eine Bibliothek, die Sie installieren müssen.

Wenn Sie versuchen, eine 32-Bit-Binärdatei in einer AMD64-Installation auszuführen:

  • Installieren Sie bis Ubuntu 11.04 das Paket ia32-libs .
  • Installieren Sie unter Ubuntu 11.10 ia32-libs-multiarch .
  • Ab 12.04 installieren Sie ia32-libs-multiarch oder wählen Sie einen sinnvollen Satz von :i386-Paketen zusätzlich zu den :AMD64-Paketen.
63
Gilles

Dieser Fehler trat auf, als ich versuchte, eine Selenium-Quelle auf Ubuntu zu erstellen. Das einfache Shell-Skript mit korrektem Shebang konnte nicht ausgeführt werden, auch nachdem ich alle Voraussetzungen erfüllt hatte.

file file-name # helped me in understanding that CRLF ending were present in the file.

Ich habe die Datei in Vim geöffnet und konnte sehen, dass diese Datei auf einem Windows-Computer einmal bearbeitet wurde und nur im DOS-Format vorliegt. Ich habe die Datei mit folgendem Befehl in das Unix-Format konvertiert:

dos2unix filename # actually helped me and things were fine.

Ich hoffe, wir sollten aufpassen, wann immer wir Dateien plattformübergreifend bearbeiten, und auch die Dateiformate.

16
stupidnetizen

Dieser Fehler kann auch auftreten, wenn versucht wird, ein Skript auszuführen und Shebang falsch geschrieben ist. Stellen Sie sicher, dass es #!/bin/sh, #!/bin/bash oder den verwendeten Interpreter liest.

14
Zoltán

Ich hatte die gleiche Fehlermeldung, als ich versuchte, ein Python-Skript auszuführen - dies war nicht der beabsichtigte Anwendungsfall von @ Warpspace (siehe andere Kommentare), aber dies war einer der Top-Treffer bei meiner Suche.

In meinem Fall waren es die DOS-Zeilenenden (\r\n anstelle von \n), über die die Shebang-Zeile (#!/usr/bin/env python) stolpern würde. Ein einfacher dos2unix myfile.py hat es behoben.

7
djlauk

Ich habe denselben Fehler für ein einfaches Bash-Skript erhalten, das keine 32/64-Bit-Probleme hatte. Dies ist möglicherweise darauf zurückzuführen, dass das Skript, das Sie ausführen möchten, einen Fehler enthält. Dieser ubuntu Forumsbeitrag weist darauf hin, dass Sie bei normalen Skriptdateien 'sh' voranstellen können und möglicherweise Debug-Ausgaben davon erhalten. z.B.

$ Sudo sh arm-mingw32ce-g++

und sehen, ob Sie eine Ausgabe erhalten.

In meinem Fall bestand das eigentliche Problem darin, dass die Datei, die ich ausführen wollte, im Windows-Format und nicht in Linux war.

3
icc97

Ich habe diesen Fehler “No such file or directory” erhalten, aber er existiert, weil meine Datei in Windows erstellt wurde und ich versuchte, sie auf Ubuntu auszuführen, und die Datei enthielt ungültige 15\r, wo immer eine neue Zeile vorhanden war ..__ Ich habe gerade eine neue Datei erstellt, die unerwünschte Elemente abschneidet Zeug

sleep: invalid time interval ‘15\r’
Try 'sleep --help' for more information.
script.sh: 5: script.sh: /opt/ag/cont: not found
script.sh: 6: script.sh: /opt/ag/cont: not found
[email protected]:/home/abc12/Desktop# vi script.sh 
[email protected]:/home/abc12/Desktop# od -c script.sh 
0000000   #   !   /   u   s   r   /   b   i   n   /   e   n   v       b
0000020   a   s   h  \r  \n   w   g   e   t       h   t   t   p   :   /

0000400   :   4   1   2   0   /  \r  \n
0000410
[email protected]:/home/abc12/Desktop# tr -d \\015 < script.sh > script.sh.fixed
[email protected]:/home/abc12/Desktop# od -c script.sh.fixed 
0000000   #   !   /   u   s   r   /   b   i   n   /   e   n   v       b
0000020   a   s   h  \n   w   g   e   t       h   t   t   p   :   /   /

0000400   /  \n
0000402
[email protected]:/home/abc12/Desktop# sh -x script.sh.fixed 
2
Pan

Wie bereits von anderen erwähnt, liegt dies daran, dass der Loader nicht gefunden werden kann und nicht Ihre ausführbare Datei. Leider ist die Nachricht nicht klar genug.

Sie können das Problem beheben, indem Sie den Loader ändern, den Ihre ausführbare Datei verwendet. Weitere Informationen hierzu finden Sie in der folgenden Frage: Mehrere glibc-Bibliotheken auf einem einzelnen Host

Grundsätzlich müssen Sie herausfinden, welchen Loader Sie verwenden möchten:

$ readelf -l arm-mingw32ce-g++ | grep interpreter
  [Requesting program interpreter: /lib/ld-linux.so.2]

Suchen Sie dann den richtigen Pfad für einen gleichwertigen Loader und ändern Sie die ausführbare Datei so, dass der Loader von dem Pfad verwendet wird, der er tatsächlich ist:

$ ./patchelf --set-interpreter /path/to/newglibc/ld-linux.so.2 arm-mingw32ce-g++

Sie müssen wahrscheinlich auch den Pfad der Includes festlegen. Sie werden wissen, ob Sie es möchten oder nicht, nachdem Sie versuchen, es auszuführen. Sehen Sie alle Details in diesem anderen Thread.

1
msb

Ich hatte das gleiche Problem mit einer Datei, die ich auf meinem Mac erstellt habe. Wenn ich versuche, sie in einer Shell mit ./Dateiname auszuführen, wurde die Fehlermeldung "Datei nicht gefunden" angezeigt falsch mit der Datei.

was ich getan habe:

Öffnen Sie eine SSH-Sitzung zum Server
Katze Dateiname
kopiert die Ausgabe in die Zwischenablage
rm Dateiname 
Dateiname berühren
vi Dateiname
i für den Einfügemodus
Fügen Sie den Inhalt aus der Zwischenablage ein
ESC, um den Einfügemodus zu beenden
: wq!

Das hat bei mir funktioniert.

1
space

Ich hatte gerade dieses Problem in mingw32 bash. Ich hatte node/npm von Program Files (x86)\nodejs ausgeführt und dann in das Verzeichnis disabled verschoben (im Wesentlichen aus dem Pfad entfernt). Ich hatte auch Program Files\nodejs (dh 64bit-Version) im Pfad, aber erst nach der x86-Version. Nach dem Neustart der Bash-Shell konnte die 64-Bit-Version von npm gefunden werden. node hat die ganze Zeit korrekt funktioniert (überprüft mit node -v, der sich geändert hat, als die x86-Version verschoben wurde).

Ich denke, hash -r hätte gearbeitet, anstatt bash neu zu starten: https://unix.stackexchange.com/a/5610

0
Pasi Savolainen

Der folgende Befehl funktionierte auf Ubuntu 16.4 

Dieses Problem tritt auf, wenn Ihre .sh-Datei beschädigt oder nicht nach Unix-Protokollen formatiert ist.

dos2unix konvertiert die .sh-Datei in das Unix-Format!

Sudo apt-get install dos2unix -y
dos2unix test.sh
Sudo chmod u+x test.sh 
Sudo ./test.sh
0
Coral