Обновить

Я заменил Google на 50 строк Python. Через месяц я забыл, как пишется tar -xzf

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели65K
Всего голосов 171: ↑161 и ↓10+180
Комментарии239

Комментарии 239

Боюсь себе представить, что с вами случится, если вы откроете себе Midnight Commander или, не дай бог, Far2l.

MC - это база, согласен. Но он хорош для файлов. А мой костыль умеет и однострочники на awk собирать, и кронтабы крутить, и порты убивать. Это попытка сделать универсальный интерфейс к терминалу для тех, кто (как я) устал контекстно переключаться между разными утилитами. Хотя за напоминание про Far2l спасибо. Надо проверить, помнят ли пальцы F5-F6

Мне кажется вы изобрели упрощённую версию claude. В смысле не замену, а именно новый похожий инструмент для shell.

Последее время я все больше пишу в нем причем на разных языках включая страницы в html и css. И вместо того чтобы бороться и вспоминать синтаксис (или учить новый css) - просто говорю что мне нужно сделать.

Теперь в вашими скрипом у меня будет ещё один инструмент, спасибо. Но если нужно написать какой-то скрип даже на bash - обратно к claude

Следующим шагом после изобретения автором упрощенной версии claude будет изобретение GUI, и окажется что вообще не нужно помнить команды, тратить время на запрос к ЛЛМ и набор текста, просто нажал кнопку и всё

я считаю наоборот. GUI потихоньку отватится, и очень много уйдет в виртуального помощника - это и будет новый GUI. Например, вместо того, чтобы изучать web interface какого-то сайта, тыкать в разные менюшки (не всегда логичные) в поисках нужной функции, ты просто говоришь помощнику - переведи еще раз 100 рублей Васе. Он помнит, что ты уже недавно переводил ему деньги, и (как агент ai.py из этой статьи) спрашивает подтверждение: "- Перевожу 100 рублей Васе Пупкину через банк N, правильно?" И все, ты вводишь fingerprint, и происходит магия.

Я открыл, а потом закрыл. Когда я 20 лет назад перешёл на линух, мне очень не хватало Windows/Total Commander-а и Far-а, использовал Midnight Commander и что-то ещё, уже и не помню что. Но потом как-то естественным образом перешёл на работу просто в консоли и фаовым менеджером пользоваться перестал. Это оказалось удобнее и быстрее.

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

Просто зависит от профиля работы. Условно, если мне нужно грепнуть и я знаю что и где лежит, то конечно мне проще написать команду. А вот писать команды для мува, разархивирования, удаления и копирования мне абсолютно лень, мне проще F5, F6, F8 нажать. Да и сразу через встроенный просмотрщик глянуть файл без дополнительных команд. chmod и chown я больмень помню, но mc нагляднее. Обычно у меня mc запущен и я просто через ctrl+O переключаюсь между консолью и менеджеров в зависимости от задачи.

а я иногда удаляю через mc, чтобы про себя пропеть строчку "я нажал F8 и веселый нортон удалял мне всё подряд"

Могу предлоджить вариант - МС двухпанельный, таким образом, в "левой" вкладке делаем соединение через ssh на удаленный сервер, в "правой" либо локальная ФС, либо так же, удаленный сервер через ssh и копируем файлы.

Угу, я вот недавно сделал rm -rf /home/WALLETS (ну папка по другому немного называлась, это для аналогии) , забыл что там еще виртуалка с боевым кошельком лежит ))). Хорошо копия была, но теперь зарекся без mc удалять что-то.

Total Commander - Krusader
Far - MC

Krusader в подмётки не годится Total Commander. Много раз пробовал, но вообще не заходит. Это при том, что я активно пользовался Total Commander на Windows. Ну а сейчас больше пользуюсь Double Commander. Но не так активно, как TC на Windows. Больше времени в MC провожу, даже с тем учётом, что Far никогда не пользовался.

зовите меня динозавром, но тоже перешел на линукс 20 лет назад. И до сих пор пользуюсь mc (fyi, раньше был deco), и экспериментирую с far2l.
Мне до сих пор удобней в двух консолях с совершенно разными путями, например. Манипуляция файлами, проверка размера подкаталога, запуск дополнительных программ типа гуевого meld для сравнения файлов из разных подкаталогов. Помнить и вбивать пути каждый раз к этим файлам просто задалбливает, а в mc можно сохранить их по ctrl-\.
Ну а пример с архивами - это вообще универсальное средство. Kлючи ко всем архиваторам разные - 7z, .gz, bz2, всякие .deb и тд. Один распаковывается, другой распаковывается и архив удаляется, да елки! А в mc ничего не нужно помнить, просто зашел в него как фолдер, сделал что нужно, и вышел. Вот напишите на память, например, как вытащить из .deb архива один файл, и сколько команд вам на это потребуется?

fyi, раньше был deco

Только на фряхе с ним дело имел.

проверка размера подкаталога

Попробуйте ncdu

Ну а пример с архивами - это вообще универсальное средство.

Последний раз я имел дело с архивами лет 15 назад. Не, иногда я их скачиваю откуда-нибудь, но мне всегда хватает в гуях пкм -> exctract here

Вот напишите на память, например, как вытащить из .deb архива один файл, и сколько команд вам на это потребуется?

Ни разу в жизни этого не делал, попробовал вот так, сработало. Зачем в консоль ради этого идти?

разговор был про исключительно консоль. Понятно, что в любом UI это делается проще.

Не было никогда разговора исключительно про консоль, зачем себя ограничивать? Я писал, что использовал консольный Midnight Commander, но потом понял, что в самой консоли работать удобнее. Другие инструменты я никогда не отрицал.

Если у тебя как у автора соединение только по ssh, и оч важная срочность задачи, то о каком гуи может идти речь? Ты вразв быстрее сделаешь все через консоль нежели подтянешь все пакеты, настроишь доступ, откроешь порты, а в идеале при будешь все удалять в обратном порядке, т.к. условный бубунту-сервер и не должен иметь гуи от слова совсем

А если бы у бабушки был член, то это был бы дедушка. Но линух у меня, прежде всего, на десктопе, что понятно из первого сообщения. На серверах мне тем более нет необходимости deb пакеты потрошить.

В файловом менеджере можно настроить быстрые каталоги и перемещаться по папкам в считанные секунды.. Как в консоли набирать adminidtrator/settings и т.п дремучие папки профайлов - где мне нужный видеофайл, не понимаю. Так же у меня там есть и bat файлы где без всяких питонов можно набирать что типа sysdmcpl и забыть и новых изысках создателей графических интерфейсов. Ясно, что подобное можно и вручную, и на питонах, и через баши и т.д. Ещё через файл-менеджер можно открывать файлы например с помощью своего плеера и прог, который в одной папке с программой. В андроиде тот же тотал самое простое свойство устанавливать apk. Для меня прямой способ борьбы с дизайнерами и развивателями "новых функций" ОС . Комстрока это для серверов, но не для домашнего применения

В файловом менеджере можно настроить быстрые каталоги и перемещаться по папкам в считанные секунды.. Как в консоли набирать adminidtrator/settings и т.п дремучие папки профайлов - где мне нужный видеофайл, не понимаю.

Алиасы. В те 5 папок кроме хомяка, в которые я хожу регулярно, я хожу алиасами (вы же в курсе, что просто "cd" переходит в хомяк, а "cd -" возвращает вас в папку, в которой вы были до последнего перехода?) А ещё поставьте себе fzf и вызывайте его по Ctrl+r вместо стандартного поиска по истории. Это просто охренительно удобно и быстро и не только для смены каталогов. Во все остальные папки я хожу именно так. Набираете Ctrl+r, settings и вот у вас уже все папки settings перед глазами в которые вы ходили, стрелками можно выбрать или набрать ещё пару символов, чтобы уменьшить количество вариантов.

Комстрока это для серверов, но не для домашнего применения

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

В консоли nnn в целом намного удобнее, хотя и не без косяков.

прикольная штука! Спасибо, изучаю!

А мне yazi нравится, модно, молодёжно

в процессе)

ноль внешних зависимостей

Я сначала гонял через API, потом поставил Ollama с qwen2.5:7b

Это уже совсем не ноль внешних зависимостей.

А складывать API-ключи с привязанной кредиткой в .bashrc – это не прямо катастрофа, но поведение крайне опасное

Согласен, замечания по делу.

Под «ноль зависимостей» имел в виду именно стандартную библиотеку Python (без pip/venv). Но вы правы, сама Ollama зависимость та ещё.

Про ключи в .bashrc вредная привычка из разряда «пока тестирую, потом поправлю». Лучше так не делать. Спасибо за внимательность!

А если прокидывать локальный порт на VM (Remote Forward)? Тогда можно использовать в принципе без параметров. Не знаю конечно насколько это возможно для всех сценариев работы. По идее локально можно и простую проксю поднять к OpenAI, благо подобных сервисов на github уже много.

Не большая, чем факт наличия ключей с кредиткой. Сама идея - дыра в безопасности.
Если уж вы пользуетесь API с оплатой за потребление и без настроенных лимитов, то не особенно важно, как вы храните ключи.

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

А куда их лучше положить тогда?

В идеале – в system keychain, но .env в каталоге проекта – нормальный вариант.

Проблема с заданием переменных окружения в .bashrc в том, что каждый запущенный пользователем процесс будет автоматически знать OPENAI_API_KEY. User environment может попасть даже в некоторые изолированные окружения, если там нет whitelisting.

Попросил нейросеть вас попугать, она предложила два сценария:

  • IDE и редакторы: Если вы запускаете PyCharm, VS Code или любой другой редактор из терминала (командой code . или pycharm .), этот редактор унаследует переменную OPENAI_API_KEY. Если в редакторе есть плагин (например, для Copilot, для форматирования кода или даже для отправки телеметрии), этот плагин в теории имеет доступ к переменной. Плагин может быть вредоносным или просто иметь баг, из-за которого отправит окружение на свой сервер.

  • Система сборки (CI/CD локально): Вы запускаете тесты или сборку Docker-образа. Переменная уходит внутрь контейнера. Если вы потом закоммитите этот образ в Docker Hub (публичный репозиторий), ключ окажется в слое образа. Даже если вы его удалите из итогового образа, он останется в истории слоев.

Выглядит как "не кладите вилку на стол! а то пустите в дом злоумышленника, он у вас вилку-то и украдет! вешайте вилку на люстру и каждый раз ее оттуда берите".

Но во-первых, если у меня злоумышленник в доме - то он вилку и на люстре найдет (grep -r OPENAI /), а во-вторых, помимо вилки, у него еще будет достаточно способов доставить мне неприятности, что потеря вилки будет далеко не самой большой проблемой.

Частично соглашусь. Это защита от чужого раздолбайства, не от злоумышленников.

Чтобы защититься от прямо злоумышленников, лучше

  • Хранить такие секреты в hardware encrypted system keychain (с чего я собственно и начал)

  • Запускать непонятные closed-source программы в песочнице (всё, что из Flatpak в Linux; всё, что из App Store в Mac OS)

  • Поставить уже себе application firewall и не давать непонятным программам соединяться с непонятными серверами.

grep -r OPENAI /

В Mac OS, кстати, это кучу privacy warnings выкинет поверх всех окон. Такую кучу, что пользователь прибьёт эту программу просто от того, что достала.

Чтобы...

Тут все-таки нужно взвешивать и выбирать, а не "в любой непонятной ситуации - всего опасайся". Если у нас какая-то важная (и простая!) рабочая система, на OpenAI баланс в сотни тысяч долларов - тогда это хорошая практика. Например, наше какое-то большое продакшн приложение, а на этой машине крутится только ИИшный микросервис (так проще его защитить). И тут рекомендации уместны.

Но если это домашняя машина разработчика, которая динамичная - мы то одно на ней делаем, то другое, то начали какой-то проект, то забросили, то поменяли половину системы под другие требования (или под собственный каприз, захотелось попробовать другой desktop environment) - то строить такой зацементированный бункер будет очень дорого. При этом, на счету в OpenAI (стоимость кражи токена) - 20 баксов... Да лучше чтобы с шансом (сильно завышенно) в 1% мы рискнули этой двадцаткой, чем потратить рабочего времени на (занижено) 200 баксов, чтобы на домашней машине выстроить такой же бункер.

Где вы усмотрели "зацементированный бункер", который "дорого строить" (и откуда столько точных чисел), ума не приложу.

Предпочитать sandboxed приложения? Поставить application firewall? Это не бункер, это информационная гигиена. Это "мыть руки перед едой" и "не поднимать с земли всякую гадость", только эпохи интернета и ИИ-стартапов.

Мне вот что ИИ посоветовал

ai() {
    OPENAI_API_KEY="$(cat ~/.openai_key)" python3 ~/bin/ai-bash.py "$@"
}

echo "sk-..." > ~/.openai_key
chmod 600 ~/.openai_key

source ~/.bashrc

Интересная статья. Мне вот интересно, а не проще ли было сделать что-то типа описания типовых случаев (по типу FAQ). Я так навскидку в статье где-то около 10 вариантов увидел. Модель qwen2.5:7b весит около 5 ГБ, там мнооооого информации можно было бы вложить. Или просто скрипт был бы в пару кБ.

С другой стороны, то, что надо меньше в интернет лезть, мне нравится.

FAQ это круто, но он статичен. А LLM вывозит любой мой сиюминутный «поток сознания», который в шпаргалку просто не влезет. А 5 Гб на диске сегодня небольшая цена за спокойные нервы.

совместить - через openclaw с памятью

Как будто статика не является проблемой. Я по себе сужу. Меня вымораживало писать и запоминать git команды. Сделал себе алиасы, в итоге получилось 12 шт. С прочей мелочёвкой даже до 20 не доходит.

Касаемо FAQ, я имел в виду примерно следующее:

Скрытый текст
alias what-tar='echo "Распаковка данных:"; \
              echo "  tar -xzf archive.tar.gz        # распаковать .tar.gz"; \
              echo "  tar -xjf archive.tar.bz2      # распаковать .tar.bz2"; \
              echo "  tar -xf archive.tar            # распаковать обычный .tar"; \
              echo ""; \
              echo "Упаковка данных:"; \
              echo "  tar -czf archive.tar.gz /path/to/dir  # создать .tar.gz из директории"; \
              echo "  tar -cjf archive.tar.bz2 /path/to/dir # создать .tar.bz2"; \
              echo "  tar -cf archive.tar /path/to/dir       # создать обычный .tar"; \
              echo ""; \
              echo "Дополнительные опции:"; \
              echo "  -v — выводить подробный список файлов (verbose)"; \
              echo "  -C /dir — распаковать в указанную директорию"; \
              echo "  --exclude=\"pattern\" — исключить файлы по шаблону"; \
              echo ""; \
              echo "Примеры:"; \
              echo "  tar -xzvf archive.tar.gz                # распаковать с выводом списка файлов"; \
              echo "  tar -czvf archive.tar.gz /home/user --exclude=\"*.tmp\"  # упаковать, исключив *.tmp"'

Можно в виде скрипта оформить, тут без разницы. Смысл в том, что этот набор будет весьма ограниченным и вряд ли перевалит за 10. Ну 20.

Касаемо размера, это мой загон, но как будто неправильно использовать ГБ там, где можно обойтись кБ. С другой стороны - всё лучше, чем в интернет лесть с тоннами рекламы.

а не проще ли было сделать что-то типа описания типовых случаев (по типу FAQ)

Я себе поднял dokuwiki на компе, и там все храню. По разделам. Один раз нашел, скопировал, добавил раздел. Оч удобно. Рекомендую

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

Точную статистику не вел, но по ощущениям: в символах выходит примерно так же. А вот «когнитивная нагрузка» падает в разы, сформулировать задачу на русском на порядок быстрее, чем вспоминать ключи в мане.

Если честно, плохо представляю какую команду можно вбить в поиск чтобы получилось короче чем chmod, df или tar перечисленные в статье. Деды уже все что можно посокращали чтобы меньше кнопок нажимать.

я кстати попробовал в chatgpt просто повбивать типа
find dirs 4g+
extr bz
kill port 8080
вполне себе однострочники которые ИИ успешно конвертировал в то что надо, читая мои мысли. так что можно и очень коротко, особенно если напомнить ему что на выходе всегда должна быть linux команда. больше всего нелюблю частые переключения языка в процессе набора, оно еще и тупит по секунде на винде и на маке (на линуксе кажется побыстрей).

частые переключения языка в процессе набора, оно еще и тупит по секунде на винде и на маке

Что касается мака - вы возможно переключаете раскладку кнопкой с глобусом слева внизу на клавиатуре, и там при переключении показывается источник ввода всегда, из-за этого не сразу происходит смена раскладки. Повесьте на капслок переключение, или на другую какую комбинацию удобную (ну или дефолтный ctrl+space, не удерживая ctrl, чтобы также не показывать источники ввода) - переключение мгновенно будет происходить

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

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

Да, я переключаю капсом и постоянно это замечаю. Есть какие-нибудь рекомендации на что можно поменять, чтобы быстро переключать одной кнопкой (глобус, ctrl+space не очень удобно).

Я достаточно быстро забываю комманды / опции своих скриптов, если не пользуюсь регулярно. tar тоже всегда гуглю. По причине такой памяти, для меня вещи типа vim мало юзабельны. Мешает, но не критично.

Жму руку. Рад, что я не один такой. В vim, для меня, без шпаргалки до сих пор некомфортно заходить.

Нужно мышечную память нарабатывать. Например отказаться от nano/mcedit
и даже на винде поставить себе vim и только им открывать все текстовики - шпаргалка отпадет достаточно быстро и все станет казаться простым. Другой вопрос, например, лично мне - ЛЕНЬ. Мне лень заниматься самооптимизациями, даже если они отобьют себя с лихвой - мне нужно решить задачу здесь и сейчас. Поэтому на каждую такую таску я трачу лишние секунды на гугл, вместо того, чтоб один раз набить руку и получить выигрыш в будущем)) Но иногда у меня наступает озарение и я начинаю в свободное время занимаясь со своими домашними компами намеренно использовать без гугла те инструменты - в которых вот так "плаваю" - помогает. Но лень))

В vim, для меня, без шпаргалки до сих пор некомфортно заходить.

behave mswin "Luke!

Ох вы далеко не один) Это я думал, что я один такой склеротик) и вот конкретно этот tar с его xfz - это самая боль!

Для этого добавляю в тело скрипта комментарии и ключ -h.

Иначе - лапша уже через год.

Это база. Стараюсь делать хелп даже для 10 строчного скрпита, если он не одноразовый

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

Знакомо. Попробуйте helix. Быстрый, и всегда хоткеи на виду. Мощный редактор

О, спасибо за наводку, не видел. Моя поделка — это скорее DIY-велосипед на коленке. Изучу на досуге ваш обзор!

В итоге получается, что всё равно нужно гуглить, чтобы проверить полученный вариант. Это не говоря о том, что лезть куда-то с запросом с прод сервера, ну такое себе.

При наличии статистики запросов проще было написать простые узконаправленные баш скрипты. Больше безопасности и контроля.

Да тут половина команд вообще как будто по старинке алиасами в .bashrc закрывается. Другой вопрос что за опытный девопс такой у которого за 10 лет такой фаил не появился.

eXtract gZip File действительно сложно запомнить. Но если хорошо потренироваться, то можно запомнить и Create gZip File

Но если и это сверхзадача, то откройте для себя вместо гугла cheat.sh/tar

действительно сложно запомнить

За десять то лет? Я даже не вспоминаю это в голове - пальцы сами помнят.

Это не проблема запоминания, по моему.

Это был сарказм, конечно.

Согласен, это какое-то заболевание. У меня все эти ключи спустя 20 лет в голове после трёх лет ежедневной солярки, хотя nix пользуюсь с тех пор не каждый день.

Кстати да, на мой взгляд проблема здесь тоже не в проблеме запоминания, а в непонимании почему эти ключи так назваются а не иначе. Мне, например, было достаточно много лет назад один раз прочитать документацию и понять что "X/C" - это от eXtract/Create, "Z" - от gZip, "F" - от File (и это название ключа для имени файла уже практически стандарт) чтобы никогда не иметь проблем с "вспоминанием". Ассоциации и понимание в абсолютном большинстве случаев более эффективный инструмент памяти чем тупая зубрежка.

Вероятно люди, начинавшие писать полезный инструмент для себя не задумывались над обобществлением ассоциаций? А после было поздно что-то менять.. А инструмент разрастался.
Апогей апофеоза - несколько уровней вложенности мана, различающихся по объёму на порядок, как например у FFMpeg или VLC Player, включающих массу библиотек, кодеков, и прочая, когда можно потратить массу усилий сперва на поиск нужных опций, затем на попытки разобраться в правильном синтаксисе, порядке опций и возможных несовместимостях.. Тут впору отдельный конструктор писать.

Подбор ключей к ffmpeg, yt-dlp сродни поэзии. Или проекту выходного дня.

Скачай в x264, не более 1080p, субтитры извлеки, субтитры автогенерируемые всё равно извлеки, старайся mp4, но mkv тоже пойдёт... Но если не можешь, то делай как можешь...
Скачай пестню с YouTube, да через прокси, да в opus, да cover вставь, да id3 заполни...
Склей файло с видеорегистратора, да через USB, да пережми, да в два прохода, чтобы влезло на DVD.
Из всех серий сериала все субтиты извлеки, в SRT рядом в папку положи.

проблема здесь тоже не в проблеме запоминания, а в непонимании почему эти ключи так назваются а не иначе

Проблема скорее в зоопарке похожих стандартов.

eXtract/Create ? окей. Для tar. А потом Вы узнаете о zip в котором ключа не надо, зато обязательно указать рекурсию для папки. А потом учите 7z в котором внезапно для архивации надо (A)dd.
Список файлов? tar -t, unzip -l, 7z l. Потому что (T)able, (L)ist и тире не везде надо.
А потом к этому добавляются еще утилиты типа df, rar, iptables, nftables в которых для похожих операций (список, удаление, добавление) еще дополнительный зоопарк.

И вот в случае такой похожести - ассоциации только портят, т.к. запутывают. Create или Add? Попробуй тут проассоциируй.

Мы по этой же причине никак не можем адекватно 1С использовать, потому что в английском однозначно "for" и все, оно запомнено как цикл без контекста и ассоциаций (хотя мы знаем конечно что это "для"), а вот в русском из-за ассоциации с циклом даже в такой простой ситуации пытаемся натужно вспомнить "цикл"? "для"? "перебор"? Потому что блин ассоциации.

Я помню ключи tar потому что довольно часто пользуюсь (и начал с древнейших времен). Но я вовлечен в десяток наших проектов, по каждому куча задач, и когда мне задают вопрос о проекте, на котором я работал 3 года назад - мне трудно что-то вспомнить, приходится ковыряться, разбираться.

Легко помнить одну вещь, можно помнить, условно, N вещей, но когда кладешь на эту полочку конечного размера N+1'ую - то что-то с нее слетает.

Есть и альтернативная мнемоника для лёгкого запоминания для неанглоязычных:
eXtract Ze File
Create Ze File

На всякий случай напомню, что восклицательный знак в большинстве оболочек (zsh, bash и т.д.) запускает поиск по истории введенных вами комманд.

еще можно ctrl+R далее ввод части команды. Если еще раз нажать ctrl+r то переключится на следующее совпадение. Причем стрелки вверх/вниз позволяют искать по соседним командам. Я иногда помню с каким файлом работало, но не помню команды и наоборот

но почему вы везде приводите тар с дэшем, когда он там не нужен?

Десять лет в девопсе. Десять. И я гуглю tar -xzf. Не раз в год — раз в неделю. Ну, может раз в десять дней, если повезёт.

Пожалуйста , отнеситесь серьёзно к моему комментарию!

Обратитесь к врачу! Нехороший симптом: Не то, что вы не знаете синтаксис tar, а то, что вы не можете запомнить команду, котоую регулярно на протяжении 10 лет используете.

Я cам devops.

это нормально если ты работаешь с много чем кроме tar

каждый лепит кто во что горазд и проще потратить 10 сек и узнать валидную команду чем сидеть вспоминать или разбиратся, а почему не сработало как ожидалось. Другое дело что есть -h

Вообще история команд это лучшее что придумали для консолей, но если много всего разного и повторяющегося, то проще себе в файлик выписать и копипастить из него

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

На листочек записать и приклеить на стенку рядом с рабочим местом. Или даже на крышку ноутбука/поверхность стола ;)

Если перестану читать то, что он мне выдаёт, перед нажатием «y» — рано или поздно словлю rm -rf или что-нибудь в этом духе.

То есть по сравнению с файлом на 168 строк (+ещё столько же комментариев для удобства поиска) решение автора обладает двумя преимуществами:

  • нужна видеокарта (своя или за деньги)

  • результат непредсказуем

Не переживай, работы много, зато платим мало! ©

Я тоже не помню синтаксиса команды tar, find, xargs, ps и т. д., и я постоянно работаю в консоли, а ещё не помню каких-то конструкций языков программирования за меня это IDE добавляет. Это нормально не помнить, и периодически посматривать в шпаргалку.

Это абсолютно нормально. Мозг не хочет нагружать себя ненужной рутиной.

Раз автор всё логирует, то можно написать и "тренажёр мышечной памяти". Смотреть, что чаще всего спрашивал и делать llm кой заметки или тест на тему. Можно найти и не очевидные "общие узкие места", но кажется моделька должна быть помощнее чем qwen2.5:7b.

Просто tar — это такой синтаксис, который у меня физически отказывается залезать в долговременную память.

Уж xzf за десятилетия пальцы запоминают ) Вот к новомодным bzip2/xz так и не привык.

Начало статьи:

И я гуглю tar -xzf. Не раз в год — раз в неделю. Ну, может раз в десять дней, если повезёт. Открываю хром, набираю «tar extract gz linux», пролистываю три рекламы, нахожу ответ на SO, копирую, вставляю, закрываю вкладку. Через неделю — по новой.

<...> Просто tar — это такой синтаксис, который у меня физически отказывается залезать в долговременную память. 

Конец статьи:

Пальцы встали. -xzf-xfz? Дефис или без? Раньше я не задумывался, просто набирал — мышечная память. А тут она пропала.

Откуда взялась мышечная память на tar, если вы его каждый раз c SO копировали?

Мышечная память на Ctrl+C  Ctrl+V. А если серьезно, то я имел в виду ту стадию, когда пальцы начинают писать команду, но на середине ты зависаешь.

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

Видимо, чтобы сэкономить 100500 часов разрабам и девопсам достаточно стикер с двумя строчками:

memcpy(dest, src, size);

tar -xzf archive.tar.gz

Ну все, прикручиваем еще голосовой ввод и клавиатуру можно удалять)

P.S. для тара повесил себе на стену картинку на стену:

Скрытый текст

Хотел написать саркастичный комментарий в духе - 10 лет в девопсе, а не знает про ctrl-r. Но я сам об этом поиске узнал случайно от коллеги программиста, когда уже из администрирования ушел. На минутку уже 20 лет стажа в ИТ индустрии было. Если что - ключевое слово для гугления - bck-i-search

history удобнее, IMHO.

ctrl+r не всегда подходит, особенно если одновременно открыто много терминалов. Выручает grep ~/.bash_history*

Воу, классная штука, не знал. Спасибо!

А теперь ещё на автокомплит в fish shell посмотрите.

Там ещё Ctrl+S должен работать для поиска в другом (прямом) направлении, но на эту клавину забита остановка ввода. Сам я так и не удосужился его выключить. Обидно бывает, когда, то что ты ищешь перепрыгиваешь из-за лишнего нажатия.

Может и стоит вырутить, не знаю даже.

«Инженер — это человек, который не обязан знать всё, но обязан точно знать, где и как это всё найти».

25 лет коммерческой разработки и каждый раз гуглю ожидаемый результат array.sort — когда вернуть 1, а когда -1. Никак не могу запомнить

Там, кстати, довольно элементарно. Всё идёт из операции сравнения, которая по сути вычитание. Самый элементарный сравниватель — это буквально "a-b" (в некоторых языках/библиотеках проверяется только знак возвращаемого значения и не требуется обеспечивать строго -1/0/1).

Наверное вы на себя наговариваете. Либо вам просто лень запомнить несколько букв. Таром можно создать (c), развернуть (x) или проверить (t) tar-архив. Можно наблюдать (v) за процессом. Можно сжать bzip2 (j) или gzip (z). При развертывании или проверке нет необходимости указывать способ сжатия -- оно само. Можно указать имя файла (f), иначе оно в лицо полетит. И эта буква должна быть последней, поскольку за ней как раз и надо писать имя (которое может быть -, если вы таки хотите в лицо, но решили указать это явно).

Авторы даже позаботились о тех, кто сомневается, писать с дефисом или без -- можно и так и так (не без нюансов, но если не выходить за перечисленную выше выдержку из латинского алфавита, то нюансы не важны).

мнемоника для тара довольно простая - нужно просто быть немцем и читать это как

"eXtract Ze File" и "Compress Ze File". А вообще проще поставить в оболчку подсказку команд или какой-нибудь atuin, чтобы можно было в истории подсмотреть как было в прошлый раз. Или хотя бы tldr. На порядок проще и энергоэффективнее, чем теребить кланкеров.

Мне больше нравится eXtract Ze Vacking Files. Не забывал с тех пор как в первый раз услышал.

Спасибо, было интересно прочесть, коллега. Как раз недавно перечитывал
Айзек Азимов - Профессия.

С одной стороны ожидаемо в нашем насыщенном информацией мире просить оператора "Загрузить программу управления вертолётом". С другой - как же предки, давшие имена физическим величинам, как Мария Склодовская-Кюри стала матерью радиохимии без поддержки нейросетей?

Для меня проблема решилась через

Ctrl+R

history | grep <token>

.bash_aliases

.bash_functions -- можете, например, написать функцию "архив()" если хотите непременно на русском

curl cheat.sh/<команда> для новых или редко используемых команд

Аналогично. Когда сам написал alias untar="tar -xvf" или space="du -hs * | sort -hr | head" потом эти команды не забываются. Ну и Ctrl+R для всего что еще не в алиасах.

p.s. a еще есть unzip

я сам люблю нейронки, но использовать их для такой фигни? лол?
почему просто автоматически не парсить скриптом введенную фразу "распаковать FILENAME" и заменять слово "распаковать " в команду? Чисто словарь иметь для парсинга фраз

Поправил системный промпт, получил забавного зверька :)

Отключил intellsense, после того как коллега спросил как называется ф-я делающая то-то, а я смог вспомнить только первые 3 буквы.

Часто вспоминаю коллегу по работе (разработка на C++), который принципиально пользовался редактором Emacs с дефолтной конфигурацией и без подсветки синтаксиса. Может быть, он был не так уж чудаковат, как казалось...

У меня на этот случай в корне папки с проектами лежат текстовые файлы с говорящими названиями. Dotnet.txt для команд, связанные с dotnet и проектами на C#. Git.txt для редко используемых команд git, а также AWS, Docker, Go и т.д.

Практически никакого больше "Гугла", с моим описанием, что и для чего использовать. А также нужный порядок для серии команд. Так что трудно забыть и невозможно потерять.

Вообще вредная привычка все гуглить, что будете делать в закрытом контуре, где инета нет? Как по мне проще, если что-то не запоминается сделать себе склеротичку. Не так много вещей, которые постоянно используешь. И еще мозг штука ленивая, если он знает кратчайший путь, то им пользоваться и будет, на выходе память улетит в ноль, а способность думать самостоятельно сильно упадет. Восстанавливать навыки будет крайне сложно.

что будете делать в закрытом контуре, где инета нет?

Не попадать туда.

chmod 755 vs 644

(Печально смотрит)

Ну есть же символические обозначания прав, вот эти все u(ser)g(roup)o(ther)a(ll)=r(ead)w(rite)(e)x(ecute),… ? Зачем страдать и мучиться, запоминая восьмиричные маски?

chmod u=rwx,og=rx (user: read+write+execute, others,group: read+execute) вместо chmod 755

chmod u=rw,og=r (user: read+write, others,group: read) вместо chmod 644

Странно, мне было проще запомнить в цифрах группы чем что могут значить все эти сокращения. Плюс в коде ты всегда указываешь цифрами опять-таки если создавать файл.

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

Нуу, лично мне проще запоминать слова, а не цифры, и, как показывает само наличие символических обозначений масок прав, так проще не только мне. А потому как таких людей подавляющее большинство, для облегчение сопровождения ими своего кода, желательно использовать именно символические обозначения. Считаю, что незачем злить цифрами интеллектуальное большинство ^_^

Плюс в коде ты всегда указываешь цифрами опять-таки если создавать файл.

Почему цифрами? Зачем цифрами? На каждый бит маски прав есть соответствующий #define. man 2 chmod соврать не даст, да: S_IRUSR, S_IWUSR, S_IXUSR и так далее для GRP и OTH. Полагаю, в других языках также наверняка должны быть соответствующие константы.

IMHO, эти константы ещё сложнее запомнить. USR или USER? или просто U? G/GRP/GROUP, O/OTH/OTHER? read-user или user-read? И что за I в начале, и почему префикс S_?

И даже в команде chmod с простыми однобуквенными обозначениями есть свои сюрпризы. Помнится, в каких-то системах буквенные rwx по умолчанию означали "установить указанные права", а в других — "добавить права к имеющимся". А число — что указал, ровно то и будет.

IMHO, эти константы ещё сложнее запомнить. USR или USER? или просто U? G/GRP/GROUP, O/OTH/OTHER? read-user или user-read? И что за I в начале, и почему префикс S_?

Автокомплит в помощь! Не знаю, как в исхолниках на С, а в исходниках на перле автокомплит vim'а увеиенно находил все имена функций и констант из подключаемых модулей.

Помнится, в каких-то системах буквенные rwx по умолчанию означали "установить указанные права", а в других — "добавить права к имеющимся". А число — что указал, ровно то и будет.

Это во всех системах так, если вместо знака = между ugoa и rwx поставить знак +. И это совершенно стандартное документированное поведение chmod.

Автокомплит в помощь!

И как автокомплитить, если даже не помнишь, что константа начинается именно с S_? Да и констант таких как бы не так уж мало.

$ grep -E '\bS_' -r /usr/include/ | wc -l
222

Ну, ОК, 202, если исключить упоминания в комментариях. И 148 из них начинаются с S_I. То есть чтобы получить внятную подсказку автодополнения, нужно ввести бо́льшую часть самого имени, а для этого надо его помнить. Разве что система дополнения жутко умная и подставляет не все константы, а только соответствующие контексту в вызове функции. Но опять же, а если я в переменную засовываю значение, чтобы потом применить? Контекста уже не будет.

Это во всех системах так, если вместо знака = между ugoa и rwx поставить знак +. И это совершенно стандартное документированное поведение chmod.

Я про запуск без указания оператора. Кроме того, если не указывать, к кому применять права (типа chmod +rwx), то где-то это будет применено к юзеру, а где-то — ко всем. В общем, не супер-важная проблема, можно указывать и явно. Но лично мне проще вписать 0755 и не дёргаться. Буквенные использую, только когда права нужно именно частично модифицировать, а не установить полный набор.

И как автокомплитить, если даже не помнишь, что константа начинается именно с S_?

А чё это, только с S_ , а не с S_I? ;) А если ещё помнить, что за S_I в нужной нам константе должны идти либо R, либо W, либо X, то диапазон поиска совершенно драматически сужается до USR, GRP и OTH. Там, правда, затесались ещё WXU, WXG, и WXO, но ничего страшного, это просто RWX для пользователя, группы и всех остальных, соответственно:

grep -hE '\bS_I' -r /usr/include \
| sed -nEe '/^\s*#define\s+(S_I[RWX][^[:space:]]+)\>.*$/ s!!\1!p' \
| sort -u

Через цифры не выразить операцию "всем файлам убрать execute, всем папкам проставить" и некоторые подобные, придётся городить через поиск.

Зачем страдать и мучиться, запоминая восьмиричные маски?

в моём случае это было 25 лет назад и я помню их гораздо лучше чем таблицу умножения.

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

а вот эти буковки могут значить что угодно

Как это, что угодно? Что в мане написано, то они и значат.

(хотя их тоже помню но не использую)

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

В программировании для установки/сброса бит есть & |

тоже удобнее буковок.

В программировании для установки/сброса бит есть & |

Есть. Но если пользоваться символическими обозначениями прав при вызове chmod, то программу писать попросту не нужно, chmod og-wx . вычислит результирующие разрешения самостоятельно, убрав права группы и всех остальных и не затронув разрешения пользователя.

тоже удобнее буковок.

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

Там дефис или нет? xzf или xfz? Или zxf? Вроде порядок не важен? Или важен?..

Ага, угу, а для системных бэкапов надо ещё не забыть -С / --one-file-system --acls --selinux --xattrs --xattrs-include=\* и опционально --wildcards. И не забыть, что -С / надо указать после имени архива но до имён извлекаемых/добавляемых файлов, иначе случатся абсурд и коррупция, потому что tar всосёт или, наоборот, загадит текущую директорию.

Вот была бы такая команда, которая создавала бы короткое имя для вызова утилиты с набором опций... Да нет, фантастика какая-то!

Вот была бы такая команда, которая создавала бы короткое имя для вызова утилиты с набором опций... Да нет, фантастика какая-то!

Команда есть, называется alias, но беда в том, что созданные с её помощью короткие имена для команд остаются в настроенных системах, а что делать, если попал в ещё не настроенную? Так что надо тренировать моторную память, надо.

Если речь именно про ещё не настроенную систему, а не про мысленные эксперименты с защищёнными контурами и безопасниками, которым больше заняться нечем, то очевидно скопировать туда свой .bash_aliases с настроенной.

Если речь именно про ещё не настроенную систему, а не про мысленные эксперименты с защищёнными контурами и безопасниками, которым больше заняться нечем, то очевидно скопировать туда свой .bash_aliases с настроенной.

Лично для меня, внезапно, весьма вероятен именно вариант с защищённым контуром, безопасником и системой, в которую ничего своего копировать нельзя. Вот и тренирую мышечную память.

Само собой, у меня достаточно своих скриптов для автоматизации моей деятельности, которые я при случае с удовольствием скопирую в новую систему, однако случаются и варианты, когда остаётся только полагаться на свою память и маны.

На самом деле мало смешного.
Многие люди реально не понимают, что для задач типа "системных бекапов" не надо ПОМНИТЬ и НЕ ЗАБЫВАТЬ 100500 ключей.

Достаточно их написать один раз в скрипт сделать_хорошо.

Достаточно их написать один раз в скрипт сделать_хорошо.

… чтобы потом в каком-нибудь ограниченном контуре попасть на систему, где твоего скрипта отродясь не было, и поставить его нельзя, потому что за спиной стоит безопасник и нежно и страстно дышит в ухо с невысказанным вопросом: «А чё это ты тут, падла ты кулхацкерская, какой-то скрипт пишешь, ты бэкап делай!»

Вы ещё забыли добавит, что в этой конторе на всех разъёмах стоят заглушки. С пластилиновыми печатями. На ниточках. И даже позвонить вовне, в свой офис, можно только через коммутатор и телефонистку.

И даже позвонить вовне, в свой офис, можно только через коммутатор и телефонистку.

… а смартфон отобрали на входе и теперь уже никак не получится даже одним глазком подсмотреть в исходник своего скрипта сделать_хорошо, который стопицот лет уже как был заботливо записан в отдельный каталог его диска среди прочего барахла вроде мемчиков, котиков, снимков супермегаважных договоров и этикеток разного коньтуперного барахла с партнамберами и серийными номерами и инсталляций из него различной степени упоротости :)

А вас поймали на улице, привезли с мешком на голове и сказали программировай? ;)

Можно и подготовиться заранее, шпаргалку распечатать..

А вас поймали на улице, привезли с мешком на голове и сказали программировай? ;)

Какое программировай? Бэкапай же!

Можно и подготовиться заранее, шпаргалку распечатать..

Если приглашённый специалист, чтобы сделать бэкап, немедленно полез за шпаргалкой — это уже очень серьёзный удар по его имиджу в глазах обступившей его сплочённой группы товарищей :)

Ладно бы man или info полез читать, а то сразу за шпаргалкой. Не, ну это же не серьёзно!

Можно на всякий случай наколки набить - ну там tar -xzf, regexp..

Можно на всякий случай наколки набить - ну там tar -xzf, regexp..

На всякий случай, у современного GNU tar'а уже давным-давно появились длинные опции --create, --update, --extract, --file и --gzip, а также --bzip2 и --compress. Прямо русским английским по белому, ничего запоминать и накалывать не надо.

Regexp всегда можно подсмотреть в info sed, а PERL regexp — в perldoc perlre.

Пока читал, вспомнил другую статью про оверинжиниринг. Но там автор всё же решил исходную проблему ;)

https://xkcd.com/1168/

Для мелких команд всё так же гуглю.
А если что-то серьёзное делаю - то почти на всех машинах стоит codex или его аналоги. Которым можно сказать "настрой то-то и то то" и они вполне неплохо справляются.

Но в целом да, идея хороша. Единственное, так как часто работаю с мелкими железками - всё равно надо будет через openrouter или аналог стримить.

Еще лет 20 пройдет, и линуксоиды изобретут человеческий GUI с кнопками на экране, вместо прикручивания LLM к консоли

Есть такое понятие - мазохист. И фраза "понты дороже денег". Просто вспомнилось почему-то.

Да нет, мне кажется это массовый психоз. Консольный ввод был нужен 40 лет назад, когда иных вариантов не было.

Когда люди в 2026 году ,сидя перед 4K мониторами и очевидно имея GPU, стирают глаза о бесконечные простыни текста и думают, что так и должно быть....это клиника.

что-то удобнее делать в gui, что-то - через cli. нет одного интерфейса, чтобы править всеми.

вот сейчас у меня примерно 8 окон к разным системам в разных местах. В некоторых 128 гигов RAM, в некоторых - 128 мегабайт.
Устанавливать везде и гонять графику с кнопками туда-сюда ради того чтобы распаковать архив? Серьезно?

А потом, если надо автоматизировать - писать копроприложение, которое будет двигать мышь по экрану и пытаться поймать кнопки, вместо того чтобы просто сохранить нужные команды в текстовый файлик?

Да, такой он, windows-way. Ну его нафиг.

А потом когда число "параметров/конопок" вырастает...становится больше двух.

Все возвращаются к набору команд, которые можно скопипастить.

лет 20 примерно как есть

Скрытый текст

Вот, кстати, наглядный пример, почему многим людям удобнее использовать CLI вместо GUI. Тут на нас вываливается куча мусора, в которой надо повозиться мышью.

да +- как и в венде

Только если нет необходимости гуглить команды или читать маны. Иначе мусора в CLI вываливается ещё больше чем в этом меню на скриншоте.

Вам шашечки или ехать? Пока автор гуглит, у @max9 уже создастся архив и он сможет быстрее вернуться к чтению Хабра.

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

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

Ну и да, бывают ситуации, когда гуя просто нет и альтернатив тоже. Ну знаешь, там сервер какой-нибудь настроить.

Есть в мире один пример, когда у системы всё управление оформлено в своего рода графический и наглядный интерфейс. Это кабина самолёта. Все видели, надеюсь. А знаете что самолётостроители делают с ней сегодня? Понемногу переходят к командной строке для всего, что не может потребоваться вот прям в одну секунду.

Gui к ffmpeg, который отражает его полную функциональность выглядит как-то так:

Не уверен, что это удобнее чем LLM с консолью. LLM тебе сразу даст готовую команду, а тут поди разберись еще.

Это не синтаксис tar плохой. Это у автора профдеформация, когда вместо чтения документации сразу спрашивают гугль или того хуже ИИ.
Но справедливости ради, это касается ныне практически большинства.

Так документацию откуда брать? Я её обычно гуглю...

смотря для чего, а так man

Как бы это странно не звучало,не всегда под рукой компьютер с линуксом, чтобы на нём маны смотреть. И не всегда на нём эти маны установлены...

Это действительно странно.

Если нет под рукой компа с линухом, зачем нужна команда tar вместе с опциями?

Для написания скриптов деплоя

То есть кто-то пишет скрипты вслепую, не имея инструментов под рукой?

"А если будете хорошо плавать - нальём воду!"

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

Иногда в TealDeer более полезная информация. Хотя часто она, наоборот, слишком примитивна.

У Rust та же проблема: у популярных пакетов справочник есть, документации нету. Я как-то сутки потратил, пытаясь понять, как из PNG файла прочитать нестандартную метадату, хотя либа для этого находится слёту. А вот как ей пользоваться, хрен поймёшь, несмотря на обилие текста в doc.rs.

В man есть волшебная кнопка /, которую можно нажать для поиска нужной опции, типа /-f

Это примерно как f1, "типовая вещь которую все знают"

Для особых случаев можно вообще вывести в файл man program > zzz, после чего открыть zzz в своем любимом редакторе и читать хоть с конца к началу.

Да, но /wtf this app does не работает без ИИ, а бывает нужен. Угадать, как называется нужная опция, тоже не всегда просто.

Вот только этот поиск найдёт не только -f, но и всякие "--first", "--delete-file", "well-formed" и так далее. Надо изгаляться с пробелами, но лишний пробел — и вот мы уже не можем найти нужную опцию, потому что там не "-f", а "-f, --force".

Особенно доставляют инструкции вида "а вот это описано в разделе Pattern Matching", но чтобы найти этот раздел, надо сначала прокликать Next'ом ещё сто двадцать упоминаний этого раздела.

В общем, man — штука полезная, тут спорить сложно, но вот юзабилити у неё не ахти.

А для следующего -f есть не менее широко известная букавка n )

Нормально там всё с юзабилити, если знать.

В топ g, в конец G, поиск /, следующее вхождение n, перелист страницы space ...

В общем, vim полезен не только как текстовый редактор (очень удобный), но и многие хоткеи в нем, в манах, и ещё в разных подобных вещах совпадают.

Да, совсем не как в винде, просто по другому.

Да и описание программ "что оно делает" тоже вполне человеческое. Ну не знаю, мне почему-то всегда понятно было, даже когда английский был на уровне "команда инвалидов, нет космоса в комнате"

А для следующего -f есть не менее широко известная букавка n )

Я знаю. И про поиск как прямой через /, так и обратный через ?, и про g, и про G, и про включение-выключение регистрозависимости, и многое другое. Но это не отменяет того факта, что для нахождения требуемой опции часто приходится пробегать через множество нерелевантных вхождений идентичного текста. Нет простого способа сказать "найди мне не просто подстроку в массиве текста, а конкретно опцию с конкретно таким именем". Также как нет простого и быстрого способа заставить мануал перепрыгнуть к конкретному разделу.

Что-то мне даже интересно стало, а если написать man man - там про кнопку / расскажут, или это надо man less читать?

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

Должны наверное, хотя это как бы общеизвестная вещь

Vim, man, more, less, view - универсально

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

Это будет тупо дольше, чем набрать текстом команду, или иными словами - заколебёт.

Нечто среднее - использование хотя бы того же Миднайта: наступить на архив - он откроется, дальше просто копирование файлов между двумя панелями.
+100 к наглядности, -10 к быстроте выполнения.

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

если нужно писать запрос на русском и команда автоматически не выполняется, чем не подходит браузер с любой LLM через веб-клиент на локальной машине? все тоже самое с нулем трудозатрат. нет рекламы, с сервера не нужно ходить во внешний интернет, если продолжать один и тот же диалог, тогда LLM впоследствии вам и cheat sheet соберет удобный на один А4 из ваших же запросов. ну да, команду нужно скопипастить.

автоматизация ради автоматизации потому что могу?

У меня в браузере 100 вкладок. И 8 терминалов открыто.

Я пианист на ALT+TAB.

Вот и вся причина.

Мда))) конечно автору было проще загуглить, чем в терминале набрать man tar

rm -rf /

не работает так давно уже

Интересно, что же произойдёт если попадёт доступ в интернет? Или внезапно доступ к модели будет не доступен?)

Таких проектов довольно много.
В качестве примера - https://github.com/sigoden/aichat

-> % ai -e show current directory size                                                              
du -sh .
> execute | revise | describe | copy | quit: e
1.6G    .



Следующий этап - не прикасаться к клавиатуре, а управлять всем этим голосом :-)

Но если серьёзно, то у вас или задачи слишком простые / некритичные или вы не понимаете досконально как всё работает. Извините, не хочу обидеть, но базовые команды чтобы управлять системой нужно знать очень хорошо и понимать что там происходит внутри.

Есть очень большая разница между "понимать, как все работает" и "запоминать кучу команд с неочевидными названиями и синтаксисом". Знание наизусть ключей tar никак не приближает к пониманию чего бы то ни было.

Я использую ctrl + r в bash, поиск команды занимает секунды

Ровно до тех пор, пока не понадобится редкоиспользуемая команда, которая уже вымылась из истории. Или вообще никогда там не была, так как делается один раз на свежем сервере.

Другой вопрос, что непонятно, накой делать что-то повторяющееся руками. Ситуация повторяется каждые N дней — что мешает автоматизировать? Есть же тот же ансибл, в котором есть модуль unarchive. Вобщем, по-моему, вместо того, чтобы закрутить шуруп хотя бы отвёрткой за неимением шуруповёрта, его тут вбивают молотком.

Мелочь, но мне лично удобнее формулировать задачу на родном языке. Не знаю почему — скорее всего привычка, я на работе всё по-русски обсуждаю.

Это не мелочь.
Это причина того, что вместо tar eXtract gZipped File вам приходится лезть в гугель за магическими букавками xzf.
И даже не попытаться посмотреть man tar, а ведь там всё написано...

Было бы интересно увидеть что-то подобное, но допустим по командам ЯП, или по возможностям фреймворка.

У меня самого было так, что когда переложил часть задач по коду на нейронку, забыл простое open('file', '-r') в Python ))

'-r' - это как?

'-r' - значит read (то есть открыть файл в режиме чтения)

Режим чтения - это просто 'r'. Что означает минус?

Хтьфу, извините, я забыл что без минуса нужно писать.

В том смысле что когда я программирую я помню, а когда писал комментарий забыл.

А потом кто-то переименует ai в матерное слово, и получится прямо "ёп как найти самый большой файл"

Автор только что изобрел Warp Terminal (https://www.warp.dev/) на минималках.

Пошел почитать, начал хихикать, закрыл. За "бесплатно" у них ограниченное изучение кодовой базы, и ограниченный доступ к топовым моделям. В общем, выглядят как те девушки, которые хотят так раздеться, чтобы не выглядеть доступными, но все же и не неприступными.

Кроме что терминал - это где много всего творится. То пароль вводится, то ключик в файле лежит - а это всё "в облако, в облако!"

Ctrl+R или history помогает. А так для команд веду для себя заметки в joplin. Пока достаточно.

а нельзя просто создать файл 'COMMANDS.md' с наиболее востребованными командами? Можно даже в Path поместить специальный скрипт для поиска нужной команды в этом файле, если лень его открывать и искать команду вручную

Да, в Linux традиционно много названий программ и командных опций, которые невозможно запомнить. Всякие "tar -vfx", "gdb", хотя хотелось бы "dbg", "find" с одинарным "-" перед многобуквенной опцией... Такое впечатление, что авторы консольных утилит специально делают такие незапоминающиеся и сложные названия и выбор опций, чтобы максимально затруднить их использование.

Поэтому я 17 лет назад, когда допиливал собственный PIM-менеджер MyTetra, первым же делом сделал себе записульки:

Команды для работы с архивами tar.gz, tar.bz2, tar.xz

Синтаксис команды find

... и прочие подобные записи.

И этим действием я закрыл все свои потребности. Но если я оказываюсь за не своим компьютером, на котором нет MyTetra, я ничего не могу сделать: я просто ничего не помню. Так что автор не один такой.
Другое дело, что 50 строк - это не все что нужно. Нужен еще и постоянный доступ в интернет и доступ к LLM, которого может и не быть. А по законам Мерфи именно в самый нужный момент либо интернет отвалится, либо LLM станет недоступной.

Если же мы позуем локальную LLM, то тогда это не 50 строк на пистоне, а вся среда исполнения LLM вместе со всеми библиотеками и несколько десятков гигабайт весов.

А если немножко подумать, то у tar все опции это стандартные акронимы, а порядок их, кстати, не важен.

gdb это GNU Debugger потому что существует он в паре с GNU C Compiler.

А find уже и забыть можно, он правда очень древний и поэтому чудаковатый.

А find уже и забыть можно, он правда очень древний и поэтому чудаковатый.

Не, find никак нельзя забыть, по очень многим причинам. Чем ещё, например, можно запустить рекурсивную проверку всех контрольных сумм файлов, записанных в раскиданных в разных подкаталогах SHA256SUMS ?

fd конечно, он это в 30 раз быстрее сделает.

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

И я ищу их грепом по ману, что само по себе абсурд.

определённо, ведь есть /

Я его настраиваю на каждом втором сервере.

может пора освоить ansible?

Как-то именно в ансибле я разочаровался в итоге. helm больше понравился. Правда, он кубер ворочал, может в этом дело. Терраформ вроде тоже ничего.

Именно для подобных случаев и придумали графический интерфейс :)

Если вы наберете в Google как распаковать gzip то увидите что сделать это можно командой tar xzf файл, если вы наберете tar - и нажмете таб, то вылезут подсказки и вы узнаете что можно и tar -x -z -f файл, сделать. Возможно вас будет удручать что в 2026 году не догадались сделать автоматическое определение типа архива. Но возможно случится чудо и вы наберете man tar. И увидите там на 20 строке:

tar -x [-f ARCHIVE] [OPTIONS] [MEMBER...]

А на 30 это

tar {--extract|--get} [--file ARCHIVE] [OPTIONS] [MEMBER...]

Для тех кто совсем не может в англиский, что бы распаковать файл достаточно набрать

tar -xf файл

О, интересно. У меня похожая проблема с гитом - очень люблю гит, но не очень люблю командную строку. И прям жутко бесит вбивать руками то, что вбивать на самом деле не обязательно, так как информация уже есть у машины - названия файлов, хэши коммитов и так далее. Поэтому пилю по-немногу такую штуку - вызывается по хоткею, вылезает как панель в Windows 10, понимает текущий репозиторий в активном приложении (VS, VS code, Explorer), анализирует текущее состояние (наличие локальных коммитов, сабмодулей, detached head, незапушенные тэги и т.д.) и предлагает релевантные действия. При выборе действия позволяет визуально задать параметры, например выбрать в табличке коммиты для сквоша.
Естественно, всё легко кастомизируемо: можно добавлять новые кондишены и экшены, UI для задания параметров создаётся автоматически.

Скрытый текст
пока только POC для проверки юзабилити
пока только POC для проверки юзабилити

Зумеры придумали TortoiseGit?

С бубнами и шаманами. Gui для git чуть более чем дофига.

Да нет же. Tortoise использовал много лет, но сейчас всё меньше потому что все базовые операции неплохо реализованы в IDE. Смысле в черепахе немного лично для меня. Но как только какая-то нестандартная ситуация случается, в IDE просто ничего нет, приходится запускать консоль и вспоминать/гуглить. Именно для таких edge-cases и хочется удобства.

Поднял мне самооценку) теперь я просто ОБЯЗАН попасть в девопс

Не могу понять это рофл какой то или искренне автор гордиться оверинжинирингом для простых команд?

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

Блин, огонь. Объеденил решение в статье с идеей @davidaxxonи за пару часов сделал себе штуку, которая не только генерирует команды, но еще и обьясняет, как именно она работает. + записывает команду в историю. https://github.com/vvzvlad/ai_bash

ЛЛмка писала? там есть ряд мелких косячков. И вообще для полного счастья надо чтобы llm перед выполнением запроса ознакомилась с кратким хелпом того, с чем она будет работать. Например, она собирается использовать graphic magick для изменения размеров изображений в папке. Или тот же aircrack-ng. Пусть сначала делает для себя --help или нечто подобное.

Вот тута result = subprocess.run([CURRENT_SHELL, "/c", cmd], check=False) исправил под винду, а писалось "-c" под линукс. Ну это так, мелкие всякие штуки. Логирование тоже исключительно под линукс, тогда зачем распознавать шелл и систему?

ЛЛмка писала?

Конечно. Удобно делать такие инструменты небольшие.

И вообще для полного счастья надо чтобы llm перед выполнением запроса ознакомилась с кратким хелпом того, с чем она будет работать. Например, она собирается использовать graphic magick для изменения размеров изображений в папке. Или тот же aircrack-ng. Пусть сначала делает для себя --help или нечто подобное.

Это сложно, потому что надо несколько вызовов делать: сначала формулируем что используем в ответ на запрос пользователя, потом вызываем хелпы для инструментов, потом пишем ответ.

Вот тута result = subprocess.run([CURRENT_SHELL, "/c", cmd], check=False) исправил под винду, а писалось "-c" под линукс. Ну это так, мелкие всякие штуки. Логирование тоже исключительно под линукс, тогда зачем распознавать шелл и систему?

Просил, чтобы макось/линукс поддерживало, оно винду добавило в комплект, не стал уже исправлять.

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

Ну так гугл поможет, но не заменит понимание

Про синтаксис некоторых тулзов которые поперек сознанию это прям да

Спасибо, собрал себе такое же на основе этого кода с некоторыми доработками.
Доработка подгружает в системный промт данные из двух файлов.
1 - автогенерируемый файл с базовыми характеристиками сервера - версия ОС, ядра, подробности о железе.
Он создается при старте сервера ( и иногда пересоздается ).
Такая информация позволяет подбирать более подходящие команды конкретно для этой машины.
2 - файл с описанием желательного поведения в некоторых задачах.
например: для получения метрик температур ( процессор, система, видеокарты) - делать вызов заранее подготовленного скрипта, в котором уже реализована логика - в каком виде нужно их показать.Вообще, всегда найдется некоторое количество уже готовых типовых скриптов для разных задач, можно их все перечислить с описанием когда использовать.

А что если... Просто в текстовый файлик записать все эти "откровения"? А потом просто поиском по нему пройтись в поисках нужного??? Да не... Ерунда какая то, а как же ИИ, модели и вот это все стильное, модное, молодежное...

А ещё можно вообще блокнот бумажный использовать...))

А ещё можно вообще блокнот бумажный использовать...))

А ctrl+C, ctrl+V как делать?

Автор, а ты когда последний раз проходил собеседование?

А то я тоже не помню, что вчера было, поэтому все конспектирую, решение задач, синтаксис часто используемых команд (тот же tar) - потом поиск выручает. Но на собесе сложно без шпаргалок.

Мышечная память умирает быстрее, чем кажется

Все к этому и идёт )

  1. Как внешний референс ллм можно использовать апи hugginface и там 7b модельку.

  2. Сделать сервисом что бы можно было обратится через curl/wget

  3. Сделать обвес внутри Кеша запросов. Можно через вектор.

    Можно типа своего MCP ( ковырял context7, ну вот векторный поиск он и есть )

  4. Понемногу подсаживать на свой сервис других девопсников )))

Не надо сокеты хранить в /tmp. Для этого /var/run предназначен.

Цивильный фазан (cvfz) и х**вый фазан (xvfz)

create, extract, verbose, filename, permissions, gzip, Change dir - недостаточно очевидно?

Про oh-my-zsh ещё не говорили? Начинаешь набирать команду, потом стрелкой вверх ходишь по истории всего что начиналось с этих символов.

Для bash имеется oh-my-bash

А если еще fzf поставить.... :)

После слов:

> Десять лет в девопсе. Десять. И я гуглю tar -xzf.

Читать дальше не стал.

Да вот да. Даже не знаю, что меня больше шокировало - этот факт или число "плюсов" к статье..

Ощущение что какой-то велосипед.

Есть же готовые AI терминалы Warp, Chaterm, TmuxAI

Спасибо за список. Эту статью стоило написать уже только для того, чтобы найти в комментариях список аналогов :)

Пока буду смотреть как работает этот "велосипед" из статьи.
Но Chaterm заинтересовал, попробую и его.

По мне автор изобрел велосипед который не нужен. Не помнишь команду - зайди в гугл, мануал или спроси chatgpt. Сам грешу таким же правда с ffmpeg и прочими консольными монстрами. Плюс очевидно есть время подумать, не сломает бездумное выполнение команды что-то тем более что агенты иногда ошибаются даже с командами приложений, особенно если в новой версии тулзы вырезали какие то опции или добавили что-то. Такое часто бывает. А без рук, она все равно ниче не напишет.

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

Это все конечно круто, но только один пишет длинные тире. Еще никогда штирл.. ГПТ не был так близок к провалу. Да и стиль повествования в его стиле

Длинные тире в некоторых случаях набираются несложно — в линуксе достаточно просто настроить клавиатуру и использовать Compose Key. В моём случае это lv3:ralt_switch,misc:typo в дополнительных настройках клавиатуры и далее через RAlt и "-" получаю длинное тире.

А вообще, если статья готовилась в чём-то типа ворда или аналогов, то они минусы таки заменяют на длинные тире и надо отдельно ковыряться, чтобы это не делалось.

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

Это все конечно круто, но только один пишет длинные тире.

Откройте для себя Level 3 Switch key и Compose key и окунитесь с головой в бездну различных полезных и не очень закорючек! Например, двойных угловых кавычек «», которыми, согласно правилам русского языка, положено оформлять прямую речь.

мне, как нечасто, но периодически работающему в терминале linux, прямо очень оказалось полезным. Ну вот от души спасибо за идею.
Там выше еще ссыль была на реализацию через GO - в конце вместо запроса на вылопление, ответ выводится в терминал с возможностью редактирования. Мне показалось это удобнее, - сделал как там. Ну и вообще скрипт под себя расширил, докинув пару параметров. Удобно, комфортно, быстро. Спасибо еще раз.

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

Видимо лет пять они подождут пока бородачи выйдут на пенсию, знаний ни у кого не останется, азиаты подгонят термояд - а потом избавятся от человечества. Чем то вроде промпта выпить яду.

И да, Ctrl+r, tar спасает отца русской демократии

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации