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

Un comentario en «Cómo saber si un fichero tiene permisos de ejecución»

Deja una respuesta

Tu dirección de correo electrónico no será publicada.