Как сохранить и объединить историю Bash на нескольких машинах?


3

Обычно я использую SSH на нескольких удаленных хостах, которые являются виртуальными машинами, и воссоздаю их каждые 5-6 дней. Я теряю всю свою историю bash в этих виртуальных машинах, как только уничтожаю и воссоздаю их.

Есть ли способ, которым я могу поделиться историей Bash и использовать ее в будущем? (Что-то вроде Dropbox, но только для файла bash_history)


Проверьте этот пост на распределенной вечной истории, используя Dropbox
Джедай

Просто первая идея, общая папка и ссылка на файл на главном жестком диске из ~/.bash_history? Нет DropBox, нет внешнего, нет необходимости подключения к интернету, но только потребности, необходимые для общей папки. (ps> иначе вы всегда можете вручную скопировать файл ...). Или вы можете взять файл с хоста через ssh со скриптом в cron ....
Hastur

Ответы:


7

Взгляните на проект Bashhub . По сути, это именно то, о чем вы просите - выпадающий список истории bash, но они добавили инструменты для ссылки на историю со всех ваших компьютеров, при условии, что у них есть доступ к Интернету. Есть обоснованные опасения по поводу отправки ваших взаимодействий с оболочкой третьей стороне (например, работодателю, частной жизни, работе с конфиденциальным материалом), но если они не являются существенным фактором, это кажется хорошим решением. Похоже, что они не открыли серверный компонент кода с открытым исходным кодом, что было бы неплохо для устранения ранее упомянутых проблем.

Существует множество менее сложных методов, которые вы можете использовать, особенно если у каждой машины есть ssh-доступ друг к другу или, по крайней мере, каждая из них может общаться с одним центральным сервером через ssh. Любое решение, использующее несколько компьютеров, которые могут использоваться одновременно, обновляет общий файл истории (либо в одном связанном местоположении, либо в распределенных обновлениях), что несколько нарушит возможности расширения истории bash - например, вызов последней команды с помощью !! может дать вам неправильную команду. Это всего лишь некоторые идеи, которые нужно конкретизировать:

  • Сконфигурируйте общий ресурс NFS с сервера, смонтируйте на каждом компьютере, вставьте с него ссылку на ваш файл .bash_history
  • Используйте возможность bash PROMPT_COMMAND, чтобы добавить удаленный файл с вашей последней командой (например, в .bashrc, PROMPT_COMMAND="append_history" затем добавьте функцию append_history () { ( ssh you@yourserver "echo !! >> ~/common_bash_history" ) & }. Я поместил команду ssh в подоболочку и задал ее фон, чтобы убрать задержку после ввода команды. Затем вам придется периодически перенести изменения из файла common_bash_history на каждый компьютер (только добавление уникальных записей).

  • Периодическое задание cron, которое запускается на одной из машин («сервер»), которая извлекает истории из каждой, создает мастера и выталкивает его.

В моем случае Bashhub не будет работать по причинам, указанным выше. Я искал «идеальное» решение для этого и не нашел его - на данный момент я решил объединить все свои истории с каждой машины в основной файл истории на одном сервере. Но я не помещаю агрегированные результаты обратно в файл истории каждой машины; Для этого я использую отдельный файл, который позволяет мне добавлять такие вещи, как то, с какой машины он пришел, и я настраиваю новые функции поиска и завершения для агрегатного файла (который я использую для «долгосрочной» истории) и оставляю историю bashs. расширение / завершение без изменений (который я использую для «краткосрочной» истории). Если бы bashhub сделал доступным как серверное программное обеспечение, так и клиентское программное обеспечение, это было бы весьма отточенной альтернативой решения (хак).


Создатель Bashhub здесь. @ Argonauts, спасибо за плагин и обратную связь. Начинается работа над версией сервера с открытым исходным кодом. Следите за обновлениями, так как я надеюсь сообщить об этом сообществу в ближайшие месяцы.
RCCola
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.