파일이 복사되었는지 확인하는 방법은 무엇입니까?

파일이 복사되었는지 확인하는 방법은 무엇입니까?

파일이 USB 드라이브에 복사되었는지 확인하는 방법이 있습니까?

(예: 내 친구가 자신의 USB 드라이브에 복사한 것으로 생각되는 Secret.db 파일이 있습니다. 업데이트된 타임스탬프가 없기 stat $filename때문에 업데이트된 a/c/m/time을 볼 수 없습니다 .)cp

알 수 있는 방법이 있나요, 아니면 불가능한가요?

Bash v4와 함께 Ubuntu 12.04를 사용하고 있습니다.

답변1

요약: 많은 경우 파일에 액세스했는지 확인할 수 있지만 복사되었는지 알 수 있는 방법은 없습니다.

것 같다atime 업데이트됩니다그러나 사용 시 cp( noatime유효하지 않은 경우) 다른 읽기 작업(예: grep somestring $filename)을 수행해도 파일이 손상됩니다.

대부분의 설치에서는(광범위한 감사 없이) 알아내는 것이 불가능합니다.정확히 어떤 파일을 읽었는지, 파일을 읽는 프로세스가 데이터 복사본을 다른 곳에(USB, 소켓, RAM으로?) 기록했습니까?

또한 이는 권한이 없는 온라인 공격에만 적용됩니다. 물리적으로 액세스할 수 있는 경우 라이브 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)

관련 정보