Antes de explorar las técnicas/enfoques para bloquear un archivo de texto en un entorno de sistema operativo Linux, primero debemos comprender 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 el 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.
Tabla de Contenidos
Planteamiento 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 una 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 salida.txt y empezar a escribir en él.
$ sudo nano output.txt
Mientras este archivo aún está abierto, intentemos abrirlo desde otra pestaña de línea de comando.
$ sudo nano output.txt
Obtendrá la siguiente respuesta:
La captura de pantalla anterior transmite la 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.
Al teclear 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 al intentar guardar el archivo.
Esta instancia es una representación perfecta de dos usuarios diferentes en la red que trabajan en un solo archivo.
Bloquee un archivo de texto usando la utilidad flock de Linux
Para resolver este problema, necesitamos la ayuda de Linux rebaño utilidad. Desde el util-linux anfitriones del paquete 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
Él -x
La opción es para obtener un bloqueo de escritura en el archivo de destino. Intentemos bloquear la muestra. salida.txt Archivo de texto. Él -c
La opción nos permitirá pasar un solo comando compatible con Linux, por ejemplo 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
Él -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 generar el estado de salida de este comando.
Un estado de salida de 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 el cerraduras 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
Cancelando la inicial rebaño dominio (Ctrl+c)
o cerrar el archivo de texto debe liberar el bloqueo, lo que permite ejecutar con éxito el siguiente comando en la terminal secundaria.
$ flock -w .007 /home/dnyce/LinuxShellTips_Files/output.txt -c echo; /bin/echo $?
El estado de salida de 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 en rebaño El comando se puede encontrar en su página de manual.
$ man flock