Файл программы существует в /usr/bin, но не может быть использован

Очевидно, что мой файл существует в /usr/bin

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

Однако, когда я пытаюсь chown, я получаю ошибку

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

Дальнейшие попытки запустить его также не удаются!

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

Что здесь происходит?

15
задан 5 February 2018 в 21:04
3 ответа

/ usr / bin / ngrok будет символической ссылкой, которая никуда не указывает (или, скорее, на несуществующий файл). Проверьте с помощью ls -l .

52
ответ дан 2 December 2019 в 20:45

Учитывая ошибку chown , наиболее вероятно, что это символическая ссылка, на что ответил Свен . Однако просто для справки на случай, если кто-то попадает сюда в случаях, когда файл существует и не является ссылкой, но дает ошибку command-not-found / file-not-found, еще одна возможность заключается в том, что исполняемый файл динамически связан и по какой-то причине он не может загружать библиотеки:

  • отсутствует библиотека (запустите ldd в двоичном файле, чтобы увидеть их)
  • отсутствует загрузчик
  • apparmor , запрещающий доступ к библиотеке или загрузчику
  • ...

Кроме того, для сценария, если интерпретатор в shebang не может быть выполнен по аналогичным причинам, вы получите ту же ошибку.

4
ответ дан 2 December 2019 в 20:45

У вас также есть возможность изменить владельца самой символической ссылки с помощью

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

, если вы не хотите (или у вас есть разрешение), чтобы изменить владельца целевого файла.

0
ответ дан 2 December 2019 в 20:45

Теги

Похожие вопросы