2013-07-02 2 views
0

Ранее я написал сценарий, который записывал мои ранее посещаемые каталоги в sqlite3 db. Я написал несколько ярлыков для быстрого поиска и навигации по истории. Теперь я собираюсь сделать то же самое с моими командами bash.Ведение журнала bash-history в базе данных

Когда я выполняю команду в bash, как мне получить имя команды? Должен ли я изменить часть исходного кода bash, ответственную за запись истории bash? Как только у меня есть база данных моей истории команд, я могу сделать в ней интеллектуальный поиск.

+1

Не совсем уверен, чего больше вы хотите, чем встроенная история bash, но если вы действительно этого хотите, переключитесь на zsh, и у вас может быть гораздо больше мощности и контроля. – Kevin

ответ

2

Bash уже записывает все ваши команды в ~/.bash_history, который является текстовым файлом.

Вы просматриваете содержимое стрелкой вверх/вниз или выполняете поиск по нему, нажимая control-r.

+0

Автор оригинального вопроса отметил, что. – daveloyall

1

Взгляните на fc:

FC: FC [-e ENAME] [-lnr] [первая] [последняя] или Ь -s [погладить = респ] [команда] Display или выполнить команд из списка истории.

fc is used to list or edit and re-execute commands from the history list. 
FIRST and LAST can be numbers specifying the range, or FIRST can be a 
string, which means the most recent command beginning with that 
string. 

Options: 
    -e ENAME select which editor to use. Default is FCEDIT, then EDITOR, 
     then vi 
    -l list lines instead of editing 
    -n omit line numbers when listing 
    -r reverse the order of the lines (newest listed first) 

With the `fc -s [pat=rep ...] [command]' format, COMMAND is 
re-executed after the substitution OLD=NEW is performed. 

A useful alias to use with this is r='fc -s', so that typing `r cc' 
runs the last command beginning with `cc' and typing `r' re-executes 
the last command. 

Exit Status: 
Returns success or status of executed command; non-zero if an error occurs. 

Вы можете вызвать его, чтобы получить текст, чтобы вставить в таблицу, но зачем, если он уже спасен баш?

0

Для того, чтобы получить полную историю либо использовать команду истории и обрабатывать ее вывод:

$ history > history.log 

или промыть историю (как это в настоящее время хранится в памяти с помощью BASH) с помощью:

$ history -a 

, а затем обрабатывать ~/.bash_history

1

Извините, что пришел к этому вопросу так поздно!

Я, как правило, запускаю много оболочек, где я работаю, и, как результат, долгая история раковины будет запутаться или потеряться все время. В конце концов я так надоел, я начал ведение журнала в базу данных :)

Я не отработанная интеграции полностью, но здесь моя установку:

  1. Рекомпилированного Баш с SYSLOG включены. Начиная с версии bash 4.1 этот код все на месте, он просто должен быть включен в config-top.h, я считаю.
  2. Установите новый bash и настройте клиента syslog для регистрации сообщений user.info
  3. Установите rsyslog и rsyslog-pgsql плагин, а также postgresql. У меня было несколько проблем с установкой этой установки на тестирование debian PM me, если у вас возникли проблемы или спросите здесь :)
  4. Настройте пользовательские сообщения для подачи в базу данных.

В конце всего этого все ваши команды должны быть зарегистрированы в базе данных под названием systemevents.Вы, безусловно, хотите создать индексы на пару полей, если вы используете оболочку регулярно, как запросы могут начать принимать навсегда :)

Вот несколько индексов я установить:

Индексы: "systemevents_pkey" первичный ключ, ВТКЕЙ (ID) "systemevents_devicereportedtime_idx" ВТКЕЙ (devicereportedtime) "systemevents_fromhost_idx" хэш (fromhost) "systemevents_priority_idx" ВТКЕЙ (приоритет) "systemevents_receivedat_idx" ВТКЕЙ (receivedat)

fromhost, receivedat , и devi Времени особенно полезно!

Из-за короткого времени, которое я использовал, это действительно потрясающе. Он позволяет мне находить команды на любых серверах, которые были недавно! Никогда не теряйте команду еще раз! Также вы можете сопоставить его с простоями/другими проблемами, если у вас несколько пользователей.

Я планирую написать свой собственный плагин rsyslog, чтобы сделать формат истории в базе данных более удобным. Я обновляю, когда я это сделаю :)

Удачи вам!

1

Вы можете использовать инструмент Advanced Shell History, чтобы написать историю вашей оболочки в sqlite3 и запросить базу данных из командной строки с помощью предоставленного инструмента ash_query.

[email protected]:~$ ash_query -Q 
Query Description 
CWD  Shows the history for the current working directory only. 
DEMO  Shows who did what, where and when (not WHY). 
ME  Select the history for just the current session. 
RCWD  Shows the history rooted at the current working directory. 

Вы можете написать свои собственные запросы, а также сделать их доступными из командной строки.

Этот инструмент даст вам много дополнительной исторической информации, кроме команд - вы получите коды выхода, время начала и завершения, текущий рабочий каталог, TTY, и т.д.

Полное раскрытие - Я автор и сопровождающий.

Смежные вопросы