有没有办法确保文件已复制到 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)