Я ищу командную строку, чтобы получить информацию о том, как часто к определенному файлу / пути обращались с веб-сервера. (источник: журнал доступа по умолчанию от nignx)
Он должен проверить все журналы (текущий и сжатый) и вернуть количество или все записи из файлов журнала с указанным файлом / путем.
Причина: Я хочу очистить старое бизнес-пространство от его мертвых файлов. Многие файлы использовались / использовались много лет назад для внешнего использования. (например, информационные бюллетени, списки). Остальные, похоже, являются дубликатами, которые могут быть использованы только для тестирования старых администраторов.
Дополнительная информация:
ОС: Debian Jessie (x64)
Сервер: nginx / 1.6.2
Расположение: / var / logs / nginx /
Сжатие лог-файлов: gzip
Файлы:
2825674 | myDomainName_access.log
3895051 | myDomainName_access.log.1
106353 | myDomainName_access.log.2.gz
244729 | myDomainName_access.log.3.gz
143118 | myDomainName_access.log.4.gz
55763 | myDomainName_access.log.5.gz
Пример INPUT
Вам нужно зайти в корень вашего domain.tld и ввести следующую команду:
(только очень упрощенный пример)
user@host:/var/www/domain.tld# filesInLogCheck /var/logs/nginx/domain-access.* subfolder/index.php
ВЫВОД
x.x.x.x - - [07/Mar/2016:10:13:29 +0100] "/subfolder/handle.php HTTP/1.1" 200 22 "https://domain.tld/subfolder/index.php" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0"
x.x.x.x - - [07/Mar/2016:10:16:37 +0100] "/subfolder/handle.php HTTP/1.1" 200 104 "https://domain.tld/subfolder/index.php" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0"
x.x.x.x - - [07/Mar/2016:10:21:39 +0100] "GET /subfolder/ HTTP/1.1" 200 12589 "https://domain.tld/subfolder/index.php" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0"
x.x.x.x - - [11/Mar/2016:11:18:36 +0100] "/subfolder/handle.php HTTP/1.1" 200 1206 "https://domain.tld/subfolder/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:45.0) Gecko/20100101 Firefox/45.0"
x.x.x.x - - [11/Mar/2016:11:19:05 +0100] "/subfolder/handle.php HTTP/1.1" 200 129 "https://domain.tld/subfolder/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:45.0) Gecko/20100101 Firefox/45.0"
x.x.x.x - - [11/Mar/2016:11:19:49 +0100] "/subfolder/handle.php HTTP/1.1" 200 120 "https://domain.tld/subfolder/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:45.0) Gecko/20100101 Firefox/45.0"
x.x.x.x - - [11/Mar/2016:11:22:09 +0100] "GET /subfolder/ HTTP/1.1" 200 16008 "https://domain.tld/subfolder/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:45.0) Gecko/20100101 Firefox/45.0"
x.x.x.x - - [11/Mar/2016:11:27:49 +0100] "/subfolder/handle.php HTTP/1.1" 200 468 "https://domain.tld/subfolder/index.php" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:45.0) Gecko/20100101 Firefox/45.0"
x.x.x.x - - [11/Mar/2016:11:28:03 +0100] "GET /subfolder/ HTTP/1.1" 200 16007 "https://domain.tld/subfolder/index.php" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:45.0) Gecko/20100101 Firefox/45.0"
x.x.x.x - - [11/Mar/2016:11:28:24 +0100] "/subfolder/handle.php HTTP/1.1" 200 468 "https://domain.tld/subfolder/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:45.0) Gecko/20100101 Firefox/45.0"
Или более чистый ВЫХОД:
[07/Mar/2016:10:13:29 +0100] | "/subfolder/handle.php" | "https://domain.tld/subfolder/index.php"
[07/Mar/2016:10:16:37 +0100] | "/subfolder/handle.php" | "https://domain.tld/subfolder/index.php"
[07/Mar/2016:10:21:39 +0100] | "GET /subfolder/" | "https://domain.tld/subfolder/index.php"
[11/Mar/2016:11:18:36 +0100] | "/subfolder/handle.php" | "https://domain.tld/subfolder/"
[11/Mar/2016:11:19:05 +0100] | "/subfolder/handle.php" | "https://domain.tld/subfolder/"
[11/Mar/2016:11:19:49 +0100] | "/subfolder/handle.php" | "https://domain.tld/subfolder/"
[11/Mar/2016:11:22:09 +0100] | "GET /subfolder/" | "https://domain.tld/subfolder/"
[11/Mar/2016:11:27:49 +0100] | "/subfolder/handle.php" | "https://domain.tld/subfolder/index.php"
[11/Mar/2016:11:28:03 +0100] | "GET /subfolder/" | "https://domain.tld/subfolder/index.php"
[11/Mar/2016:11:28:24 +0100] | "/subfolder/handle.php" | "https://domain.tld/subfolder/"
Если я правильно вас понял, команда могла быть
$ grep GET access.log | awk '{print $7}' | cut -d '?' -f 1 | sort | uniq -c | sort -r -n -k 1 | head -10
114179 /bitrix/spread.php
13208 /bitrix/tools/public_session.php
11945 /
4393 /accessories/cases/
2268 /search/
2079 /ajax/actions.php
1951 /shop/
1591 /search
1388 /apple-watch/
1267 /apple-iphone/iphone-6s/
команда покажет вам 10 самых посещаемых ссылок. Если вам действительно нужны все ссылки, просто удалите «head -10».
Для файлов gz вы можете использовать следующий
$ zcat access.log.gz | grep GET | awk '{print $7}' | cut -d '?' -f 1 | sort | uniq -c | sort -r -n -k 1 | head -10
И нет ни одной команды, которая завершит вашу задачу в одну строку
Вы ошибаетесь, однострочный сценарий. Конвейеры в bash действительно мощные;)
# zcat -f -- /var/log/httpd/* | grep GET | awk '{print $7}' | cut -d '?' -f 1 | sort | uniq -c | sort -r -n -k 1 | head -10 | awk '{SUM+=$1;print $0} END{print "Total hits: "SUM}'
15249 /sites/all/modules/lightbox2/js/lightbox.js
173 /scripts/template/
128 /libs/bundler.php
125 /libs/jquery.min.js
60 /vSample
Total hits: 15735
Более универсальный скрипт
#!/bin/bash
readonly LOG_DIR='/var/log/nginx'
readonly TOPS=5
readonly METHOD='GET|POST'
/bin/zcat -f -- ${LOG_DIR}/* | grep -E "${METHOD}" | awk '{print $7}' | cut -d '?' -f 1 | sort | uniq -c | sort -r -n -k 1 | head -${TOPS} | awk '{SUM+=$1;print $0} END{print "Total hits: "SUM}'
Результат испытаний
# ./tops.sh
15249 /sites/all/modules/lightbox2/js/lightbox.js
173 /scripts/template/
128 /libs/bundler.php
125 /libs/jquery.min.js
60 /vSample
Total hits: 15735