Cómo comprobar si un archivo es escribible en Linux

LinuxBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderás cómo comprobar si un archivo es escribible en Linux utilizando varios métodos. Comenzaremos utilizando el comando test -w para determinar rápidamente la capacidad de escritura y entender su uso en la programación de scripts de shell.

A continuación, verificarás en detalle los permisos de archivo utilizando el comando ls -l, interpretando la salida para entender la propiedad, el grupo y otros permisos. Finalmente, inspeccionarás la información de acceso a archivos de manera más integral con el comando stat.

Probar la capacidad de escritura con test -w

En este paso, aprenderemos cómo comprobar si tienes permiso para escribir en un archivo o directorio utilizando el comando test con la opción -w. Comprender los permisos de archivo es crucial en Linux, ya que determina quién puede leer, escribir y ejecutar archivos.

El comando test es un comando incorporado en el shell que comprueba condiciones y devuelve un estado de salida de 0 (verdadero) o 1 (falso). La opción -w comprueba específicamente si un archivo o directorio es escribible por el usuario actual.

Vamos a crear un archivo simple en tu directorio ~/project. Utilizaremos el comando touch, que crea un archivo vacío si no existe.

Navega hasta tu directorio de proyecto si aún no estás allí:

cd ~/project

Ahora, crea un archivo llamado my_test_file.txt:

touch my_test_file.txt

Puedes verificar que el archivo se haya creado utilizando el comando ls:

ls

Deberías ver my_test_file.txt en la salida.

Ahora, vamos a utilizar el comando test -w para comprobar si puedes escribir en este archivo. Lo combinaremos con un comando echo para ver el resultado.

test -w my_test_file.txt && echo "Writable" || echo "Not writable"

Desglosemos este comando:

  • test -w my_test_file.txt: Esto comprueba si my_test_file.txt es escribible.
  • && echo "Writable": Si el comando test devuelve verdadero (estado de salida 0), el operador && ejecuta el siguiente comando, que imprime "Writable".
  • || echo "Not writable": Si el comando test devuelve falso (estado de salida 1), el operador || ejecuta el siguiente comando, que imprime "Not writable".

Dado que creaste el archivo como el usuario labex en tu directorio personal, deberías tener permisos de escritura, y la salida debería ser:

Writable

El comando test -w se utiliza a menudo en scripts de shell para comprobar los permisos antes de intentar escribir en un archivo, evitando posibles errores.

Haz clic en Continuar para pasar al siguiente paso.

Verificar permisos con ls -l

En este paso, utilizaremos el comando ls -l para ver información detallada sobre archivos y directorios, incluyendo sus permisos. Este comando es esencial para entender quién puede acceder a qué en un sistema Linux.

El comando ls lista archivos y directorios. La opción -l proporciona un formato de "listado detallado", que incluye permisos, propiedad, tamaño y fecha de modificación.

Asegúrate de estar en el directorio ~/project:

cd ~/project

Ahora, ejecuta el comando ls -l para ver los detalles de los archivos en este directorio. Deberías ver el archivo my_test_file.txt que creaste en el paso anterior.

ls -l

La salida se verá algo así:

-rw-rw-r-- 1 labex labex    0 Month Day HH:MM my_test_file.txt

Desglosemos la primera parte de la salida, que representa los permisos del archivo:

-rw-rw-r--

Esta cadena de diez caracteres te dice sobre el tipo de archivo y sus permisos para diferentes usuarios.

  1. El primer carácter (- en este caso) indica el tipo de archivo.
    • -: Archivo regular
    • d: Directorio
    • l: Enlace simbólico
    • Y otros...
  2. Los siguientes nueve caracteres se agrupan en tres conjuntos de tres:
    • El primer conjunto (rw-): Permisos para el propietario del archivo.
    • El segundo conjunto (rw-): Permisos para el grupo al que pertenece el archivo.
    • El tercer conjunto (r--): Permisos para otros (todos los demás en el sistema).

Dentro de cada conjunto de tres caracteres:

  • r: Permiso de lectura (permite ver el contenido del archivo o listar el contenido de un directorio).
  • w: Permiso de escritura (permite modificar el archivo o crear/eliminar archivos dentro de un directorio).
  • x: Permiso de ejecución (permite ejecutar el archivo como un programa o entrar en un directorio).
  • -: Indica que el permiso no está concedido.

Así, para my_test_file.txt con permisos -rw-rw-r--:

  • El propietario (labex) tiene permisos de lectura (r) y escritura (w).
  • El grupo (labex) tiene permisos de lectura (r) y escritura (w).
  • Otros tienen solo permiso de lectura (r).

Esta salida confirma por qué el comando test -w en el paso anterior devolvió "Writable" para el usuario labex – porque el propietario (labex) tiene permiso de escritura (w).

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

Haz clic en Continuar para continuar.

Inspeccionar el acceso a archivos con stat

En este paso, utilizaremos el comando stat para obtener información detallada sobre un archivo o sistema de archivos. Mientras que ls -l te da una visión general rápida, stat ofrece una visión mucho más completa de los metadatos del archivo, incluyendo los tiempos de acceso, modificación y cambio.

Asegúrate de estar en el directorio ~/project:

cd ~/project

Ahora, vamos a utilizar el comando stat en el archivo my_test_file.txt que creaste anteriormente:

stat my_test_file.txt

La salida será bastante detallada y podría verse algo así:

  File: my_test_file.txt
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: ---h/---d       Inode: ---         Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 5000/   labex)   Gid: ( 5000/   labex)
Access: YYYY-MM-DD HH:MM:SS.SSSSSSSSS +ZZZZ
Modify: YYYY-MM-DD HH:MM:SS.SSSSSSSSS +ZZZZ
Change: YYYY-MM-DD HH:MM:SS.SSSSSSSSS +ZZZZ
 Birth: -

Veamos algunas de las piezas clave de información proporcionadas por stat:

  • File: El nombre del archivo.
  • Size: El tamaño del archivo en bytes.
  • Access: (0664/-rw-rw-r--): Esta línea muestra los permisos tanto en formato octal (0664) como simbólico (-rw-rw-r--). Esto coincide con los permisos que vimos con ls -l.
  • Uid: ( 5000/ labex): El Identificador de Usuario (UID) y el nombre de usuario del propietario del archivo.
  • Gid: ( 5000/ labex): El Identificador de Grupo (GID) y el nombre del grupo al que pertenece el archivo.
  • Access: La última vez que se accedió (leyó) al archivo.
  • Modify: La última vez que se modificó el contenido del archivo.
  • Change: La última vez que se cambiaron los metadatos 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 ofrece una visión más profunda de las propiedades de un archivo que ls -l. Es especialmente útil cuando necesitas marcas de tiempo precisas o información detallada sobre la propiedad y los permisos de archivos en diferentes formatos.

También puedes usar stat con opciones para obtener información específica. Por ejemplo, para ver solo los permisos de acceso en formato octal:

stat -c "%a" my_test_file.txt

Este comando utiliza la opción -c para especificar un formato personalizado. "%a" es el especificador de formato para los permisos de acceso en octal. La salida debería ser:

664

Esto coincide con el permiso octal 0664 mostrado en la salida completa de stat (el cero inicial a menudo se omite).

Haz clic en Continuar para completar este laboratorio.

Resumen

En este laboratorio, aprendimos cómo verificar si un archivo es escribible en Linux utilizando el comando test -w. Este comando es una forma simple y efectiva de determinar los permisos de escritura y se utiliza a menudo en scripting de shell para prevenir errores. Practicamos la creación de un archivo y luego utilizamos test -w combinado con los operadores && y || para mostrar si el archivo es escribible.

También exploramos cómo verificar los permisos de archivo utilizando el comando ls -l, que proporciona información detallada sobre la propiedad del archivo, el grupo y los permisos en un formato legible por humanos. Finalmente, aprendimos cómo inspeccionar los detalles de acceso a un archivo utilizando el comando stat, que ofrece información más completa sobre el estado de un archivo, incluyendo las marcas de tiempo de acceso, modificación y cambio.