LINUX.ORG.RU

topalias: утилита для генерации коротких алиасов по истории bash/zsh

 , , , ,


2

1

На GitHub опубликована Open Source утилита для генерации коротких алиасов по истории bash/zsh: https://github.com/CSRedRat/topalias

Задачи, которые решает программа:

  • Анализ файлов ~/.bash_aliases, ~/.bash_history, ~/.zsh_history с историей выполнения команд в терминале Linux в оболочке Bash/Zsh
  • Предлагает короткие аббревиатуры (акронимы) для длинных, долго набираемых и сложно запоминаемых, но часто используемых команд (хотя об этом можно даже не догадываться)
  • Выводит некоторую статистику
  • Обрабатывает управляющие параметры

Установка и запуск:

pip install topalias
python -m topalias

Если кого-то заинтересовала структура проекта - напишите, пожалуйста. Есть идея сделать актуальный шаблон для новых проектов на Python, включающий CI/CI (GitHub Actions, GitLab CI, Travis CI, git pre-commit hooks), проверенная линтерами из коробки рыба проекта, запуск программы как python-пакет, модуль, скрипт.

>>> Подробности разработки

Выводит некоторую статистику

Какую статистику?

Обрабатывает управляющие параметры

Какие-какие параметры?

Предлагает короткие аббревиатуры (акронимы) для длинных, долго набираемых и сложно запоминаемых, но часто используемых команд (хотя об этом можно даже не догадываться)

Примеры?

Проверено: Shaman007 (19.11.20 12:41:30)

Понятно

Siborgium ()
Ответ на: комментарий от Siborgium

При вывода программы:

topalias -c 4 --min=4

4. curl -x socks5://96.96.33.133:1080 -v https://api.telegram.org --socks5-hostname 96.96.33.133:1080
 executed count: 4, suggestion: csh96
 echo "alias csh96='curl -x socks5://96.96.33.133:1080 -v https://api.telegram.org --socks5-hostname 96.96.33.133:1080'" >> ~/.bash_aliases
3. ping 192.168.88.1
 executed count: 5, suggestion: p192
 echo "alias p192='ping 192.168.88.1'" >> ~/.bash_aliases
2. curl --header "Content-Type: application/json" --request POST --data "$(cat json_file.txt)" http://127.0.0.1:8000/bot/hook/
 executed count: 5, suggestion: cajh
 echo "alias cajh='curl --header "Content-Type: application/json" --request POST --data "$(cat json_file.txt)" http://127.0.0.1:8000/bot/hook/'" >> ~/.bash_aliases
1. curl -x socks5://96.96.33.133:1080 -v https://telegram.org --socks5-hostname 96.96.33.133:1080
 executed count: 5, suggestion: csh96
 echo "alias csh96='curl -x socks5://96.96.33.133:1080 -v https://telegram.org --socks5-hostname 96.96.33.133:1080'" >> ~/.bash_aliases

commands in history: 681, unique commands: 351, filtered by length: 296
 most used utils: git: 197, curl: 49, hh: 40, ping: 34, cd: 33
 most used aliases: hh: 40, tcp: 1, port: 1

В текущий момент статистика заключается в:

  1. Ранжирование по частоте выполнения команды
  2. Счётчик количества раз выполнения команды
  3. Всего команд в истории
  4. Сколько из них уникальных
  5. Самые используемые утилиты
  6. Самые используемые алиасы

Дополнительно можно собрать статистику, например, по используемым директориям, если включено логирование времени, то можно провести анализ в какие часы какие утилиты более востребованы. Предлагайте что из этого может быть интересно и полезно. История уже накоплена, есть потенциал для обработки и оптимизаций.

Параметры:

topalias -h
Usage: topalias [OPTIONS] COMMAND [ARGS]...

  See documentation and usage examples: https://csredrat.github.io/topalias

Options:
  -l, --min INTEGER     Print alias acronym not less that value. Default: 1
  -c, --count INTEGER   Print specified number acronym suggestions. Default:
                        20

  --filter              Filter used aliases in history. Default: False
  -z, --zsh             Use zsh shell history file .zsh_history. Default:
                        False

  -f, --path TEXT       Change custom directory for files: .bash_aliases,
                        .bash_history, .zsh_history

  --version             Print current program version and check latest on
                        pypi.org.

  --debug / --no-debug  Enable debug strings in output.
  -h, --help            Show this message and exit.

Commands:
  history  Print bash history file.
  main     Main function for group command call.
  version  Get program current and available version.
CSRedRat ()

Открыт закрытый форум сообщества Эльбрус

Открыт на столько что даже на стороннем ресурсе огораживания сделали и комментарии для анонимуса закрыли. Ой я не могу, зашквар за зашкваром, это при том что анонимус был культурным.

anonymous ()
Ответ на: комментарий от CSRedRat

По-моему, очень нехватает оптимизации читаемости, как у генераторов паролей.

В текущем виде алиас выдаётся подразделением ГУ ГР МВД при ВНИИПБиБ.

aidaho ★★★★★ ()
Ответ на: комментарий от ChekPuk

Что именно не устраивает?

Можете просто склонировать репозиторий и запустить как скрипт:

git clone https://github.com/CSRedRat/topalias
python3 topalias/topalias/cli.py -h
CSRedRat ()
Последнее исправление: CSRedRat (всего исправлений: 1)
Ответ на: комментарий от CSRedRat

Не устраивает то, что пип прописывается в системе и непонятная недоверенная программа оказывается в дамках. Пусть не сразу, но с каким-то обновлением в ней может оказаться «интересный» функционал и начнёт шпионить/криптомайнить/шифровать разделы.

Вот запуск на попробовать пойдёт в самый раз. И почитать удобно и пр.

ChekPuk ★★★ ()

Предлагает короткие аббревиатуры (акронимы) для длинных, долго набираемых и сложно запоминаемых, но часто используемых команд (хотя об этом можно даже не догадываться)

Но зачем? Зачем мучаться с такими костылями если давным-давно есть fuzzy history completion через FZF? - https://github.com/junegunn/fzf Вводишь CTRL-R - пару букв из команды - ???? Profit!

anonymous ()
  1. Нужны более читаемые имена алиасов
  2. Не предлагать алиасы на уже созданные алиасы
  3. На тот же ls -la в убунте есть грубо говоря стандартный алиас ll
  4. Алиасы для программ вида top, emacs, vim предлагать не вижу смысла
  5. Если в истории часто встречается команда ssh username@servername - предлагать добавить ее в .ssh/config/
Kazun3500 ()

Я это, жутко извиняюсь, но засрать себе dotrc сомнительными альясами так себе идея, не? Ну пинганул я какой-нибудь хост раз в жизни, оно мне и на это алиас создаст? Ну нафиг.

IPR ★★★★★ ()
Ответ на: комментарий от ChekPuk

Open Source

Публикация на pypi.org автоматически через CI, я ничего руками не выкладываю. Это OpenSource - вы можете установить из исходников:

git clone https://github.com/CSRedRat/topalias
python3 topalias/setup.py install --user

Либо запустить как скрипт вообще без установки:

git clone https://github.com/CSRedRat/topalias
python3 topalias/topalias/cli.py -h
CSRedRat ()
Ответ на: комментарий от YAR

Это нормально, их же не предлагается использовать одновременно и в неизменном виде, но алиасы для этих команд являются оптимальными. Предложена рекомендация, не в автоматическом режиме, пользователь использует её на своё усмотрение. Можно добавить опцию не предлагать одинаковые алиасы) вот проверка уже существующих будет добавлена в следующих версиях

Попробуйте на своей машине, вероятней всего вам не попадётся одинаковых предложений при разнообразной активности в консоли.

CSRedRat ()
Последнее исправление: CSRedRat (всего исправлений: 1)
Ответ на: комментарий от Kazun3500

Спасибо, дельные предложения, внесу в TODO. Если ещё будут идеи - прошу сюда: https://github.com/CSRedRat/topalias/issues (генераторов идей тоже можно добавить в соавторов проекта ✨)

Пункт 2 был запланирован, пока не успел сделать. По 1 пункту нужны алгоритмы для генерации акронима (аббревиатуры) - можете описать, что для вас является более читаемым, желательно более формально, в идеале формулу или код)

Список исключений надо формировать совместно по предложениям.

Была идея ещё проверять на наличие паролей в истории и прочей чувствительной информации с рекомендацией очистки истории (сейчас выдаётся рекомендация по добавлению пробела перед командой, чтобы она не сохранялась в истории).

Будут выдаваться рекомендации по распространённым алиасам. В убунте l и ll есть, в других дистрибутивах может не быть. В ~/.bashrc убунты из коробки есть, например, закомментированные алиасы и отключена раскраска консоли (тут согласен, на любителя, кому надо - включают).

CSRedRat ()
Ответ на: комментарий от IPR

Так поэтому вначале делается ранжирование команд по популярности, то что вы 1 раз пинганули в этот список рекомендаций не попадёт.

Да, известно про Ctrl+R, Alt+. и fzf поиск по истории, но согласитесь, что это другое и алиасы ll к ls -lah, да k к kubectl востребованы и удобны, а таких может быть ещё много, особенно для длинных команд с параметрами. Кому-то пригодится, инструментов много не бывает.

CSRedRat ()

Интересная тема. Но псевдонимы все-таки лучше создавать самому. Иначе в них просто нет смысла – короткий сгенерированный псевдоним, ни о чем не говорит, а когда их сотня-другая, то это каша.

anonymous ()
Ответ на: комментарий от anonymous

И ещё build-backend в pyproject.toml устарел - надо перевести на core - см. доки. Почему-то в Makefile настройки flake8 вместо setup.cfg???

В общем структура проекта странноватая. А так открой для себя cookiecutter…

P.S. Капча намекает - отметьте на картинке все велосипеды.

anonymous ()
Ответ на: комментарий от CSRedRat

Сразу скажу, что не являюсь потенциальным пользователем утилиты хотя бы потому, что не люблю pip и прочие не системные установщики.

Но в качестве конструктивной (надеюсь) критики замечу, что

  1. executed count: 4 имхо маловато для того, чтоб считать, что команда часто используется. И даже 5 маловато. Я думаю, должно быть не меньше 20 повторений, иначе вообще не предлагать. Причём не просто 20, а за достаточно большой срок (например, месяц), иначе она по-прежнему будет предлагать алиас на пинг сайта, однажды упавшего и пинговавшегося 20 раз в течение дня. Понятно, что из history информацию о датах не выудишь и надо вести собственную статистику, сравнивая history в разные дни и записывая изменения по датам.

  2. alias csh96='curl -x socks5://96.96.33.133:1080... — это же убожество. Кому нужен такой алиас? Кто запомнит, что csh — не оболочка, а curl? Я понимаю, что машинный разум трудно подстроить под человеческие ассоциации, но с этим что-то надо делать. Например, всегда записывать в алиас начало команды, а вот с аргументами в имени быть поосторожней. Но тут надо думать, так сходу ничего не посоветуешь.

А идея интересная. Поэтому и отписался, а не прошёл мимо.

aureliano15 ★★ ()