時間範囲ファイルAとファイルBのファイルを検索する

時間範囲ファイルAとファイルBのファイルを検索する

私は時間とフォルダ名として入力を受け取るスクリプトに取り組んでいます。ユーザーが入力した時間範囲内にあるファイル (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 アクティブ脅威インテリジェンス 評判の悪い IP TCP グループ 41 [分類: その他の攻撃] [優先度: 2] {TCP} 
02/15-22:22:03.335107 [1:2403408:38412] ET CINS アクティブ脅威インテリジェンス 評判の悪い IP TCP グループ 55 [分類: その他の攻撃] [優先度: 2] {TCP} 
02/15-22:22:03.335107   [1:2403408:38412] ET CINS アクティブ脅威インテリジェンス 評判の悪い 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(に変更します。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 *
    

    長いログ ファイルが多数ある場合は、これをfindand/orと組み合わせてparallel高速化することができます。例:

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

関連情報