Возможно, я не в себе, но это выглядит просто, если вы просто хотите посчитать.
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...
ОП отметил в другом сообщении, что это сработало для него. Это также взято из решения msp9011, так что отдаю должное.
cat access.log | awk '{a[$1]++} END {for(i in a) print a[i],i}' |sort -nr
ОП хотела бы, чтобы решение печатало строки с более чем 100 запросами. Думаю, это можно сделать одним awk-выражением, но я сделаю это методом грубой силы:
cat access.log | awk '{a[$1]++} END {for(i in a) print a[i],i}' |awk '$1>100' | sort -nr
Возможно, вы могли бы установить имя пользователя с помощью переменной и вернуться к значению по умолчанию:
myssh() {
ssh -o "User=${user:-somebody}" "$@"
}
И использовать так:
myssh server # use default user
user=root myssh -v server # use root as the username
Не используйте псевдоним, просто настройте свой ssh-клиент. Отредактируйте (или создайте, если его нет)~/.ssh/config
и добавьте эти строки:
Host rootServer
HostName server_to_connect_to
User root
Host userServer
HostName server_to_connect_to
User somebody
Сохраните файл, и теперь вы можете запустить ssh rootServer
для подключения как root
и ssh userServer
для подключения как somebody
.
Я могу создать временный файл и передать его в ssh
в качестве конфигурации с -F
с добавленным к нему Host * User somebody
.
myssh() {
(
# in a subshell, so that `trap` will not affect parent
local tmp
tmp=$(mktemp --tmpdir.cis-ssh-config.XXXXXXXXXXX)
trap 'rm "$tmp"' exit
{
printf "%s\n" "Host *" " User somebody"
# silence errors, if the files doesn't exists
cat /etc/ssh/ssh_config ~/.ssh/config 2>/dev/null ||true
} > "$tmp"
ssh -F "$tmp" "$@"
)
}