필요한 정보를 기록하지 않는 프로그램을 디버깅하려고 합니다. 다행히 해당 정보를 포함해야 하는 임시 파일을 작성합니다. 파일은 program/temp/{someGUID}
10개 머신 중 하나 의 디렉터리에 기록됩니다 . {someGUID}
컴퓨터를 실행하기 전에는 컴퓨터나 임시 파일이 포함될 컴퓨터를 알 수 없습니다. 실행이 완료되면 임시 파일이 삭제됩니다. 처음부터 끝까지의 시간은 사람이 개입하기에는 너무 빠릅니다.
클라이언트 프로그램을 통해 실행을 시작하는데, 파일을 쓰는 것은 서버입니다. 서버 프로그램을 조작할 수도 없고 일단 실행되기 시작하면 멈출 수도 없습니다. 임시 파일에 쓸 수 있는 모든 컴퓨터에 대한 루트 액세스 권한이 있습니다. 저는 CentOS 6을 사용하고 있습니다.
서버 사용자가 임시 디렉터리에 파일을 쓸 수 있지만 삭제할 수는 없도록 하는 방법이 있습니까? 실행이 중단될 수도 있지만 필요한 정보를 제공할 것입니다. 임시 폴더 내용을 쓴 직후/삭제하기 전에 복사할 수 있는 방법이 있나요? 삭제된 파일을 복구하려면 프로그램을 설치해야 하나요?
답변1
프로그램에서 액세스하는 파일 나열프로그램 파일 액세스를 기록하는 여러 가지 방법( strace
, LD_PRELOAD
LoggedFS , Audit )이 언급되어 있지만 파일 내용을 가져오는 편리한 방법은 없습니다.
모든 프로그램 출력을 저장하는 편리한 방법은 다음과 같습니다.파일 복사. CopyFS는 해당 디렉터리 트리에 존재했던 모든 파일의 모든 이전 버전을 보존하는 디렉터리 트리 보기를 만듭니다. 이를 사용하기 위해 루트 액세스가 필요하지 않습니다. 임시 파일이 포함된 디렉터리를 마운트합니다.
mkdir versions
copyfs-mount $PWD/versions $PWD/program/temp
program_to_debug
fusermount -u program/temp
ls versions