나는 특정 문자열에 대한 모든 Apache 액세스 로그를 볼 수있는 간단한 유닉스 루틴을 가지고있다. 그것은 악의적 인 장난을 잘 점검하는 데 도움이됩니다. 모든 액세스 로그를 연결 한 다음 문자열에 대한 결과 파일을 grepping하여이 작업을 수행합니다.
몇 년 동안의 로그 파일이 매주 하나씩 있습니다. 나는 최근의 검색을 위해 일들을 빠르게하기 위해 올해로 그들을 분석하고 싶습니다.
이제 access_log.x.gz와 같이 범위를 지정할 수 있습니다. 여기서 x는 1 년 동안 1에서 52까지입니다. 하지만 아파치는 모든 파일 이름을 가장 최근의 파일 이름 옆에 access_log.0.gz로 다시 쓰고, 가장 빠른 파일 이름은 access_log.x.pz (여기서 x는 큰 숫자)를 다시 씁니다. 따라서 x 범위는 날짜 범위와 관련이 없습니다.
주어진 생성 날짜 범위에 걸쳐 파일을 어떻게 연결합니까? 나는 유닉스에서 합리적으로 유능하지만, 이것은 내 머리 위로이다. 예를 들어, 생성 날짜가 2016 인 모든 파일을 연결 만하면됩니다.
find와 같은 것을 할 수는 없습니까? -maxdepth 1 -type f -mtime +365 -a (\! -mtime +730) -print0 | xargs -0 grep -i 'foo'예를 들어 1 년 이상 2 년 미만인 모든 파일을 검색합니까?
—
Roadowl
나는 그것을 사용할 수 있지만 "find."에 구문 오류가 있습니다. -maxdepth 1 -type f -mtime +365 -a (\! -mtime +730) -print0 | xargs -0 grep -i 'foo' "
—
user618
브래킷은 각각의 앞에 bacsklash를 놓아서 도망쳐 야했다. (내 의견에서 제외되었고, excalmation 앞에있는 것이 남아 있었다.) 이 경우 대괄호를 사용하지 않아도되지만 역 슬래시가있는 excl.mark는 중요합니다 (-a mtime의 작업을 취소 함).
—
Roadowl
찾아내는 것과 같은 일을 먼저하면됩니다. -maxdepth 1 -type f -mtime +356 -a \! -mtime +730 -ls
—
Roadowl
아. 넵. 그것은 작동하는 것 같습니다. 내 디렉토리에서 가장 오래된 파일 인 2016 년 1 월에 만들어진 파일을 가져옵니다. 고맙습니다! 나는 내가 원하는 곳으로 나를 데려 갈 것이라고 생각한다.
—
user618