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