如何验证文件是否已被复制?

如何验证文件是否已被复制?

有没有办法确保文件已复制到 USB 驱动器?

(例如:我有一个文件 Secret.db,我想我的朋友已将其复制到他的 USB 驱动器中。stat $filename我看不到更新的 a/c/m/time,因为cp没有更新时间戳)。

有没有办法知道或者这是不可能的?

我正在使用带有 Bash v4 的 Ubuntu 12.04。

答案1

TL;DR:在很多情况下,您可以查看文件是否被访问;然而,无法判断是否复制。

看起来atime 将被更新使用时cp(除非noatime有效);但是,执行任何其他读取操作(例如grep somestring $filename)也会触及该文件。

在大多数安装中(没有大量审核),不可能找出为什么确切地读取了文件,以及读取文件的进程是否也在其他地方写入了数据的副本(到 USB?到套接字?到 RAM?)。

此外,这仅涉及在线非特权攻击。如果我有物理访问权限,我可以重新启动到 live-CD 发行版,以只读方式挂载分区,然后复制任何事物关闭它(甚至制作全磁盘映像),并且分区上不会有任何标记(除了增加的安装计数器)。

答案2

我使用 python 脚本解决它,想法是在循环中检查文件大小是否增加,您必须根据需要设置 time.sleep ,在我的例子中只有 0.05 秒来查看文件大小是否增加...当之前的尺寸检查迭代中的尺寸与实际尺寸检查中的尺寸相同时,检查结束...

dict 是字典类型,用 'dict = {}' 初始化

               if not filename in dict:
                #new item...
                time.sleep(0.05)
                dict = {filename: os.stat(fullInFilename).st_size}
                break #next iteration loop, that finds itself again
            else:  # already exists in dict, copying finished?
                time.sleep(0.05)
                sizeRegistrado = dict[filename]
                sizeActual = os.stat(fullInFilename).st_size

                if sizeActual != sizeRegistrado:
                    # still copying...
                    dict[filename] = sizeActual
                    print(sizeActual)
                    break
                else:
                    # Done copying
                    #print("pop!")
                    dict.pop(filename)

相关内容