Cómo saber si un fichero tiene permisos de ejecución
Para saber en la consola si un fichero tiene permisos de ejecución para nuestro usuario, podemos saberlo con:
ls -l fichero
Si el cuarto carácter de la primera columna es una x, entonces el fichero es ejecutable. Recordemos qué indica esa columna:
-rwxrwxr-x
El primer carácter indica el tipo de fichero, si aparece un guión (–), es un fichero común, si el carácter es un d, entonces, es un directorio. Una l indica un enlace a otro fichero y una b representa que es un fichero binario.
Los otros nueve caracteres se agrupan de tres en tres, indicando los permisos del usuario propietario del fichero, del grupo propietario y del resto de usuarios. Los permisos que puede tener un fichero son tres:
- Permiso de lectura, si aparece una r, indica que tiene permisos de lectura, un – indica que no tiene permisos de lectura.
- Permiso de escritura, si aparece una w, indica que tiene permisos de escritura, un – indica que no tiene permisos de escritura.
- Permiso de lectura, si aparece una x, indica que tiene permisos de ejecución, un – indica que no tiene permisos de ejecución.
Por lo que el bloque usado como ejemplo (-rwxrwxr-x) indica que es un fichero común con el primer guión, que el usuario propietario tiene permisos de lectura, escritura y ejecución (rwx), igual que el grupo propietario y que el resto de usuario tienen permisos de lectura y ejecución, pero no tienen permisos de escritura (r-w).
En un script
Para saber si un usuario tiene permisos de forma automatizada, requiere un poquito más de trabajo ya que deberemos consultar individualmente cada una de los permisos, pero es una muy buena práctica hacer una comprobación previa para evitar errores como, por ejemplo, intentar escribir en un fichero que no tiene permisos de escritura para ese usuario.
Para comprobarlo en un if, deberemos usar un guión y la inicial de ese permiso entre los corchetes:
#!/bin/bash filename="prueba" if [ -x $filename ] then echo "Tiene permisos de ejecución" fi if [ -r $filename ] then echo "Tiene permisos de lectura" fi if [ -w $filename ] then echo "Tiene permisos de escritura" fi
En el ejemplo, simplemente se muestra si tiene cada uno de los permisos, pero podemos complicarlo tanto como queramos, ejecutando el código que necesitemos tanto como si tiene permiso como si no lo tiene, usando un else para complementar el if que necesitemos:
#!/bin/bash filename="prueba" if [ -x $filename ] then echo "Tiene permisos de ejecución" else echo "No tiene permisos de ejecución" fi if [ -r $filename ] then echo "Tiene permisos de lectura" else echo "No tiene permisos de lectura" fi if [ -w $filename ] then echo "Tiene permisos de escritura" else echo "No tiene permisos de escritura" fi
¿Qué pasa si el fichero no existe?
Si el fichero no existe, la comprobación dará que no tiene permisos de ningún tipo, pero no indica si el fichero existe o no existe, por lo que deberemos comprobar si el fichero existe con if [ -f $filename ]:
#!/bin/bash filename="prueba" if [ -f $filename ] then if [ -x $filename ] then echo "Tiene permisos de ejecución" else echo "No tiene permisos de ejecución" fi if [ -r $filename ] then echo "Tiene permisos de lectura" else echo "No tiene permisos de lectura" fi if [ -w $filename ] then echo "Tiene permisos de escritura" else echo "No tiene permisos de escritura" fi else echo "El fichero no existe" fi
Pingback: Extraer ruta, nombre y extensión de un fichero – Linux en Español