明らかに私のファイルは/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
は、どこも指し示さない(または、存在しないファイルを指す)シンボリックリンクになります。確認する ls -l
。
chown
エラーを考えると、可能性が最も高いのは Svenによる回答 のようにシンボリックリンクであるということです。ただし、ファイルが存在してリンクではない場合に誰かがここに行き着くが、command-not-found/file-not-foundエラーが発生した場合の参考として、実行可能ファイルが動的にリンクされ、何らかの理由でライブラリをロードできません:
ldd
を実行してそれらを確認してください)また、スクリプトの場合、シェバンのインタープリターが同様の理由で実行できなかった場合、同じエラーが発生します。
シンボリックリンク自体の所有権を変更するオプションもあります
chown -h my_user:users /usr/bin/ngrok
ターゲットファイルの所有権を変更したくない場合(または権限がない場合)。