tac/grep Решение
tac file | grep whatever
Или немного более эффективное:
grep whatever < <(tac file)
Время с файлом 500МБ:
real 0m1.225s
user 0m1.164s
sys 0m0.516s
sed/grep Решение:
sed '1!G;h;$!d' | grep whatever
Время с файлом 500МБ: Прервано через 10+ минут.
awk/grep Решение:
awk '{x[NR]=$0}END{while (NR) print x[NR--]}' file | grep whatever
Время с файлом 500 МБ:
real 0m5.626s
user 0m4.964s
sys 0m1.420s
perl/grep Решение:
perl -e 'print reverse <>' file | grep whatever
Время с файлом 500 МБ:
real 0m3.551s
user 0m3.104s
sys 0m1.036s
Не совсем то, что вы ищете, но я видел OTPW, используемый для таких сценариев. Это полный пакет, который интегрируется с системой Linux через модули PAM.
excerpt
Пакет OTPW состоит из генератора одноразовых паролей
otpw-gen
плюс две процедуры верификацииotpw_prepare()
иotpw_verify()
, которые могут быть легко добавлены в такие программы, какlogin
илиftpd
на POSIX-системах. Для платформ, поддерживающих интерфейс Pluggable Authentication Method (PAM), также включена соответствующая обёртка. Программное обеспечение для входа, расширенное таким образом, позволит достаточно безопасно выполнять аутентификацию пользователя по незащищенным сетевым линиям. Пользователь несет список паролей на бумаге. Схема предназначена для защиты от кражи списка на бумаге и атак типа "гонка за последней буквой". Криптографические хэш-значения одноразовых паролей хранятся для проверки в домашнем каталоге пользователя.
В вашем случае вы захотите следовать инструкциям на этой странице, подробно описывающим установку PAM.
excerpt
Если ваша система поддерживает подключаемые модули аутентификации [Mor01,XSSO], то просто скомпилируйте разделяемую библиотеку
pam_otpw.so
и скопируйте её в каталог, в котором находятся другие модули PAM (обычно под Linux/lib/security/
). Затем отредактируйте файл конфигурации PAM для приложения, в котором вы хотите использовать OTPW, как описано в вашем Руководстве системного администратора PAM. Файлpam_otpw.so
предоставляет и аутентификацию, и компонент сеанса. Компонент аутентификации запрашивает и проверяет одноразовый пароль, компонент сеанса печатает после каждого успешного входа в систему напоминание о том, сколько неиспользованных паролей у вас осталось.Чтобы использовать оба компонента при входе в систему через защищенную оболочку, вам, возможно, придется добавить в
/etc/pam.d/sshd
строкиauth, требуемые pam_otpw.so сессия опционально pam_otpw.so
Например, в OpenSSH 3.4 вы должны убедиться, что ваша версия скомпилирована с поддержкой PAM, а в
/etc/ssh/sshd_config
добавить строкиUsePrivilegeSeparation no ПАМАутентификацияВиаКбдИнте да
Чтобы заставить OpenSSH использовать аутентификацию PAM (вместо собственных методов на основе хоста или публичного ключа, которые он обычно пытается использовать в первую очередь), используйте
'ssh -o PreferredAuthentications=keyboard-interactive"
.