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).
sudo
comando falla (contraseña incorrecta, no permitida en / etc / sudoers, etc.), dará el mismo resultado que si el archivo no existiera.
sudo
parte 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