Quero verificar se existe um arquivo como esse
[ -f /path/to/file/ ]
No entanto, estou executando este comando como um usuário comum e o arquivo pertence à raiz. Como posso usar o sudo para fazer isso.
sudo [ -f /path/to/file/ ]
não funciona.
Quero verificar se existe um arquivo como esse
[ -f /path/to/file/ ]
No entanto, estou executando este comando como um usuário comum e o arquivo pertence à raiz. Como posso usar o sudo para fazer isso.
sudo [ -f /path/to/file/ ]
não funciona.
Respostas:
O que você está descrevendo deve funcionar bem - desde que você esteja usando caminhos absolutos e -f
("O arquivo existe e é um arquivo comum") é realmente o teste que você deseja executar.
Eu vejo um rastro /
no que você postou na sua pergunta - Você está testando para um diretório? Deve ser -d
, ou simplesmente -e
("Existe algo 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 ser capaz de informar se um arquivo pertencente ao root existe ou não (por exemplo [ -f /root/.ssh/known_hosts ]
, provavelmente falhará, porque o diretório /root/.ssh não é (ou pelo menos deveria 't ser ) legível por um usuário normal. [ -f /etc/crontab ]
deve suceder).
sudo
comando falhar (senha incorreta, não permitida em / etc / sudoers, etc), dará o mesmo resultado como se o arquivo não existisse.
sudo
parte de trabalho :)
if sudo test -f "/path/to/file"; then
echo "FILE EXISTS"
else
echo "FILE DOESN'T EXIST"
fi
Para concluir, no lado oposto, se você deseja 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
Adicionando às outras respostas, a distinção entre a falha de autenticação de teste ou sudo pode ser feita pela primeira execução sudo true
. A maioria das implementações de sudo que conheço não exigirá nova autenticação dentro de 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