Como posso usar o sudo para verificar se existe um arquivo?

11

Eu quero verificar se existe um arquivo assim

[ -f /path/to/file/ ]

No entanto, estou executando esse comando como um usuário comum e o arquivo é de propriedade de root. Como posso usar o sudo para conseguir isso?

sudo [ -f /path/to/file/ ] não funciona.

    
por ckliborn 15.06.2011 / 17:44

3 respostas

10

O que você está descrevendo deve funcionar bem - contanto que você esteja usando caminhos absolutos, e -f ("Arquivo existe e é um arquivo normal") é realmente o teste que você deseja realizar.

Eu vejo um / no que você postou na sua pergunta - Você está testando um diretório? Isso deve ser -d , ou simplesmente -e ("Algo existe com esse nome - independentemente do tipo")

Observe também que, a menos que algo ao longo do caminho não seja legível, test ( [ ) deve saber se um arquivo de propriedade de root existe ou não (por exemplo, [ -f /root/.ssh/known_hosts ] provavelmente falhará, porque o / root O diretório /.ssh não é (ou pelo menos não deveria ser ) legível por um usuário normal. [ -f /etc/crontab ] deve ser bem-sucedido).

    
por 15.06.2011 / 17:58
10
if sudo test -f "/path/to/file"; then
    echo "FILE EXISTS"
else
    echo "FILE DOESN'T EXIST"
fi

página do manual de testes

Para completar as coisas, no lado oposto, se você quiser verificar a partir da raiz, se um arquivo ou diretório é legível para um determinado usuário, você pode usar

if sudo -u username test -f "/path/to/file"; then
    echo "FILE EXISTS"
else
    echo "FILE DOESN'T EXIST"
fi
    
por 26.07.2012 / 23:13
1

Adicionando a outras respostas, a distinção entre a falha de autenticação de teste ou sudo pode ser feita executando primeiro sudo true . A maioria das implementações do sudo que eu conheço não exigirá uma nova autenticação em um curto período.

Por exemplo:

if sudo true; then
    if sudo test -f "/path/to/file"; then
        echo "FILE EXISTS"
    else
        echo "FILE DOESN'T EXIST"
    fi
else
    echo "SUDO AUTHENTICATION FAILED"
fi
    
por 21.09.2016 / 11:38

Tags