Je veux vérifier si un fichier existe comme ça
[ -f /path/to/file/ ]
Cependant, j'exécute cette commande en tant qu'utilisateur normal et le fichier appartient à root. Comment puis-je utiliser sudo pour y parvenir.
sudo [ -f /path/to/file/ ]
ne marche pas.
Réponses:
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 suivi
/
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 le type")Notez également que si quelque chose le long du chemin n'est pas lisible
test
([
) devrait être en mesure de vous dire si un fichier appartenant à root existe ou non (par exemple ,[ -f /root/.ssh/known_hosts ]
échouera probablement, car le répertoire de /root/.ssh est pas (ou du moins shouldn ne sera pas ) lisible par un utilisateur normal.[ -f /etc/crontab ]
devrait réussir).la source
sudo
commande échoue (mauvais mot de passe, non autorisé dans / etc / sudoers, etc.), elle donnera le même résultat que si le fichier n'existait pas.sudo
portion qui fonctionne :)page de manuel de test
Pour compléter les choses, sur le côté opposé, si vous souhaitez vérifier à partir de la racine si un fichier ou un répertoire est lisible pour un certain utilisateur, vous pouvez utiliser
la source
En ajoutant aux 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écessitent pas de ré-authentification dans un court laps de temps.Par exemple:
la source