¿Es seguro abrir un archivo que está siendo escrito por un script en ejecución?

20

Estoy ejecutando un script de shell que está escribiendo en un archivo.
Este script puede tardar mucho tiempo en completarse y me gustaría supervisar la salida parcial en lugar de esperar a que termine todo el script.

¿Es seguro abrir (doble clic) un archivo que está siendo escrito por el script?

Ninguna
fuente
44
Ese. Además, si sabe de antemano, puede canalizar la salida de los scripts a través de tee.
Hennes
1
Semi relacionado es el comando tee: puede reenviar la salida a algún archivo y al terminal al mismo tiempo: man7.org/linux/man-pages/man1/tee.1.html
Cheiron

Respuestas:

42

Leer el archivo es seguro, aunque hacer doble clic en lo que mencionó probablemente abrirá el archivo en algún editor que le ofrecerá una opción para realizar cambios y guardarlos. Los clics erróneos ocurren, por lo que recomiendo comandos que ni siquiera le permitirán cambiar el archivo.

Estos son ejemplos que funcionan en terminal; solo leerán el archivo:

cat file
less file
less +F file
tail -n 5 file
tail -f file
Kamil Maciorowski
fuente
44
Muchos editores de archivos más inteligentes le advertirán que el archivo ha sido cambiado y le preguntarán si desea volver a cargarlo, pero los editores tontos podrían no hacerlo.
user1306322
55
@ user1306322 Todavía no se garantiza que sea seguro. Salta porque el archivo está abierto para escritura no significa que se esté escribiendo constantemente. Si no se escribió nada mientras el editor se ha estado ejecutando, no se dará cuenta. Y dado que un editor puede escribir un nuevo archivo y cambiar el nombre en la parte superior (porque los cambios de nombre son atómicos), el archivo en el que se está escribiendo se habrá eliminado. La salida escrita a partir de ese momento irá a un archivo eliminado.
Kasperd
13

Mientras no le esté escribiendo, debería estar bien.

Sin embargo, recomendaría usar

tail -f log_file

en otra terminal

Este comando "seguirá" el archivo log_filey escribirá el contenido recién agregado tan pronto como el script lo actualice.

Iskustvo
fuente
1

No hay suficiente representante para agregar un comentario a la respuesta de Kamil Maciorowski:

Para algunos archivos, querrá tail -F fileque lo siguiente continúe a través de una rotación. Viendo syslog por ejemplo.

Studog
fuente
-1

En caso de que el script (o la implementación del marco subyacente) esté abriendo y cerrando repetidamente el identificador de archivo durante su trabajo, puede encontrar un error de violación de uso compartido en el modo de escritura posterior abierto por las siguientes razones:
1) El script puede solicitar la escritura acceso en modo exclusivo (excluido el acceso de lectura concurrente), por lo que si su programa editor / visor de archivos aún solo está leyendo el archivo, puede provocar una falla en el script de escritura.
2) Además, algunos editores / visores de archivos bloquean el archivo durante todo el tiempo que tienen el archivo abierto.

En conclusión, hay posibles problemas que dependen del programa que esté utilizando para ver el archivo. Y existen posibles problemas derivados de la implementación (o el marco subyacente) del script que escribe en el archivo.

Roland Pihlakas
fuente
1
Desde mi experiencia, esto es muy poco común en Linux (nota: soy un usuario doméstico). Sé que el problema existe en Windows, aunque la pregunta está etiquetada como Linux . ¿Qué "editores / espectadores" funcionan así en Linux? ¿En qué sabores de Linux son obligatorios los bloqueos?
Kamil Maciorowski,
@KamilMaciorowski Lamentablemente, no tengo una lista de advertencia específica. Las cerraduras no son obligatorias en ninguna parte (tampoco lo están en Windows), algunas personas simplemente las usan. Solo digo que tal problema es posible y por favor no use este enfoque descuidadamente en situaciones de misión crítica. Depende del OP decidir si esto aplica o si es importante. La mera existencia de la pregunta anterior aumenta las probabilidades de que tal fenómeno ya haya sucedido para el OP. Las respuestas que afirman que nada podría suceder, tampoco proporcionan mucha información nueva.
Roland Pihlakas
1
@RolandPihlakas Estoy dispuesto a apostar que el autor de esta respuesta lo ha experimentado, pero solo en Windows. Por lo tanto, es irrelevante para los sistemas compatibles con POSIX como Linux, en los que la salida de monitoreo a través de tail -fo less +Fes rutina.
Chromatix
@Chromatix Estoy muy confundido acerca de los constructiva parte de su razonamiento y alcanzo a ver qué tipo de sugerencia o nueva información se le proporciona aquí, además de su odio personal para Windows ... No ha respondido a los puntos en mi comentario en absoluto . ¿Por qué te importa lo que he experimentado? Por favor no te pongas personal.
Roland Pihlakas
@RolandPihlakas Porque su respuesta da la impresión muy firme de que abrir un archivo de solo lectura es peligroso en Linux, cuando realmente no lo es. De hecho, siempre es seguro leer un archivo al que se ha agregado, siempre y cuando no asuma que "fin de archivo" significa "fin de registro" o "fin de línea". El único caso en que fallará es cuando la aplicación de escritura tiene un "bloqueo obligatorio" que muy pocas aplicaciones tienen (el bloqueo POSIX estándar es un "bloqueo de aviso") y que generará un error bien definido, más bien que el comportamiento errático.
Chromatix