일반적으로 편집기는 파일을 저장할 때 삭제하거나 0으로 자르므로 할당 된 공간을 비운 다음 쓰기를 수행하여 새 공간을 할당합니다. 결과적으로 파일 시스템은 데이터를 완전히 다른 물리적 위치에 둡니다. 따라서 귀하의 아이디어가 효과가 없을 수 있습니다.
당신은 사용하여 파일의 물리적 위치를 얻을 수 있습니다 filefrag
또는 hdparm --fibmap
다음 사용할 dd
직접 물리적 위치를 읽을 수 있습니다. /unix//a/85880/30851 에서 다른 프로세스 로이 프로세스를 설명했습니다.
귀하의 경우 텍스트 데이터를 찾는 일반적인 방법이 필요할 가능성이 더 큽니다.
strings -n 12 -t d /dev/partition | grep -F 'text snippet'
strings
연속 ASCII 데이터를 찾습니다 (UTF에 대해서는 잘 모르지만 다른 인코딩도 지원합니다. 코드 또는 영어 인 경우 필요하지 않음). 또한 찾은 오프셋을 인쇄합니다.
text snippet
찾고있는 파일 부분에 [한 줄로] 기억하고있는 정확하고 고유 한 텍스트 샘플이어야합니다. (정확히 모른다면, 대신 정규 표현식으로 grep 할 수 있습니다.)
-n 12
strings
찾을 최소 길이입니다 . 12
의 길이 여야합니다 text snippet
. 이 매개 변수는 선택 사항입니다 (제공된 경우 strings | grep
조금 더 빨리 진행하는 데 도움 이 될 수 있음) .
전체 파티션을 읽는 데 시간이 오래 걸리지 만 성공 dd
하면 일반 영역을 잡고 공급 하지 않는 항목을 제거 할 수있는 오프셋이 생깁니다.
나는 그 디렉토리에서 아무것도하지 않았다.
만약 당신의 디렉토리가 마운트 포인트가되지 않는다면 ... 대부분의 파일 시스템은 실제로 "디렉토리마다"공간을 예약하지 않기 때문에 전체 파일 시스템의 모든 쓰기는 당신이 찾고있는 비트를 덮어 쓸 수 있습니다. 데이터 복구 상황에서는 일반적으로 전체 항목을 읽기 전용 모드로 전환합니다.
strings
당신은 매우 운이 아니라면 단지 파일의 일부를 찾습니다.