Si usamos, echo 1234 >> some-file
entonces la documentación dice que la salida se agrega.
Supongo que si algún archivo no existe, O_CREAT creará un nuevo archivo. Si >
se utilizó, entonces O_TRUNC truncará el archivo existente.
En caso de >>
: ¿Se abrirá el archivo como O_WRONLY (u O_RDWR) y se buscará que finalice y se complete la operación de escritura, simulando O_APPEND? ¿O se abrirá el archivo como O_APPEND, dejándolo en el kernel para asegurarse de que se agregue?
Pregunto esto porque un proceso de conservación está sobrescribiendo algunos marcadores insertados por echo, cuando el archivo de salida es del punto de montaje NFS, y la documentación de NFS dice que O_APPEND no es compatible con el servidor, por lo que el núcleo del cliente tendrá que manejarlo. Supongo que el proceso de conservación está usando O_APPEND, pero no estoy seguro de bash >>
en Linux, por lo tanto, haga la pregunta aquí.
O_APPEND
es que no sea compatible; El problema es que es emulado. En un sistema de archivos local, varios procesos que escriben en el mismo archivo abiertoO_APPEND
nunca sobrescribirán los datos del otro; en NFS,O_APPEND
se emula buscando hasta el final antes de escribir, lo que deja la posibilidad de condiciones de carrera. No hay forma de evitar esto en NFS; cada escritor paralelo necesita escribir su propio archivo. La única forma de evitar esto es configurar un proceso de servidor en el servidor NFS, hacer que los registradores inicien sesión|nc server port
y que el servidor agregue datos entrantes al registro.