파일에 서로 다른 IP가 몇 번이나 있는지 계산해야 합니다.
grep
그냥 사용할 권한이 없기 때문에 이것을 사용하여 파일을 엽니다.grep
내 권리
User lotarc may run the following commands on herbert:
(root) /bin/su - censored
(root) /bin/su - censored
(root) /bin/cat /var/log/nginx/access.log, /bin/cat /var/log/nginx/access.log.1, /bin/zcat /var/log/nginx/access.log.[0-9]*.gz, /bin/cat /var/log/nginx/error.log, /bin/cat /var/log/nginx/error.log.1, /bin/zcat
/var/log/nginx/error.log.[0-9]*.gz
sudo cat /var/log/nginx/access.log.1 | grep -E '1ip|2ip|3ip'
내 질문은 이 IP를 계산하고 출력을 얻는 방법입니다. 여러 파일(예: access.log.2.gz)에서 개수를 계산해야 합니다.
문서 내용
some ip - - [30/Sep/2019:07:26:03 +0300] "POST /clientapp/request/signUp HTTP/1.1" 200 0 "-" "python-requests/2.22.0" "-"
답변1
이 시도,
cat access_log | awk '{a[$1]++} END {for(i in a) print a[i],i}' | sort -n | tail -n1
특정 IP의 경우:
cat access_log | awk '$1 == "192.168.1.37" || $1 == "192.168.1.110" {a[$1]++} END {for(i in a) print a[i],i}'
답변2
내가 조금 미쳤을 수도 있지만, 숫자를 세고 싶다면 이 정도로 간단해 보입니다.
awk '{print $1}' access.log |uniq |wc -l
그러면 단일 파일의 개수가 출력됩니다. 모두 원한다면 모두 zgrep하고 끔찍한 IP 주소 정규식을 사용할 수 있습니다.
zgrep '\(25[0-5]\|2[0-4][0-9]\|[01][0-9][0-9]\|[0-9][0-9]\)\.\(25[0-5]\|2[0-4][0-9]\|[01][0-9][0-9]\|[0-9][0-9]\)\.\(25[0-5]\|2[0-4][0-9]\|[01][0-9][0-9]\|[0-9][0-9]\)\.\(25[0-5]\|2[0-4][0-9]\|[01][0-9][0-9]\|[0-9][0-9]\)' access.log.*.gz | awk '{print $1}' | uniq |wc -l
물론 똑똑한 사람들이 더 쉬운 방법을 제공할 수 있을 거라 확신합니다. 하지만 아직은 아직 이르기 때문에 이 솔루션을 제안해 드리고자 합니다. nginx를 실행하는 웹서버에서 테스트되었으며 50개 이상의 로그 파일에서 작동했습니다.
OP에 따르면 zgrep이 없으면 먼저 gzip을 통해 로그 파일을 실행할 수 있습니다.
OP는 다른 메시지에서 이것이 그에게 효과가 있었다고 언급했습니다. 이것은 또한 msp9011 솔루션에서 가져온 것이므로 이를 인정하십시오.
cat access.log | awk '{a[$1]++} END {for(i in a) print a[i],i}' |sort -nr
OP는 요청된 라인을 100개 이상 인쇄할 수 있는 솔루션을 기대하고 있습니다. 나는 이것이 awk 문으로 이루어질 수 있다고 생각하지만, 나는 그것을 무차별 방식으로 할 것이다:
cat access.log | awk '{a[$1]++} END {for(i in a) print a[i],i}' |awk '$1>100' | sort -nr