Por que “sudo ./foo” retorna “./foo Comando não encontrado”?

1

Estou tendo problemas com meu novo Raspberry Pi. Toda vez que tento executar ./foo , ele retorna -bash: ./foo: Permission denied

Mas se eu tentar executar sudo ./bar , ele retornará sudo: ./bar: command not found

Usar sudo com outras coisas (por exemplo: ifdown e ifup ) funciona bem, mas qualquer script que eu baixei ou gravei, ele se recusa a executar.

Estou bastante familiarizado com o bash, mas principalmente no contexto do Mac OS X. Parece-me que isso deve estar funcionando.

    
por ThatDarnPat 17.01.2014 / 18:26

4 respostas

1

Você precisa definir as permissões do script como executáveis:

chmod +x ./foo  # or sudo chmod +x ./foo
./foo
    
por 17.01.2014 / 18:32
0

Parece que foo não é executável. Você pode corrigir isso executando chmod +x foo e, em seguida, ./foo ou sudo ./foo A alternativa para torná-lo executável seria passá-lo para sh como argumento. Você pode executá-lo dessa forma digitando sh ./foo ou sudo sh ./foo .

    
por 17.01.2014 / 18:31
0

Verifique o bit executável do arquivo. Por exemplo

$ ls -l might return 
-rw-rw-r--   1 hacker hacker        28 Jan 17 11:32 foo

$ chmod 775 foo

Altere conforme apropriado para o usuário que você deseja poder executar o script.

    
por 17.01.2014 / 18:34
0

Dê uma olhada nos bits de permissão dos arquivos ./foo e ./bar . No primeiro caso, ./foo provavelmente não é executável ou não é executável para o usuário root. Quando você executa sudo , você normalmente está elevando seus privilégios para que você seja o usuário root.

Se você tiver permissões definidas assim no arquivo ./foo , ele não será executado para o userX.

$ ls -l
-rw-rw-r--   1 userX groupX          14 Jan 17 11:32 foo

Se eles forem assim, ele será executado para o userX.

$ chmod u+x foo
$ ls -l
-rwxrw-r--   1 userX groupX          14 Jan 17 11:32 foo

No entanto, o root ainda não poderá executá-lo, já que o agrupamento de três permissões (rwxrw-r--) não permite que outros usuários executem ./foo . Você pode ativar apenas esse agrupamento ou conceder permissões de execução a todos.

$ chmod o+x foo    # -rwxrw-r-x #  just other users
$ chmod g+x foo    # -rwxrwxr-- #  allows users in group groupX
$ chmod +x foo     # -rwxrwxr-x #  allows everyone

Observe acima que estamos ativando o bit x para os diferentes grupos de bits (usuário, grupo, outro).

E sobre ./bar?

Este arquivo não existe e, portanto, tentar executar algo que não existe lhe dará a mensagem que você viu.

$ sudo ./bar
sudo: ./bar: command not found

Ou apenas um usuário comum:

$ ./bar
-bash: ./bar: No such file or directory
    
por 17.01.2014 / 20:43