В Linux есть функциональность для сохранения истории команд, которые вы выполняете в терминале. Командная оболочка, которую вы используете, сохраняет команды в файл, находящийся в вашем домашнем каталоге, а команда history позволяет их просматривать. Такой подход используется уже десятки лет, но он имеет свои ограничения. Вы можете видеть историю только с одного устройства, и количество команд ограничено одной тысячей.
Существуют более современные подходы, которые позволяют синхронизировать историю между устройствами, сохранять все выполненные команды, а также осуществлять по ним поиск. В этой статье мы рассмотрим, как настроить неограниченную историю команд терминала в Linux для любой командной оболочки на примере Bash.
Содержание статьи
- Как это будет работать?
- Установка сервера Atuin
- Настройка Atuin
- Авторизация дополнительных устройств
- Выводы
Как это будет работать?
Atuin это программа, написанная на Rust, которая сохраняет все выполняемые вами в терминале команды в базу данных SQLite. Также она заменяет поиск команд shell, который появляется после нажатия сочетания клавиш Ctrl+R и клавиши просмотра предыдущих команд. После установки при нажатии Ctrl+R будет открываться вот такое окно с живым поиском по истории команд, где вы можете начать набирать команду и выбрать подходящую из списка:
Кроме того Atuin позволяет синхронизировать историю команд на сервер чтобы иметь к ней доступ на нескольких устройствах. По умолчанию синхронизация отключена и её использовать не обязательно. Если вы решите что вам нужна синхронизация, то вы можете использовать облачное хранилище Atuin, или развернуть собственный сервер. Все команды которые передаются на сервер шифруются с помощью приватного ключа который хранится только на ваших устройствах и никуда не передается. При авторизации нового устройства вам также нужно будет указать этот ключ чтобы получить доступ к командам.
Сначала мы рассмотрим как настроить собственный сервер, а затем как синхронизировать историю команд на нескольких устройствах с помощью этого сервера. Поддерживается не только 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. Это довольно удобно, потому что выполнив команду один раз на одном из устройств, вы сможете найти её потом на любом другом устройстве и выполнить снова. А какими дополнительными скриптами для командной оболочки пользуетесь вы? Напишите в комментариях!

















