По умолчанию bash, а точнее утилита history, не сохраняет в .bash_history
время исполнения каждой команды.Почитал маны и оказалось, что в баше трейтье версии сделать это можно и весьма просто.
Если объявить глобальную переменную HISTTIMEFORMAT с форматом выводимых данных,
то утилита history будет сохранять и выводить эту дату.Итак, пишем в ~/.bashrc строчку
export HISTTIMEFORMAT=’%h %d %H:%M:%S ’
После этого в .bash_history перед каждой командой появится коментарий
с цифрой - временем выполнения этой команды в формате timestamp:#1198068550
history
#1198139874
ьс
#1198139876
mc
#1198148168
ssh teletrade.ru
#1198148217
ssh teletrade.ruА команда history будет выдавать историю данных с датой в формате,
который мы переменной задали (в похожем формате выдают дату и время утилита ls):995 Дек 19 15:49:10 history
996 Дек 20 11:37:54 ьс
997 Дек 20 11:37:56 mc
998 Дек 20 13:55:49 ssh teletrade.ruНо можно сделать и по ГОСТУ, в приятном русскому глазу виде "ДД.ММ.ГГГГ"
export HISTTIMEFORMAT=’%d.%m.%Y %H:%M:%S ’
А можно и на американский манер "YYYY-MM-DD"
export HISTTIMEFORMAT=’%Y-%m-%d %H:%M:%S ’
URL: http://tigro.info/blog/index.php?id=422
Обсуждается: http://www.opennet.me/tips/info/1539.shtml
> на американский манер "YYYY-MM-DD"или "на японский", или "MM-DD-YYYY" :)
спасибо,
полезно
а чем tcsh не подходит? для этого никаких лишних движений делать не надо
А tcsh таки научился делать такое: some-command >log 2>err-log ???
>А tcsh таки научился делать такое: some-command >log 2>err-log ???Если исходить из темы, то вот это, по-моему, вполне схойдет за решение
set history = 100
set savehist = 100и в $HOME будет лежать файлик .history c записями вида
#+1197969179
clean
#+1197969180
l
#+1197969194
chmod 644 *.hЭто не то, что требовалось?
’ замените на одинарную кавычку!
export HISTTIMEFORMAT='%h %d %H:%M:%S ' так правильно!
Исправьте совет и не вводите читателей в заблуждение!
Еще посмотрите на lilalo
http://xgu.ru/wiki/lilaloоно запоминает не только дату но и множество другой информации
А можно в ядре сказать CONFIG_INPUT_EVBUG=y
и до усрачики рыть логи нажатий... (для разбора, парсер написать любой школьник сможет)...
Если исходить из темы, то вот это, по-моему, вполне схойдет за решение
set history = 100
set savehist = 100и в $HOME будет лежать файлик .history c записями вида
#+1197969179
clean
#+1197969180
l
#+1197969194
chmod 644 *.hЭто не то, что требовалось?
начинается очередной писькомер =(
Неа, не это требовалось....
#+1197969194
chmod 644 *.hИЛИ
998 Дек 20 13:55:49 ssh teletrade.ru
Угадай, как понятней???
Для доказательства удобности второго, приставим фильтр:cat /home/vasya_pupkin/.history | grep su
На выходе будут все даты попыток запуска утильки su
Во втором случае, самое быстрое это через egep + sed определить чтоб одна строка начиналась на #+ и следующая за ней уже на то что мы ищем, например su
И наконец, UNIX-тime это для скриптов, а не для людей.
>Неа, не это требовалось....Так допиши код в bash - в чем проблема?
>[оверквотинг удален]
>
>На выходе будут все даты попыток запуска утильки su
>
>Во втором случае, самое быстрое это через egep + sed определить чтоб
>одна строка начиналась на #+ и следующая за ней уже на
>то что мы ищем, например su
>
>И наконец, UNIX-тime это для скриптов, а не для людей.
>
>а написать в три строки perl-скриптик трансляции unix-time to human-read. и наоборот - уже в лом? :)
написание оставляю в качестве домашнего задания :)
кстати, в общем случае сортировать и искать удобнее именно по unix-time. IMHO.
>а написать в три строки perl-скриптик трансляции unix-time to human-read. и наоборот
>- уже в лом? :)Да! %*)
$ date +"%Y-%m-%d %H:%M:%S" -d "@1198139874"
2007-12-20 11:37:54
abm@abm:~$ date +"%s" -d "now"
1198917759
$ _
zsh% history -f
1250 12/30/2007 22:17 ../..
1251 12/30/2007 22:17 cryptmount -u vol06
1252 12/30/2007 22:17 uname -r
1253 12/30/2007 22:17 lll