Claramente, meu arquivo existe em /usr/bin
$ ls /usr/bin/ngrok
/usr/bin/ngrok
No entanto, quando tento chown
receber um erro
$ sudo chown my_user:users /usr/bin/ngrok
chown: cannot dereference '/usr/bin/ngrok': No such file or directory
Outras tentativas para executá-lo também falham!
$ ngrok
bash: ngrok: command not found
$ sudo /usr/bin/ngrok
sudo: /usr/bin/ngrok: command not found
O que esta acontecendo aqui?
/usr/bin/ngrok
para ser uma simetria completa do seguinte caso comsudo
.Respostas:
/usr/bin/ngrok
será um link simbólico que não aponta para lugar nenhum (ou melhor, para um arquivo inexistente). Verifique comls -l
.fonte
readlink -f /usr/bin/ngrok
para descobrir onde o link deve apontar.namei -l /usr/bin/ngrok
Dado o
chown
erro, a possibilidade mais provável é que seja um link simbólico, conforme respondido por Sven . No entanto, apenas para referência, caso alguém acabe aqui nos casos em que o arquivo existe e não é um link, mas gera um erro de comando não encontrado / arquivo não encontrado, mais uma possibilidade é que o executável esteja vinculado dinamicamente e por algum motivo, não é possível carregar bibliotecas:ldd
no binário para vê-las)Além disso, para um script, se o intérprete no shebang não puder ser executado por motivos semelhantes, você receberá o mesmo erro.
fonte
Você também tem a opção de alterar a propriedade do próprio link simbólico com
chown -h my_user:users /usr/bin/ngrok
se você não deseja (ou tem permissão) alterar a propriedade do arquivo de destino.
fonte
chown(1)
página de manual do Linux . As possíveis razões Linux faz isso são discutidos em unix.stackexchange.com/questions/33180/...