Главная >> Инструкции >> Безлимитная история команд в терминале 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еклама
Посмотреть детали

Proton Drive — это облачное хранилище со сквозным шифрованием от компании, которая создала Proton Mail, которое может стать хорошей заменой Google Диску. Вы получаете синхронизацию между устройствами, общий доступ к файлам, онлайн редактирование текстов и даже таблиц, удобные приложения для всех платформ, но с гарантией, что ваши данные останутся исключительно вашими и никто не будет тренировать на них AI. В бесплатной версии доступно 5 ГБ места на диске с возможностью покупки дополнительного пространства. Посмотреть детали

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