Cómo comprobar si un archivo es ejecutable en Linux

LinuxLinuxBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderá cómo determinar si un archivo es ejecutable en Linux utilizando varios métodos. Comenzará utilizando el comando test con la opción -x para verificar los permisos de ejecución y entender cómo interpretar su estado de salida.

A continuación, explorará cómo utilizar el comando ls -l para ver los permisos detallados de los archivos e identificar la bandera de ejecución. Finalmente, aprenderá cómo utilizar el comando stat para inspeccionar la información de acceso de los archivos, lo que proporciona otra forma de confirmar la ejecutabilidad.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicSystemCommandsGroup -.-> linux/test("Condition Testing") linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/BasicFileOperationsGroup -.-> linux/chmod("Permission Modifying") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") subgraph Lab Skills linux/echo -.-> lab-558712{{"Cómo comprobar si un archivo es ejecutable en Linux"}} linux/test -.-> lab-558712{{"Cómo comprobar si un archivo es ejecutable en Linux"}} linux/ls -.-> lab-558712{{"Cómo comprobar si un archivo es ejecutable en Linux"}} linux/chmod -.-> lab-558712{{"Cómo comprobar si un archivo es ejecutable en Linux"}} linux/cd -.-> lab-558712{{"Cómo comprobar si un archivo es ejecutable en Linux"}} end

Probar la ejecutabilidad con test -x

En este paso, aprenderá cómo verificar si un archivo es ejecutable utilizando el comando test con la opción -x. El comando test es un comando interno de la shell que evalúa expresiones condicionales. La opción -x específicamente verifica los permisos de ejecución.

Primero, creemos un archivo de texto simple en su directorio ~/project. Utilizaremos el comando echo para colocar algún texto en un archivo llamado my_script.sh.

echo "echo 'Hello from the script!'" > ~/project/my_script.sh

Ahora, veamos si este archivo es ejecutable. Por defecto, cuando crea un nuevo archivo de esta manera, no tendrá permisos de ejecución.

Utilice el comando test -x seguido de la ruta al archivo:

test -x ~/project/my_script.sh

Después de ejecutar este comando, no verá ninguna salida si la prueba es exitosa (lo que significa que el archivo NO es ejecutable). Si el archivo fuese ejecutable, test -x devolvería un estado de 0, que generalmente se interpreta como "verdadero" o "éxito" en la programación de shell, pero por defecto no imprime nada en la terminal.

Para ver el resultado del comando test, podemos verificar el estado de salida del comando anterior utilizando $?. Un estado de salida de 0 significa que la prueba fue verdadera (el archivo es ejecutable), y un estado distinto de cero (generalmente 1) significa que la prueba fue falsa (el archivo no es ejecutable).

echo $?

Debería ver una salida de 1, lo que indica que my_script.sh actualmente no es ejecutable.

Ahora, hagamos el archivo ejecutable utilizando el comando chmod. chmod se utiliza para cambiar los permisos de archivos y directorios. Utilizaremos +x para agregar el permiso de ejecución para el propietario del archivo.

chmod +x ~/project/my_script.sh

Ahora, probemos la ejecutabilidad nuevamente:

test -x ~/project/my_script.sh

Y verifiquemos el estado de salida:

echo $?

Esta vez, la salida debería ser 0, lo que confirma que el archivo ahora es ejecutable.

Finalmente, intentemos ejecutar el script para ver la salida:

~/project/my_script.sh

Debería ver:

Hello from the script!

Esto confirma que ha hecho el archivo ejecutable y lo ha ejecutado con éxito.

Verificar permisos con ls -l

En este paso, aprenderá cómo ver los permisos detallados de los archivos utilizando el comando ls -l. Este comando proporciona un formato de lista detallada, mostrando varios atributos de archivos y directorios, incluyendo permisos, propiedad, tamaño y fecha de modificación.

Navegue hasta su directorio ~/project si no está ya allí. Puede utilizar el comando cd:

cd ~/project

Ahora, liste los archivos en este directorio utilizando el comando ls -l:

ls -l

Debería ver una salida similar a esta (los detalles exactos como la fecha y la hora variarán):

-rwxr-xr-x 1 labex labex   30 <date> <time> my_script.sh

Desglosemos la primera parte de la salida, que representa los permisos del archivo: -rwxr-xr-x. Esta cadena de diez caracteres le dice mucho sobre quién puede hacer qué con el archivo.

El primer carácter indica el tipo de archivo:

  • -: Un archivo normal (como nuestro my_script.sh)
  • d: Un directorio
  • l: Un enlace simbólico

Los siguientes nueve caracteres se agrupan en tres conjuntos de tres, que representan los permisos para:

  1. Propietario: El usuario que es dueño del archivo (en este caso, labex).
  2. Grupo: El grupo que es dueño del archivo (también labex).
  3. Otros: Todos los demás usuarios del sistema.

Dentro de cada conjunto de tres caracteres, los permisos se representan como:

  • r: Permiso de lectura (permite ver el contenido del archivo)
  • w: Permiso de escritura (permite modificar o eliminar el archivo)
  • x: Permiso de ejecución (permite ejecutar el archivo como un programa)
  • -: Indica que el permiso no está concedido

Así, para -rwxr-xr-x:

  • El propietario (labex) tiene permisos rwx: lectura, escritura y ejecución.
  • El grupo (labex) tiene permisos r-x: lectura y ejecución, pero no escritura.
  • Los demás tienen permisos r-x: lectura y ejecución, pero no escritura.

Esta salida confirma que después de utilizar chmod +x en el paso anterior, el propietario (labex) ahora tiene permiso de ejecución (x) para my_script.sh.

También puede utilizar ls -l para verificar los permisos de los directorios. Por ejemplo, veamos los permisos del directorio ~/project en sí:

ls -ld ~/project

La opción -d le dice a ls que liste el directorio en sí, no su contenido. La salida podría verse así:

drwxr-xr-x 2 labex labex 4096 <date> <time> /home/labex/project

Aquí, el primer carácter d indica que es un directorio. Los permisos rwxr-xr-x significan:

  • El propietario (labex) tiene permisos de lectura, escritura y ejecución en el directorio. Para un directorio, el permiso de 'ejecución' le permite entrar al directorio y acceder a su contenido.
  • El grupo (labex) y los demás tienen permisos de lectura y ejecución en el directorio, pero no de escritura.

Comprender la salida de ls -l es fundamental para trabajar con archivos y permisos en Linux.

Inspeccionar el acceso a archivos con stat

En este paso, utilizará el comando stat para obtener información detallada sobre un archivo, incluyendo sus tiempos de acceso, modificación y cambio, así como sus permisos en un formato más estructurado que ls -l.

El comando stat muestra el estado de un archivo. Puede ser especialmente útil para la programación de scripts o cuando se necesitan marcas de tiempo precisas.

Utilicemos stat en el archivo my_script.sh que creó en los pasos anteriores. Asegúrese de estar en el directorio ~/project o proporcione la ruta completa al archivo.

stat ~/project/my_script.sh

Verá una salida similar a esta:

  File: /home/labex/project/my_script.sh
  Size: 30              Blocks: 8          IO Block: 4096   regular file
Device: <device_id>     Inode: <inode_number>  Links: 1
Access: (<permissions>/-rwxr-xr-x)  Uid: ( 5000/   labex)   Gid: ( 5000/   labex)
Access: <date> <time>.<nanoseconds> +<timezone_offset>
Modify: <date> <time>.<nanoseconds> +<timezone_offset>
Change: <date> <time>.<nanoseconds> +<timezone_offset>
 Birth: -

Veamos algunas líneas clave en la salida:

  • File: El nombre y la ruta del archivo.
  • Size: El tamaño del archivo en bytes.
  • Access: (<permissions>/-rwxr-xr-x): Esta línea muestra los permisos del archivo tanto en formato octal (por ejemplo, 0755 que corresponde a rwxr-xr-x) como en el formato simbólico que vio con ls -l. También muestra el ID de usuario (Uid) y el ID de grupo (Gid) del propietario y el grupo del archivo.
  • Access: La última vez que se accedió (se leyó) al archivo.
  • Modify: La última vez que se modificó el contenido del archivo.
  • Change: La última vez que se cambió la metainformación del archivo (como permisos, propiedad, etc.).
  • Birth: La fecha de creación del archivo (puede no estar disponible en todos los sistemas de archivos).

El comando stat proporciona una vista más detallada de la información de los archivos en comparación con ls -l. Es especialmente útil cuando se necesita examinar marcas de tiempo o la representación numérica de los permisos.

También puede utilizar stat en directorios:

stat ~/project

La salida será similar, pero el tipo de File indicará que es un directorio.

Experimente con stat en diferentes archivos y directorios de su directorio ~/project para ver las variaciones en la salida.

Resumen

En este laboratorio, aprendiste cómo verificar si un archivo es ejecutable en Linux utilizando el comando test -x. Creaste un archivo de script sencillo, utilizaste test -x y comprobaste el estado de salida (echo $?) para confirmar su estado inicial de no ejecutabilidad (estado de salida 1). Luego, utilizaste chmod +x para agregar permisos de ejecución y verificaste el cambio con test -x y echo $?, observando un estado de salida de 0.

También exploraste métodos alternativos para verificar los permisos de archivos. Utilizando ls -l, aprendiste a interpretar la cadena de permisos, específicamente el carácter 'x', para identificar archivos ejecutables. Finalmente, utilizaste el comando stat para ver información detallada del archivo, incluyendo permisos de acceso, lo que proporciona otra forma de confirmar la ejecutabilidad.