Главная >> Инструкции >> Безлимитная история команд в терминале Linux

Безлимитная история команд в терминале Linux

В Linux есть функциональность для сохранения истории команд, которые вы выполняете в терминале. Командная оболочка, которую вы используете, сохраняет команды в файл, находящийся в вашем домашнем каталоге, а команда history позволяет их просматривать. Такой подход используется уже десятки лет, но он имеет свои ограничения. Вы можете видеть историю только с одного устройства, и количество команд ограничено одной тысячей.

Существуют более современные подходы, которые позволяют синхронизировать историю между устройствами, сохранять все выполненные команды, а также осуществлять по ним поиск. В этой статье мы рассмотрим, как настроить неограниченную историю команд терминала в Linux для любой командной оболочки на примере Bash.


Содержание статьи

Как это будет работать?

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. Это довольно удобно, потому что выполнив команду один раз на одном из устройств, вы сможете найти её потом на любом другом устройстве и выполнить снова. А какими дополнительными скриптами для командной оболочки пользуетесь вы? Напишите в комментариях!

Оставьте свой Email для того чтобы получать анонсы новых статей и полезную информацию о Linux по электронной почте
Pеклама
Посмотреть детали

Anubis – это максимально легкое open-source решение, созданное специально для защиты небольших веб-ресурсов от бесконечного потока запросов от ботов и AI парсеров. Этот инструмент можно считать "ядерным вариантом", потому что он заставляет ботов выполнять вычисления похожие на майнинг криптовалюты. Но это неплохая альтернатива для тех, кто не может или не хочет использовать Cloudflare. Посмотреть детали

Оставьте комментарий