시간 범위가 fileA 및 fileB인 파일 찾기

시간 범위가 fileA 및 fileB인 파일 찾기

시간과 폴더 이름으로 입력을 받는 스크립트를 작업 중입니다. 사용자가 입력한 해당 시간 범위에 해당하는 파일(snort.log.*)을 찾아야 합니다. 경고 파일은 굵은 글씨로 표시됩니다. 타임스탬프를 입력하고 실제 snort.log에 해당 시간을 입력합니다. 공격 세부 정보가 포함된** 파일과 메타데이터만 포함된 경고 파일) 여기에 디렉터리 샘플이 있습니다.

[jump1@widids01 snort-3]# ls -ltr | 꼬리 -6
-rwxr-x--- 1 snort snort 301731 2월 2일 18:18 snort.log.1517557015
-rwxr-x--- 1 snort snort 5720853 2월 5일 21:11 snort.log.1517563475
-rwxr-x--- 1 snort snort 3566073 2월 7일 16:00 snort.log.1517832965
-rwxr-x--- 1 snort snort 18999 2월 7일 20:46 snort.log.1518003111
-rwxr-x--- 1 snort snort 20705098 2월 15일 19:00 snort.log.1518004113
-rw--------- 1 snort snort 357271 2월 15일 22:22 snort.log.1518688923
-rwxr-x--- 1 snort snort 50782147 2월 15일 22:22 경고
[jump1@widids01 snort-3]# 꼬리 -3 경고
02/15-18:22:02.204655   [1:2403380:38412] ET CINS Active Threat Intelligence 평판이 좋지 않은 IP TCP 그룹 41 [분류: 기타 공격] [우선순위: 2] {TCP} 
02/15-22:22:03.335107 [1:2403408:38412] ET CINS Active Threat Intelligence 평판이 좋지 않음 IP TCP 그룹 55 [분류: 기타 공격] [우선순위: 2] {TCP} 
02/15-22:22:03.335107   [1:2403408:38412] ET CINS Active Threat Intelligence 평판이 좋지 않은 IP TCP 그룹 55 [분류: 기타 공격] [우선순위: 2] {TCP}

여기서 문제에 직면하고 있습니다. snort.log.[epoch][epoch], 파일 생성 시간이므로 사용자가 입력하면

테스트케이스1:

time:2015-02-15-22:28:02 

snort.log.file공격 데이터에 포함된 위치에 대한 매칭을 제공하는 방법

테스트케이스2:

time:2015-02-15-18:22:02

snort.log.file공격 데이터에 포함된 위치에 대한 매칭을 제공하는 방법

나는 find . -newermt "2018-02-15 18:38:00" ! -newermt "2018-02-15 18:39:00"적절한 출력을 얻지 못했습니다.

답변1

다음과 같은 입력이 있다고 가정합니다.

time="time:2015-02-15-18:22:02"

그런 다음 이를 Unix 타임스탬프(에포크 이후 초)로 변환하고 다음을 사용하여 변수에 저장할 수 있습니다 timestamp.

time=$(date -d$(<<<"$time" sed 's/time:\(.*\)-/\1T/') +%s)

여기서는 sed접두사를 제거 time:하고 날짜와 시간 사이의 콜론을 T(ISO 8601)은 date그런 다음 타임스탬프를 에포크 이후의 초로 변환하는 데 사용됩니다.

find이 타임스탬프가 나타내는 내용에 따라 로그 파일 이름을 출력하는 데 사용할 수 있습니다 .

  • 파일 이름에 이미 타임스탬프가 포함되어 있으면 snort.log.$time직접 사용할 수 있습니다.

  • 파일 수정 시간인 경우:

    find . -type f -name "*snort.log.*" -newermt @$(($time-1)) ! -newermt @$time
    

    time수정 시간이 - 1초 에서 . 사이인 모든 로그 파일을 찾습니다 time.

  • 주어진 타임스탬프 이후 가장 오래된 로그 파일을 찾아야 하는 경우 sort다음을 사용할 수 있습니다 head.

    find . -type f -name "*snort.log.*" -newermt @$(($time-1)) -print0 | sort -z | head -zn1
    
  • (어떤 방식으로든) 로그 파일을 찾아야 하는 경우포함주어진 타임스탬프를 사용하려면 다음을 사용하세요 grep.

    grep -l $time *
    

    긴 로그 파일이 많으면 이것을 find및/또는 parallel더 빠르게 만들기 위해 결합할 수 있습니다. 예:

    find . -type f -name "*snort.log.*" -newermt @$(($time-1)) -exec grep -l $time {} +
    

관련 정보