Зачем изобретать колесо, если fail2ban уже может сделать то, что вы хотите (и многое другое)?
С помощью fail2ban
вы можете создать пользовательское правило, которое будет соответствовать любому запросу к данному веб-сайту (или всем размещенным веб-сайтам), и установить maxretry
для этого правила на 2000.
Вы также можете установить bantime
для этого правила на любое значение (например, bantime=86400
для блокировки этого IP на день).
По умолчанию, он также будет записывать каждое действие блокировки и разблокировки, например, в /var/log/fail2ban.log
.
BTW, Возможно, вы захотите переосмыслить свою цель. 2000 запросов с одного IP - это не так уж много, особенно если каждая "страница", которую вы обслуживаете, содержит множество изображений, css файлов, javascript файлов и т.д. Или если этот IP-адрес является прокси (например, работает squid
) для десятков или сотен машин в школьной или корпоративной сети. или для интернет-провайдера.
Завершение вкладки Bash должно работать правильно, если вы просто наберете mv 90843_O
и нажмете вкладку. В противном случае существует один способ правильно избежать имени:
mv "90843_O\\\\'ConnorPaul_GeneralManager.jpg" dest.jpg
Двойные кавычки устраняют необходимость экранировать '
, но два символа обратной косой черты все равно необходимо экранировать (одна дополнительная обратная косая черта для каждого из них дает четыре обратных косой черты. ). Другой вариант:
mv '90843_O\\'\'ConnorPaul_GeneralManager.jpg dest.jpg
Здесь установка обратной косой черты в одинарные кавычки устраняет необходимость их экранирования, но вам нужно закончить одинарные кавычки, чтобы добавить литерал '
. Это экранируется после окончания кавычек.
Обратите внимание, что проблема здесь как в использовании обратной косой черты в имени, так и в одинарной кавычке. Чтобы заменить последовательность \\ '
(поскольку в имени файла в вопросе есть две обратные косые черты, оба вызовут проблемы) на подчеркивание для всех файлов в каталоге с помощью цикла:
for file in *"\\\\'"*; do
mv -i "$file" "${file//"\\\\'"/_}"
done
-i
заставит mv
запросить, если какие-либо файлы будут перезаписаны. Использование prename
( переименовать
ссылки на это во многих системах):
prename -n 's:\\\\'\'':_:g' *"\\\\'"*
Удалите -n
, когда вы счастливы, что он делает то, что вы хотите. Обратите внимание, что символы обратной косой черты должны быть экранированы внутри выражения perl, даже если они заключены в одинарные кавычки (без одинарных кавычек вам понадобится восемь обратных косых черт, поскольку четыре будут удалены оболочкой и не будут частью выражения perl).
Вы можете использовать переименовать
для таких задач:
➜ lab ls
1dsfa.file 6033dsfa.file 90843_O\\'ConnorPaul_GeneralManager.jpg
56dsfa.file 90843_O\'ConnorPaul_GeneralManager.jpg
➜ lab rename "s/\'//g" *
➜ lab ls
1dsfa.file 6033dsfa.file 90843_O\ConnorPaul_GeneralManager.jpg
56dsfa.file 90843_O\\ConnorPaul_GeneralManager.jpg
Если вы хотите заменить '
на _
вы также можете использовать переименование:
rename "s/\'/_/g" *
Гррр, @Graeme меня опередил, но я все равно отправлю сообщение ...
Если вы процитируете имя файла в двойных кавычках, например mv -v "90843_O'ConnorPaul_GeneralManager.jpg" 90843_O_ConnorPaul_GeneralManager.jpg
, это поможет; использование -v
необязательно, но оно расскажет, что он сделал. Я считаю, что есть и второй способ, кроме избавления от всех символов, - если - это даже возможно. Единственный известный мне недостаток этого способа заключается в том, что оболочка будет обрабатывать текст, поскольку он не заключен в одинарные кавычки, но он вообще не управляет им, поскольку это не внутренний код, и дополнительное время, необходимое для обработки, бессмысленно.
Только что протестировано, у вас может быть символ типа >
в тексте, заключенном в двойные кавычки, и он будет считаться частью имени файла.
В качестве совета на будущее, вы можете использовать ./
прямо перед именем файла, если это вызывает проблемы, например файлы, начинающиеся с тире: mv ./-file file
будет переименуйте -файл
в файл
. В таком случае вы не можете цитировать или экранировать имя файла в виде исключения.
Как ни странно, я мог бы создать файл 90843_O'ConnorPaul_GeneralManager.jpg
, если бы я экранировал одинарную кавычку \ '
, но он бы не создал его, если бы это не было либо в двойных кавычках, либо с экранированием.
PS: Завершение Bash - это еще один способ, он работал с проблемой имени файла с вашим файлом, но он не работает с файлами / папками "тире": просто напишите часть имени и нажмите Tab, все остальное сделает сам. .