일일 디렉터리 변경 사항을 추적하고 이메일로 보냅니다.

일일 디렉터리 변경 사항을 추적하고 이메일로 보냅니다.

저는 파일 계층 구조가 매우 깊은 Debian 기반 NAS 서버(ReadyNAS)를 가지고 있습니다. 일부 디렉토리와 하위 디렉토리에서 발생하는 변경 사항에 대해 매일 알림을 받고 싶습니다.

따라서 누군가가 낮에 실수로 파일을 삭제한 경우 저녁에 이메일 알림(모든 변경 사항 요약 포함)을 받고 다음날 아침 백업에서 파일을 복원합니다.

처음에는 디렉토리를 재귀적으로 검색하기 위해 PHP CL 또는 Python 스크립트를 작성하는 것에 대해 생각했지만 더 나은 작업을 수행할 수 있는 멋진 유닉스 도구가 있을 것이라고 생각했습니다. dirmp와 같은 것 :)

당신은 무엇을 할 것인가?

감사해요

답변1

달리기인계철선야간근무로.

또는 전체 시스템을 버전 제어에 두십시오. 버전 제어 도구의 diff명령을 실행하여 변경 사항을 확인하고 해당 되돌리기 명령(이름에 관계없이)을 실행하여 로컬 복사본의 변경 사항을 되돌립니다. 대부분의 버전 제어 시스템은 파일 콘텐츠를 처리하지만 메타데이터(예: 권한)에 대한 추가 작업이 필요합니다.

또는 LVM 또는 가상 머신과 같은 특정 형태의 스냅샷을 지원하는 스토리지 시스템을 사용하십시오.

아니면 처음부터 모든 변경 사항을 차단하는 것은 어떨까요?

답변2

다음과 같은 작업(테스트되지 않음, 죄송합니다)을 수행하는 스크립트를 작성하여 crontab에 넣을 수 있습니다.

#!/bin/bash

# whom to mail
mailto="[email protected]"

# what directory to look in
dir="/somewhere/else"

# make the directory safer to embed in filenames
dirname=$(echo $dir | tr "/" "-" | tail -c +2)

# today's date, add hours & minutes if you want to run it more often
today=$(date +"%Y%m%d")

# yesterday's date
yesterday=$(date -d -1day +"%Y%m%d")

# filenames
todayfile=$dirname-$today.files.bz2
yesterdayfile=$dirname-$yesterday.files.bz2

# the business. Use find -printf if you want to capture additional metadata.
find $dir |sort |bzip2 > $todayfile

if [ -r $yesterdayfile ]; then
    bzdiff $yesterdayfile $todayfile | mail $mailto -s "Directory differences for $dir from $yesterday to $today" 
else
    echo "No file listing from $yesterday, can't produce report | mail $mailto -s "Unable to report directory differences for $dir, no report from $yesterday"
fi 

아니면 그냥 할 수도 있어요내 제품을 사용해 보세요이것은 이런 종류의 일을 매우 쉽게 만듭니다. :)

[이런 상품은 이제 없습니다. 죄송합니다]

답변3

BTRFS를 사용하면 변경된 모든 파일이 "저장"되는 라이브 스냅샷 파일 시스템을 설치할 수 있습니다.

관련 정보