Ответы @derobert охватывают несколько различных вариантов. В итоге я использовал что-то вроде его нет. 3, но я расскажу об этом подробнее.
В соответствии с подходом, описанным в Перемещение логического тома из одной группы томов в другую , я скопировал несколько логических томов, содержащих существующую систему Debian 9, используя BIOS, на несколько новых дисков, которые я купил. Я также сделал новую, с нуля, установку UEFI Debian 9 на эти диски.
Тогда проблема заключалась в том, как получить копию моей системы на этих дисках для загрузки. Так получилось, что я смог использовать загрузочное меню GRUB из новой/из -нуля/установки UEFI. Когда я нажал e
в пункте меню GRUB для новой установки, я смог изменить имена устройств в сценарии GRUB на имена скопированных LV, используя форму (lvm/debian-root)
, где debian
— имя устройства. группа томов, а root
— имя логического тома. Таким образом, я смог загрузить копию моей существующей системы.
Тем не менее, мне все же пришлось сделать систему загрузочной. С некоторой помощью @debrobert я сделал следующее:
grub-pc
наgrub-efi
/boot/efi
. Ран
grub-install --efi-directory=/boot/efi --bootloader-id=origdebian --force-extra-removable
Это сделало две вещи.
Он установил исполняемый файл EFI grubx64.efi
в каталог /boot/efi/EFI/origdebian
. В новой установке уже был исполняемый файл grubx64.efi
в каталоге /boot/efi/EFI/debian
.
Микропрограмма EFI смогла увидеть запись origdebian
в загрузочное меню прошивки.
Он установил исполняемый файл EFI BOOTX64.EFI
в каталог /boot/efi/EFI/BOOT
. Это так называемый -«путь съемного носителя». Как описано в Debian Wiki ,
All firmware implentations have to use this path to be able to run an OS installer.
Таким образом, этот путь предназначен для использования в качестве временного запасного варианта. После того, как система загрузится, ее можно удалить.
Попробуйте это,
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}'
Возможно, я не в себе, но это выглядит просто, если вы просто хотите посчитать.
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