Die Programmdatei befindet sich in / usr / bin, kann aber nicht verwendet werden

15

Offensichtlich existiert meine Datei in /usr/bin

$ ls /usr/bin/ngrok
/usr/bin/ngrok

Wenn ich es jedoch versuche, chownerhalte ich eine Fehlermeldung

$ sudo chown my_user:users /usr/bin/ngrok
chown: cannot dereference '/usr/bin/ngrok': No such file or directory

Weitere Versuche, es auszuführen, schlagen ebenfalls fehl!

$ ngrok
bash: ngrok: command not found
$ sudo /usr/bin/ngrok
sudo: /usr/bin/ngrok: command not found

Was passiert hier?

Jorik
quelle
Der dritte Punkt könnte auch passieren, wenn '/ usr / bin /' nicht in Ihrem PATH enthalten ist. Sie sollten mit getestet haben /usr/bin/ngrok, um eine vollständige Symmetrie des folgenden Falls mit zu erhalten sudo.
Patrick Mevzek

Antworten:

52

/usr/bin/ngrokwird ein Symlink sein, der nirgendwo hinweist (oder eher auf eine nicht existierende Datei). Überprüfen Sie mit ls -l.

Sven
quelle
13
Der Fehler "Kann nicht dereferenziert werden" ist hier das tote Werbegeschenk. Sie "dereferenzieren" keine normale Datei, sondern öffnen sie.
Kevin
1
Oder readlink -f /usr/bin/ngrokum herauszufinden, wohin der Link verweisen soll.
Eric Duminil
odernamei -l /usr/bin/ngrok
Hanshenrik
4

Angesichts des chownFehlers ist die wahrscheinlichste Möglichkeit, dass es sich um einen Symlink handelt, wie von Sven beantwortet . Nur als Referenz für den Fall, dass jemand hier auftaucht und die Datei existiert und keine Verknüpfung darstellt, aber einen Befehl-nicht-gefunden / Datei-nicht-gefunden-Fehler ausgibt, besteht eine weitere Möglichkeit darin, dass die ausführbare Datei dynamisch verknüpft ist und Aus irgendeinem Grund können keine Bibliotheken geladen werden:

  • fehlende Bibliothek (run ldd auf der Binärdatei , um diese zu sehen)
  • Lader fehlt
  • apparmor den Zugriff auf eine Bibliothek oder einen Loader verweigert
  • ...

Wenn für ein Skript der Interpreter im shebang aus ähnlichen Gründen nicht ausgeführt werden konnte, wird derselbe Fehler ausgegeben.

muru
quelle
Noch verwirrender ist, dass dies in der Tat zu einem rätselhaften "Keine solche Datei oder kein solches Verzeichnis" führen kann.
Rackandboneman
0

Sie haben auch die Möglichkeit, den Eigentümer des Symlinks selbst zu ändern

chown -h my_user:users /usr/bin/ngrok

wenn Sie nicht möchten (oder nicht die Erlaubnis haben), den Besitz der Zieldatei zu ändern.

Wiesel5i2
quelle
2
Ich bin nicht sicher, wie dies die Frage beantwortet - die Frage ist "Was passiert hier?" und das Problem ist, dass die Zieldatei nicht existiert. Dies löst das Problem nicht und beantwortet die Frage nicht.
wizzwizz4
1
@ wizzwizz4 Ich nehme an, Sie können die Frage auch so interpretieren, dass die Datei existiert (der Symlink ist eine Datei). Diese Antwort deckt diese Interpretation ab. Sven geht einfach davon aus (wahrscheinlich richtig), dass das OP mit der Zieldatei arbeiten möchte.
JoL
1
@muru Dies gilt nicht für ein Linux-System, das keine Berechtigungen für Symlinks besitzt. Tatsächlich ist Linux eines der wenigen (ist das einzige?) Betriebssysteme der POSIX-Familie, das Symlink-Eigentümer / Gruppe festlegen kann. Siehe die Linux- chown(1)Manpage . Mögliche Gründe, warum Linux dies tut, werden unter unix.stackexchange.com/questions/33180/…
Andrew Henle
2
@ AndrewHenle und wie hilft das? Das Ändern des Eigentümers / der Gruppe für einen Symlink macht hier keinen Unterschied, da die beim Ausführen angewendeten Berechtigungen immer von der Zieldatei stammen. Sie könnten also einen Link im Besitz von wem auch immer haben, aber das Ändern des Besitzes für diesen Link hat absolut keinen Einfluss auf die Berechtigungen, die beim Ausführen berücksichtigt werden.
muru
1
@muru und wie hilft das? Lesen Sie die Frage, die ich bereits verlinkt habe, da sie speziell fragt: "Unter Linux ist es möglich, den Eigentümer oder den Gruppeneigentümer eines symbolischen Links (Symlink) zu ändern. Ich habe mich gefragt, warum jemand das tun möchte, da die Berechtigungen eines Symlinks nicht vorhanden sind wird beim Zugriff auf eine Datei verwendet "
Andrew Henle