LINUX.ORG.RU

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

 , , ,


2

2

На 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 ()
Последнее исправление: Shaman007 (всего исправлений: 1)

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

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

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

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

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

Примеры?

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

Понятно

Siborgium ★★★★★
()

Молодая и развивающаяся программа. Работать в нашем опенсорс проекте - большая честь.

Eternellement
()
Последнее исправление: Eternellement (всего исправлений: 1)

Спасибо за новость, звучит интересно

Crocodoom ★★★★★
()
Ответ на: комментарий от 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
() автор топика
Ответ на: комментарий от CSRedRat

curl -x socks5://96.96.33.133:1080 -v https://api.telegram.org --socks5

suggestion: csh96

ping 192.168.88.1

p192

Кому нужны цифры в алиасах? Это же числовой параметр команды

Crocodoom ★★★★★
()
Последнее исправление: Crocodoom (всего исправлений: 1)

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

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

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

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

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

aidaho ★★★★★
()

Утилита делает столько ненужно, но не отправляет телеметрию! Как так можно в 2к20?

Ийон.

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

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

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

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

На нейросетях и со сбором телеметрии хоть? А то ж не модно иначе

anonymous
()

А что насчёт:

$ history
...
...
...
$ !номер_из_истории
Уже не модно?

deep-purple ★★★★★
()
Ответ на: комментарий от 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
()

у меня один глупый вопрос: обратный поиск по истории команд уже отменили? )))

// о, анон выше уже удивлялся по этому поводу )

aol ★★★★★
()
Последнее исправление: aol (всего исправлений: 1)

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

IPR ★★★★★
()

А Вы пробовали использовать ‘‘zsh-users/zsh-autosuggestions’’?

Harliff ★★★★★
()
Ответ на: комментарий от 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
()

А в чем смысл одновременно использовать божественный poetry и богомерзкий pipenv?

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

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

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

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

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

Coverage кстати тоже умеет из setup.cfg настройки чапать…

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 ★★
()

А что нужно указать утилите, если у меня ~/.state/bash_history и ~/.config/bash/aliases.inc.bash?

E ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.