web-dev-qa-db-fra.com

Le fichier du programme existe dans / usr / bin, mais ne peut pas être utilisé

De toute évidence, mon fichier existe dans /usr/bin

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

Cependant, lorsque j'essaie de chown je reçois une erreur

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

D'autres tentatives pour l'exécuter échouent également!

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

Que se passe-t-il ici?

15
Jorik

/usr/bin/ngrok sera un lien symbolique qui ne pointe nulle part (ou plutôt vers un fichier inexistant). Vérifier avec ls -l.

52
Sven

Étant donné l'erreur chown, la possibilité la plus probable est qu'il s'agit d'un lien symbolique, comme répondu par Sven . Cependant, juste pour référence au cas où quelqu'un se retrouverait ici pour les cas où le fichier existe et n'est pas un lien, mais donne une erreur de commande introuvable/fichier introuvable, une autre possibilité est que l'exécutable soit lié dynamiquement et pour une raison quelconque, il n'est pas en mesure de charger les bibliothèques:

  • bibliothèque manquante (exécutez ldd sur le binaire pour les voir)
  • chargeur manquant
  • apparmor refusant l'accès à une bibliothèque ou à un chargeur
  • ...

De plus, pour un script, si l'interpréteur du Shebang ne pouvait pas être exécuté pour des raisons similaires, vous obtiendriez la même erreur.

4
muru

Vous avez également la possibilité de changer la propriété du lien symbolique lui-même avec

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

si vous ne souhaitez pas (ou n'avez pas l'autorisation) de modifier la propriété du fichier cible.

0
weasel5i2