读取/复制附加到的文件有多安全?

时间:2017-09-19 09:49:56

标签: linux

如果日志文件中不断附加事件,那么用另一个进程读取该文件(或复制它)的安全性有多大?

1 个答案:

答案 0 :(得分:3)

Unix允许并发读写。读取文件而其他人附加文件是完全安全的。

当然,当阅读行为到达文件末尾时,附加行为未完成,然后此阅读器将获得不完整版本(例如,文件末尾只有新日志条目的一部分) )。但从技术上讲,这是正确的,因为文件在读取时确实处于这种状态(例如复制)。

修改

还有更多内容。

如果编写者进程具有打开的文件句柄,只要此进程保留打开的文件句柄,该文件就会保留在磁盘上。

如果删除文件(rm(1)unlink(2)),它将仅从其目录中删除。它将保留在磁盘上,并且该编写器(以及恰好具有打开文件句柄的所有其他人)仍将能够读取已删除文件的内容。只有在最后一个进程关闭其文件句柄后,才会在磁盘上释放文件内容。

如果进程写入填满磁盘的大型日志文件,则有时会出现问题。如果它保留并打开日志文件的文件句柄,则系统管理员无法使用rm释放此磁盘容量。  一种典型的方法是杀死该过程。因此,作为一个过程,在写入日志后再次关闭日志文件的文件句柄是一个好主意(或者至少不时地关闭并重新打开它)。

还有更多:

如果进程在日志文件上有一个打开的文件句柄,则此文件句柄包含一个位置。如果现在日志文件已清空(truncate(1)truncate(2)open(2)以便不使用追加标记: > filepath),则文件的内容确实已从磁盘中删除。如果具有打开文件句柄的进程正在写入此文件,则它将在旧位置写入,例如: G。在几兆字节的位置。对空文件执行此操作将使用零填充空白。

如果可以创建稀疏文件(通常可以在Unix文件系统上使用),这不是真正的问题。否则它将再次快速填满磁盘。但无论如何,它可能会非常令人困惑。