Очевидно, мой файл существует в /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
Что здесь происходит?
/usr/bin/ngrok
быть полной симметрией следующего случая сsudo
.Ответы:
/usr/bin/ngrok
будет символическая ссылка, которая нигде не указывает (или, скорее, на несуществующий файл). Проверьте сls -l
.источник
readlink -f /usr/bin/ngrok
найти ссылку, на которую должна указывать ссылка.namei -l /usr/bin/ngrok
Учитывая
chown
ошибку, наиболее вероятно, что это символическая ссылка, как ответил Свен . Однако, просто для справки, в случае, если кто-то окажется здесь для случаев, когда файл существует и не является ссылкой, но выдает ошибку «команда не найдена / файл не найден», еще одна возможность состоит в том, что исполняемый файл динамически связан и по какой-то причине он не может загружать библиотеки:ldd
двоичный файл, чтобы увидеть их)Кроме того, для сценария, если интерпретатор в shebang не может быть выполнен по аналогичным причинам, вы получите ту же ошибку.
источник
У вас также есть возможность изменить владельца самой символической ссылки с помощью
chown -h my_user:users /usr/bin/ngrok
если вы не хотите (или имеете разрешение) сменить владельца целевого файла.
источник
chown(1)
страницу руководства Linux . Возможные причины, по которым Linux это делает, обсуждаются по адресу unix.stackexchange.com/questions/33180/…