GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo bloquear un archivo de texto en Linux usando el comando flock

Antes de explorar las técnicas/enfoques para bloquear un archivo de texto en un entorno de sistema operativo Linux, primero debemos entender la lógica detrás del mecanismo de bloqueo de archivos de Linux.

El mecanismo de bloqueo de archivos de Linux restringe/controla el acceso a archivos entre múltiples procesos. Cuando un archivo de texto se bloquea con éxito, solo un proceso puede acceder a él en un horario específico.

Antes de continuar con este artículo, comprenda que el bloqueo de archivos es muy diferente del cifrado de archivos o del control de acceso a archivos, donde se necesita una frase de contraseña o contraseña para controlar el acceso de los usuarios a sus archivos.

Cuando un archivo está bloqueado en un entorno de sistema operativo Linux, se crea un evento de exclusión mutua donde solo un único proceso puede acceder a él a la vez.

Enunciado del problema

El sistema operativo Linux bloqueará automáticamente cualquier intento de acción de escritura dirigido a un archivo abierto que esté siendo escrito por otro proceso. Sin embargo, ¿qué sucede si desea revocar los permisos de lectura y/o escritura ya invocados por el primer proceso que tiene su archivo abierto y en modo de escritura? ¿Hay alguna solución a este problema?

Además, es posible que también queramos bloquear nuestro archivo para que ningún otro proceso interfiera o intente interrumpir el estado del modo de escritura ya iniciado. Este artículo nos guiará a través de una solución viable para bloquear un archivo de texto en Linux.

Archivo de referencia de muestra

Para que este tutorial sea más atractivo y valioso, deberíamos tener algunos archivos de texto de referencia. Nos concentraremos en los archivos de texto dentro del siguiente directorio:

Por ejemplo, abramos el archivo output.txt y empieza a escribir en él.

$ sudo nano output.txt 

Mientras este archivo aún está abierto, intentemos abrirlo desde otra pestaña de la línea de comandos.

$ sudo nano output.txt 

Obtendrá la siguiente respuesta:

La captura de pantalla anterior transmite el PID (133110 ) del proceso de trabajo en el archivo de texto con la opción de abrir el archivo mientras aún está en el modo de escritura de ese proceso.

Tecleando Y desde nuestro teclado, habremos abierto este archivo de texto y lo hemos entregado a un proceso diferente con acceso exclusivo al modo de escritura.

Por lo tanto, una modificación del archivo por parte del usuario 1 conducirá al siguiente aviso en el usuario 2 mientras intenta guardar el archivo.

Esta instancia es una representación perfecta de dos usuarios diferentes en la red que trabajan en un solo archivo.

Bloquear un archivo de texto usando la utilidad flock de Linux

Para resolver este problema, necesitamos la ayuda del rebaño de Linux utilidad. Desde el util-linux hosts de paquetes rebaño comando, debería estar disponible en casi todas las distribuciones del sistema operativo Linux. Este comando administra bloqueos de archivos/directorios específicos a través del entorno de línea de comandos de Linux.

Para bloquear un archivo de texto en Linux, haremos referencia a la siguiente sintaxis:

$ flock -x PATH_TO_FILE_TO_LOCK -c COMMAND 

El -x La opción es para obtener un bloqueo de escritura en el archivo de destino. Intentemos bloquear la muestra output.txt Archivo de texto. El -c La opción nos permitirá pasar un solo comando compatible con Linux, p. comando gato .

$ flock -x /home/dnyce/LinuxShellTips_Files/output.txt -c cat

La instancia de terminal anterior permanecerá activa para indicar que el archivo de texto ha sido bloqueado.

Si abrimos otra terminal (mientras esta instancia de terminal aún se está ejecutando) y ejecutamos otra rebaño comando en este mismo archivo, se nos debe negar el acceso a él.

$ flock -w .007 /home/dnyce/LinuxShellTips_Files/output.txt -c echo; /bin/echo $?

1

El -w La opción se utiliza para transmitir el tiempo de espera de .007 segundos antes de que se coloque un bloqueo en el archivo de texto. Luego ejecutamos echo $? para mostrar el estado de salida de este comando.

Un estado de salida de 0 implica que el comando se ejecutó con éxito y un estado de salida de 1 implica que el comando no se pudo ejecutar debido a un error. En este caso, el archivo de texto está bloqueado por otro proceso.

Para confirmar aún más que el archivo de texto está bloqueado, podemos usar lslocks Comandos para enumerar todos los bloqueos activos del sistema local.

$ lslocks

Como puede ver, nuestro archivo está presente.

Desbloqueo de un archivo de texto en Linux

Cancelación de la bandada inicial comando (Ctrl+c) o cerrar el archivo de texto debe liberar el bloqueo, lo que permite ejecutar con éxito el siguiente comando en el terminal secundario.

$ flock -w .007 /home/dnyce/LinuxShellTips_Files/output.txt -c echo; /bin/echo $?

El estado de salida de 0 implica que el bloqueo ya no es aplicable al archivo de texto.

Hemos aprendido cómo bloquear un archivo de texto en Linux para que solo un proceso pueda usarlo (modo de escritura) a la vez. La implementación de este artículo es particularmente útil cuando diferentes usuarios en una red acceden a un solo archivo.

Más sobre rebaño El comando se puede encontrar en su página man.

$ man flock

Linux
  1. Cómo agregar texto al final del archivo en Linux

  2. Cómo guardar la salida del comando en un archivo en Linux

  3. Cómo extraer el archivo tar.gz en Linux usando la línea de comandos

  4. Cómo escribir texto en la imagen usando el comando de Linux

  5. Cómo reiniciar Linux usando la línea de comandos

Cómo usar el comando Truncar en Linux

Cómo guardar la salida del comando de Linux en una imagen o un archivo de texto

Cómo crear un archivo en Linux usando el comando Cat

Cómo crear un archivo en Linux usando Terminal

Cómo imprimir líneas duplicadas en un archivo de texto en Linux

Cómo mezclar líneas en un archivo en Linux