Como verificar se a permissão “sudo” será necessária para executar um comando?

2

Existe uma maneira de determinar facilmente se posso ler ou escrever para / de um determinado arquivo, ou se precisarei usar o "sudo" para fazer isso? Executar comandos desnecessariamente como sudo significa que esses arquivos são criados com o usuário root como proprietário, o que é indesejável.

Algo como

is_readable /path/to/file
if [[ $? == 0 ]]; then
    do_command /path/to/file;
else
    sudo do_command /path/to/file;
fi
    
por Kevin Burke 30.09.2014 / 20:22

2 respostas

5

Você pode tentar a opção -w da test utillity:

[ -w /path/to/file ] && do_command /path/to/file || sudo do_command /path/to/file

Ou a versão longa:

if [ -w /path/to/file ]; then
  do_command /path/to/file 
else
  sudo do_command /path/to/file
fi

Na página de manual

-w FILE
              FILE exists and write permission is granted
    
por 30.09.2014 / 20:29
0

is_readable /path/to/file é escrito test -r /path/to/file ou [ -r /path/to/file ] ou [[ -r /path/to/file ]] . Veja usando um ou dois colchetes - bash para diferenciar. is_writable usa -w .

Não conseguir acessar um arquivo não é um bom indicador de "precisar de sudo". Pode ser que você execute como um usuário ou grupo diferente, não como root. Pode ser que em um determinado sistema, a maneira de obter acesso root não seja executar sudo , mas algum outro mecanismo ( su , calife ,…). Testar o acesso a um arquivo é bom em um sistema conhecido com uma configuração conhecida. Se você distribuir scripts que fazem isso, lembre-se de que isso é apenas um teste heurístico, não um teste confiável, e deixe o usuário facilmente anular suas decisões.

Note que só porque um arquivo testado como legível não significa que você realmente será capaz de lê-lo. As permissões no arquivo podem ter mudado nesse meio tempo. Às vezes, há discrepâncias entre o que as permissões de arquivo dizem e o que as verificações de acesso realmente fazem: sistemas de arquivos remotos com atributos sofisticados que o sistema de arquivos local não entende, estruturas de segurança como o SELinux, etc.

    
por 01.10.2014 / 01:52