我正在尝试编写一个脚本或一段代码来归档文件,但我不想归档当前打开的任何内容。我需要找到一种方法来确定目录中的哪些文件已打开。我想使用 Perl 或 shell 脚本,但如果需要的话可以尝试使用其他语言。它将在 Linux 环境中,我无法选择使用 lsof。我的定影器也得到了不一致的结果。感谢您的帮助。
我正在尝试获取目录中的日志文件并将它们移动到另一个目录。但是,如果文件已打开,我不想对它们执行任何操作。
最佳答案
您处理问题的方式不正确。您希望在阅读时防止文件在您的下面被修改,并且如果没有操作系统支持就无法做到这一点。在多用户系统中,您所能期望的最好的结果就是保持存档元数据的一致性。
例如,如果您要创建存档目录,请确保存档中存储的字节数与该目录匹配。您可以在读取文件系统之前和之后对文件内容进行校验和,并将其与写入存档的内容进行比较,并可能将其标记为“不一致”。
你想实现什么目标?
添加以回复评论:
查看 logrotate
来窃取有关如何一致处理此问题的想法,只需让它为您完成工作即可。如果您担心文件重命名会使当前正在写入文件的进程破坏某些内容,请查看 man 2 rename
:
rename() renames a file, moving it between directories if required. Any other hard links to the file (as created using link(2)) are unaffected. Open file descriptors for oldpath are also unaffected.
If newpath already exists it will be atomically replaced (subject to a few conditions; see ERRORS below), so that there is no point at which another process attempting to access newpath will find it missing.
关于linux - 如何知道用户当前打开了哪些文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6190200/