Quiero comprobar si existe un archivo así
[ -f /path/to/file/ ]
Sin embargo, estoy ejecutando este comando como usuario normal y el archivo es propiedad de root. ¿Cómo puedo usar sudo para lograr esto?
sudo [ -f /path/to/file/ ] No funciona.
Quiero comprobar si existe un archivo así
[ -f /path/to/file/ ]
Sin embargo, estoy ejecutando este comando como usuario normal y el archivo es propiedad de root. ¿Cómo puedo usar sudo para lograr esto?
sudo [ -f /path/to/file/ ] No funciona.
Respuestas:
Lo que está describiendo debería funcionar bien, siempre que esté utilizando rutas absolutas y -f("El archivo existe y es un archivo normal") es realmente la prueba que desea realizar.
Veo un final /en lo que publicaste en tu pregunta: ¿estás probando un directorio? Eso debería ser -d, o simplemente -e("Algo existe con ese nombre, independientemente del tipo")
También tenga en cuenta que a menos que algo en el camino no sea legible test( [) debería poder decirle si un archivo propiedad de root existe o no (por ejemplo [ -f /root/.ssh/known_hosts ], probablemente fallará, porque el directorio /root/.ssh no lo es (o al menos no debería) t ) ser legible por un usuario normal. [ -f /etc/crontab ]debe tener éxito).
sudocomando falla (contraseña incorrecta, no permitida en / etc / sudoers, etc.), dará el mismo resultado que si el archivo no existiera.
sudoparte que funciona :)
if sudo test -f "/path/to/file"; then
echo "FILE EXISTS"
else
echo "FILE DOESN'T EXIST"
fi
Para completar las cosas, en el lado opuesto, si desea verificar desde la raíz si un archivo o directorio es legible para un determinado usuario, puede usar
if sudo -u username test -f "/path/to/file"; then
echo "FILE EXISTS"
else
echo "FILE DOESN'T EXIST"
fi
Además de las otras respuestas, se puede distinguir entre la prueba o la falla de autenticación de sudo ejecutando primero sudo true. La mayoría de las implementaciones de sudo que conozco no requerirán una nueva autenticación en un corto período de tiempo.
Por ejemplo:
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