Solution 1 :
if sudo test -f "/path/to/file"; then
echo "FILE EXISTS"
else
echo "FILE DOESN'T EXIST"
fi
testez la page de manuel
Pour compléter les choses, à l'opposé, si vous voulez vérifier depuis la racine si un fichier ou un répertoire est lisible pour un certain utilisateur, vous pouvez utiliser
if sudo -u username test -f "/path/to/file"; then
echo "FILE EXISTS"
else
echo "FILE DOESN'T EXIST"
fi
Solution 2 :
Ce que vous décrivez devrait fonctionner correctement - tant que vous utilisez des chemins absolus et -f
("Le fichier existe et est un fichier normal") est vraiment le test que vous souhaitez effectuer.
Je vois un /
à la fin dans ce que vous avez posté dans votre question - Testez-vous un répertoire ? Cela devrait être -d
, ou simplement -e
("Quelque chose existe avec ce nom - quel que soit son type")
Notez également qu'à moins que quelque chose en cours de route ne soit pas lisible test
([
) devrait pouvoir vous dire si un fichier appartenant à root existe ou non (par exemple [ -f /root/.ssh/known_hosts ]
échouera probablement, car le répertoire /root/.ssh ne l'est pas (ou du moins ne devrait pas l'être ) lisible par un utilisateur normal. [ -f /etc/crontab ]
devrait réussir).
Solution 3 :
En plus des autres réponses, la distinction entre le test ou l'échec de l'authentification sudo peut être effectuée en exécutant d'abord sudo true
. La plupart des implémentations sudo que je connais ne nécessiteront pas de réauthentification dans un court laps de temps.
Par exemple :
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