В Linux є функціональність для збереження історії команд які ви виконуєте в терміналі. Командна оболонка яку ви використовуєте зберігає команди в файл, що знаходиться в вашому домашньому каталозі, а команда history дозволяє їх переглядати. Такий підхід вже використовується десятки років, але він має свої обмеження. Ви можете бачити історію тільки з одного пристрою і кількість команд обмежена однією тисячею.
Є більш сучасні підходи, які дозволяють синхронізувати історію між пристроями, зберігати всі команди які виконувались, а також виконувати по них пошук. В цій статті ми розглянемо як налаштувати необмежену історію команд термінала в Linux для будь-якої командної оболонки на прикладі Bash.
Зміст
- Як це працюватиме?
- Встановлення Atuin сервера
- Налаштування Atuin
- Авторизація додаткових пристроїв
- Висновки
Як це працюватиме?
Atuin це програма, написана на Rust, яка зберігає всі команди які ви виконуєте в терміналі в базу даних SQLite. Також вона замінює пошук команд shell, який з'являється після натискання сполучення клавіш Ctrl+R і клавіші перегляду попередніх команд. Після встановлення після натискання Ctrl+R буде відкриватись ось таке вікно з живим пошуком по історії команд, де ви можете почати набирати команду і вибрати те що підходить із списку:
Крім того Atuin дозволяє синхронізувати історію команд на сервер щоб мати до неї доступ на кількох пристроях. За замовчуванням синхронізація вимкнена і її використовувати не обов'язково. Якщо ви вирішите що вам треба синхронізація, то ви можете використовувати хмарне сховище Atuin, або розгорнути власний сервер. Всі команди які передаються на сервер шифруються за допомогою приватного ключа який зберігається тільки на ваших пристроях і нікуди не передається. При авторизації нового пристрою вам також потрібно буде вказати цей ключ щоб отримати доступ до команд.
Cпочатку ми розглянемо як налаштувати власний сервер, а потім як синхронізувати історію команд на декількох пристроях за допомогою цього сервера. Підтримується не тільки Bash, але і багато інших командних оболонок, таких як ZSH, Fish, Nushell, Xonsh та PowerShell. В цій статті ми будемо розглядати Bash, але для інших оболонок налаштування подібні.
Встановлення Atuin сервера
Якщо ви читали інші мої статті, то знаєте що я пропоную використовувати Docker Compose. На даний момент це найпростіший спосіб встановлення сервісів, оскільки вам достатньо взяти готову конфігурацію, виконати декілька команд і все запрацює. Atuin не виключення. Для роботи програми треба безпосередньо сервіс і база даних PostgreSQL. Щоб це все розгорнути можна використати такий конфігураційний файл docker-compose:
vi docker-compose.yaml
services:
atuin:
restart: always
image: ghcr.io/atuinsh/atuin:latest
command: start
volumes:
- "./data/config:/config"
ports:
- 8888:8888
environment:
ATUIN_HOST: "0.0.0.0"
ATUIN_OPEN_REGISTRATION: ${ATUIN_OPEN_REGISTRATION:-"false"}
ATUIN_DB_URI: postgres://${ATUIN_DB_USERNAME}:${ATUIN_DB_PASSWORD}@db/${ATUIN_DB_NAME}
RUST_LOG: info,atuin_server=debug
depends_on:
- db
db:
image: postgres:14
restart: unless-stopped
volumes:
- "./data/database:/var/lib/postgresql/data/"
environment:
POSTGRES_USER: ${ATUIN_DB_USERNAME}
POSTGRES_PASSWORD: ${ATUIN_DB_PASSWORD}
POSTGRES_DB: ${ATUIN_DB_NAME}
Також в цьому ж каталозі треба створити .env файл в якому будуть знаходитись данні доступу до бази даних:
vi .env
ATUIN_DB_NAME=atuin_db
ATUIN_DB_USERNAME=atuin_user
ATUIN_DB_PASSWORD=change_password
ATUIN_OPEN_REGISTRATION=true
Обов'язково поміняйте пароль на щось більш складне. Також створіть папки які будуть монтуватись в контейнер:
sudo mkdir -p ./data/{config,database}
Після того як все готово розгорніть сервіс за допомогою наступної команди:
docker compose up
Якщо все працює і немає помилок можна запустити сервер в фоновому режимі і переходити до налаштування клієнтів:
docker compose up -d
Якщо щось не працює, можете звіритись з docker-compose файлом в офіційному репозиторії. В треміналі серверу ще можна подивитись його IP адресу, оскільки ми будемо її використовувати для синхронізації. Сам сервіс доступний на порту 8888:
ip -br a
Налаштування Atuin
Встановлення Atuin
Якщо ви використовуєте Ubuntu, то клієнт Atuin можна встановити з офіційних репозиторіїв:
sudo apt install atuin
У всіх інших випадках можна використати скріпт установки від розробників програми:
curl --proto '=https' --tlsv1.2 -LsSf https://setup.atuin.sh | sh
Реєстрація на сервері для синхронізації
За замовчуванням синхронізація з сервером вимкнена. Щоб все запрацювало необхідно налаштувати адресу сервера та зареєструвати клієнта. Для того щоб налаштувати використання вашого серверу треба відкрити конфігураційний файл ~/.config/atuin/config.toml та прописати там адресу вашого сервера, в нашому прикладі це http://192.168.122.202:8888
vim ~/.config/atuin/config.toml
sync_address = "http://192.168.122.202:8888"
Після цього необхідно зареєструватись на сервері. Для цього виконайте команду register, якій потрібно передати ваше імя користувача і Email:
atuin register -u user1 -e user1@home.arpa
Після реєстрації програма запропонує вам зберегти ключ шифрування який буде необхідний для авторизації на інших пристроях. Сам ключ можна подивитись за допомогою такої команди:
atuin key
Команда покаже сід фразу яку потрібно зберегти в надійному місці. Після реєстрації ви будете автоматично авторизовані і тепер можна виконати команду синхронізації щоб перевірити що все працює:
atuin sync
Імпорт історії команд
Ви можете імпортувати вже існуючу історію команд в Atuin за допомогою комнади import. Наприклад:
atuin import bash
Або імпорт з автоматичним визначенням командної оболонки:
atuin import auto
Налаштування командної оболонки
Якщо ви використовували пакет з офіційних репозиторіїв дистрибутиву, то скоріше за все у вас все вже налаштовано. Якщо ні, то вам буде потрібно додати декілька стрічок в rc файл вашої командної оболонки. Наприклад, для Bash:
vi ~/.bashrc
eval "$(atuin init bash)"
За замовчуванням Atuin перехоплює натискання Ctrl+R та стрілку вверх. Я, наприклад, хочу бачити локальну історію команд при використанні стрілки вверх, і пошук Atuin при натискані Ctrl+R. Для цього команду ініціалізації треба трохи модифікувати:
eval "$(atuin init bash --disable-up-arrow)"
Після цього треба буде закрити термінал і відкрити його знову. Зверніть також увагу, що для того щоб Atuin повністю працював в Bash необхідно щоб був встановлений та завантажений скріпт ble.sh для Bash.
Використання пошуку Ctrl+R
Тепер, коли все налаштовано та імпортовано можна спробувати використовувати історію команд. Натисніть Ctrl+R та почніть набирати команду:
Зверніть увагу на область пошуку. За замовчуванням програма шукає по глобальній історії команд. Натиснувши Ctrl+R ще раз можна перемкнутись на пошук команд лише на цій машині (HOST), лише в межах цієї сессії (SESSION), в межах поточної директорії (DIRECTORY):
Щоб вибрати команду використовуйте стрілки вверх та вниз, Tab щоб вставити команду в термінал, а щоб виконати натисніть Enter.
Перегляд інформації про команду
Atuin зберігає не тільки самі команди, але і інформацію про їх виконання. Коли ви вибрали команду в вікні пошуку, вы можете настиснути сполучення клавіш Ctrl+O для того щоб подивитись доступну інформацію:
Тут є коди виходу, час виконання команди, інформація про дні коли ви її запускали, директорія, користувач і тому подібне. Крім того, тут можна натиснути Ctrl+D для того щоб видалити команду з історії.
Статистика команд
Колись були популярні скріпти за допомогою яких можна було подивитись топ команд які ви найчастіше вводите. Це можна зробити і за допомогою atuin. Для цього виконайте команду stats:
atuin stats
Авторизація додаткових пристроїв
Коли налаштування першого пристрою завершено можна додати ще декілька. Наприклад, ноутбук чи домашній сервер. Для цього потрібно повторити на ньому кроки по встановленню клієнта, а потім виконати команду login:
atuin login
Програма запитає імя користувача, яке ви використовували при реєстрації, пароль, а також ключ шифрування, який ви зберегли раніше. Після успішної авторизації можна синхронізувати команди і користуватись пошуком:
atuin sync
Висновки
В цій статті ми розглянули як налаштувати необмежену історію команд за допомогою Atuin в Linux. Це досить зручно, тому що виконавши команду один раз на одному з пристроїв ви зможете знайти її потім на будь якому іншому пристрої і виконати знову. А якими додатковими скріптами для командної оболонки користуєтесь ви? Напишіть в коментарях!
















