Комментарии 110
главная особенность у mosh в том что он работает поверх UDP о чём в статье забыли упомянуть. Т.е. с менее стабильным интренетом будет работать проще чем с обычным ssh поверх tcp который будет отваливаться и тебе прийдётся переподключаться. ssh + screen насколько помню решает только проблему с тем что сессия не потеряется
Добавил больше информации про mosh.
Вот удобная альтернатива mosh: https://eternalterminal.dev/
Из-за того, что mosh не сохраняет локальную историю, по факту даже с mosh пригождается tmux или screen. Как уже упомянули выше, главные преимущества mosh это предиктивное эхо (по сути практически до 0 устраняет задержку при вводе текста) и возможность переключать сеть и прочее не теряя сессию.
Если серверов большое корреспондент, то установить все это будет не возможно по разным причинам. По этому намного полезнее уметь и знать дефольные утилиты
Exa
Fd
Procs
Sd
Dust
Starship
Ripgrep
Ripgrep-all
Grex
Fzf
Jq
Peco
HTTPie
Rebound
HTTP Prompt
shell2http
reachable
Lazydocker
Clog-cli
Gotty
mosh
ngrok
teleconsole
tmate
«Интуитивно понятные» названия, если выражаться слогом статьи.
Как можно догадаться что они делают?
Как можно догадаться какую надо использовать, если надо что-то сделать?
Почему программисты не следуют советам, которые сами же дают другим программистам по наименованию?
Или пользователи это другое?
Fd — это простой, быстрый и удобный инструмент, предназначенный для более простой и быстрой работы по сравнению с командой find.
Sd также в 2-11 раз быстрее, чем sed.
Судя по новым названиям, теперь счёт на биты идёт?
Особенно ls (LiSt of files) -> exa (wtf??) интуитивно понятно (coвсем нет).
Также sed (Stream EDitor) — -> sd (sd card?? )
find -> fd (File Descriptor??)
exa — вероятно, examine (files)
А lsattr что за атрибуты показывает? ;)
Посмею добавить свое смешное мнение.
exa (examine) — скорее экспрессивное "че за...?!"
ls (list) — скорее нейтральное "а хто тута?"
Имел случай, когда по какой-то причине в некотором каталоге накопилось более 40К файлов. ls
— падал, даже ls -U
не помог, только find -type f
. Интересно, в таком разрезе, как некоторые из предлагаемых, несомненно прекрасных, утилит справляются с такими проблемами?
Скорее всего, в программе на C используется статический буфер, размера которого должно хватить всем. Если так не делать (на любом языке) — не будет этой проблемы.
Только что для примера нагенерил миллион файлов со средней длинной имени >100 символов — всё ок.
ls без маски использовался? Обычная ситуация, когда маска раскрывается в слишком длинный список и шелл не может запустить команду, но это не проблема ls.
$ ls *
bash: /bin/ls: Argument list too long
1. ls, find и питоновский os.readdir() используют одну и ту-же функцию glibc readdir для чтения каталога. Поэтому остается непонятным почему у автора коммента выше ls падал а find отрабатывал.
2. 32К это размер буфера с которым readdir вызывает syscall getdents, и это так для любой программы использующей readdir (ls, find, os.readdir(), etc), поэтому слова о том что 32К это «мягкий лимит для ls» — звучат странно.
Да, формулировку "мягкий лимит" подобрал некорректно.
В целом, резюме по статье поясняет, что это особенность реализация на системной функции.
Ради интереса можно поискать результаты замеров по скорости для exa
, ls
или lsd
, на таких специфичных случаях.
За 10 минут я нашёл только поверхностные сравнения:
Хорошие названия консольных утилит краткие и уникальные
Командная строка не предоставляет средств для легкого изучения новых команд, к сожалению. Их прежде всего должно быть легко и быстро печатать, а сами команды и их свойства можно нагуглить при желании :).
Как можно догадаться что они делают?Как будто стандартные команды имеют очевидные названия… Почему cat, если должен быть concat, при чём здесь котики? Почему вывод строк в обратном порядке — tac, а не reversecat? ls??? ps??? Не зная истории, как догадаться, что grep — это поиск регулярными выражениями? Может, [ — хорошее название?
Почему бы им не последовать?
Я бы сказал, что конкретно [
— не такое уж и плохое название — при написании конструкций вроде [ -lt $a $b ]
выглядит вполне прилично, маскируясь под синтаксис языка (и в итоге породив [[ ]]
, которое уже настоящий синтаксис). А если не устраивает такая форма, можно использовать test
, менее "магическое" название той же утилиты.
Вот-вот, у меня ощущение, что я наткнулся на сундук с бриллиантами, но не могу их взять — из рук выскальзывают (( как всё это запомнить?? И если потом привыкну к ним, как работать с системой, где это все не установлено? (
Мне кажется, что удобнее будет сделать автозамену и не париться с запоминанем. Как с классическим ls:
alias ls='ls --color=auto'
Надо просто по одному добавлять инструменты. А ещё, запомнить помогают такие штуки как Anki — можно туда набить карточек с вопросами "Если я хочу получить список файлов, какая команда в терминале мне нужна?" на разные лады и с перечислением всяких полезных опций, то благодаря тому, что это активное вспоминание и идёт по правильному расписанию, содержимое вбивается в мозги просто замечательно.
Ну мне больше нравится mindforger, так что если я что-то забываю, потому что редко пользуюсь, я заглядываю в свои блокнотики и всё становится хорошо! Главное не забывать записывать и правильно расставлять хэштеги!
И если потом привыкну к ним, как работать с системой, где это все не установлено?написать маленький плейбук на ансибле, который их доустановит. Или собирать пакером образ сразу с ними всеми. Или страдать :)
Отнюдь не претендую на истину в последней инстанции, но я бы предложил строку вызова давать в виде текста. Тогда ее всегда можно скопировать в консоль и тут же поиграться с параметрами. А результат работы уже можно представить по разному:
- если это просто текст — то пусть и будет текст
- если важно показать цветовое оформление — то можно и графический скриншот
- если вывод достаточно длинный — то результат спрятать под кат, чтобы не раздувать статью
Кажется, что Rust (и, в меньшей степени, Go) очень хорошо подходит для написания небольших и очень производительных консольных утилит, так что ИМХО выбор языка вполне оправдан в 2021 году-то :).
Недавно тут статья про exa была, и выяснилось, что в отличие от ls
эта самая exa
в размере в 10 раз больше чем ls
, и при этом тянет кучу системных библиотек, в отличие от ls
, которая только libc тянет. Так что нет — ни разу не 'небольших'.
А какой примерно размер у ls и у exa? Если, допустим, ls весит 500 Кб, а exa 5 Мб, то ИМХО всё равно можно считать бинарник небольшим, поскольку функциональность не сравнить, стартует он всё равно мгновенно, даже если «на холодную», и т.д. Если это 5 Мб против 50, то тут уже наверное можно о чём-то поспорить, но я лично не верю, что там бинари настолько большие получаются.
Что-то мне подсказывает что есть связь с https://zaiste.net/posts/shell-commands-rust/ :-)
Потому что на расте быстрее и проще написать подобные утилиты
Подробнее на русском myroad.club/kak-ispolzovat-komandu-fd-v-linuxТочно на русском? Слова-то вроде все русские, а вот текст в целом выглядит странно, и не во всех предложениях вообще есть смысл:
Он имеет упрощенный синтаксис, использует разумные значения по умолчанию и обладает встроенным поведением здравого смысла. Давайте пройдем его темпами.
fd команда не предназначена для замены традиционный find команда, которая имеет был на линуксе, ну вечно
Красиво, но пёстровато. У всех этих утилит есть несомненно большой недостаток — они написаны на достаточно экзотическом языке и требуют отдельной установки, которого по умолчанию в системе нет. Мне встречались системы без perl, хотя, к счастью, там были команды из "великой тройки", то есть grep/sed/awk.
У всех этих утилит есть несомненно большой недостаток — они написаны на достаточно экзотическом языке и требуют отдельной установки, которого по умолчанию в системе нет.
Rust — компилируемый язык. Если вы ставите эти утилиты из репы вашего дистрибутива, то никакого Rust-специфичного рантайма в системе не будет.
Я умею это и понимаю, что есть ситуации когда оно нужно.
Но по моему это скорее исключение.
А реально что то делаешь или в графической среде или, если совсем беда, в MC и ему подобном.
По крайней мере я использую все утилиты командной строки только в скриптах. А там мне без разницы насколько оно красивее и изящнее. Важно лишь что бы данная утилита имелась в наличии.
А многие ли работают в командной строке?
Ну допустим я.
Вообще, это удобно, если уметь.
К примеру, как бы вы решали задачу взять json(массив записей), вытащить из него авторов каждой записи(они там прописаны), посчитать число записей на автора и отсортировать их по убыванию? Можно конечно написать скрипт на Python, а можно воспользоваться утилитками командной строки, включая приведенный тут jq.
Аналогичная задачка — быстро найти закоммиченные в VCS симлинки. Здесь нет на самом деле привязки к VCS, просто поиск симлинков в директории был интересен именно для этого.
А после какого-то количества лет работы с linux большинство вещей быстрее сделать через консольные команды.
К тому же, написанный однострочник командами можно потом запихнуть в скрипт, а вот список действий из MC — врятли.
Хотя, возможно, стандарты и пора расширить и углУбить.
Спасибо. Я часть добавил и наткнулся на пост https://xakinfo.ru/network_administration/sysadmin-tools/
Если я не успею и не добавлю остальные, вы пожалуйста напишите комментарий.
Добавил sponge. Спасибо.
Как вы бы описали утилиту sponge?
Sponge легко эмулируется с помощью awk, также perl, который есть почти всегда, и python и другими, которые иногда уже установлены по умолчанию.
Например, https://github.com/ildar-shaimordanov/perl-utils#sponge
Если внимательно подумать, то и редирект в какой-нить
dd bs=$(cat /proc/meminfo|head -n2|sed '1d;s/^MemFree\:\s*//;s/ kB$//') of=/dev/stdout
сойдёт. ;-) Ну это если памяти не жалко. Зато засосёт что твой Спанчбоб, и есть везде.
Как Вы сложно выразились в субшелле. Можно ж было проще, например так:
cat /proc/meminfo | awk '/MemFree/ { print $2 }'
Но единственный минус привыкания к новым утилитам в замен старым — их нужно ставить
Когда у тебя 10+ серверов в разных инфраструктурах и ты привыкаешь к таким вариантам — эффективность использования консоли может резко упасть на нет
Пока писал комментарий, понял — нужно написать утилиту «установщик», которая умеет смотреть в репозиторий для подтягивания конфига.
Выложить эту утилиту в самые распространённые дистрибутивы, научить её подтягивать конфиг со своего репо с настройкой (так можно под рукой держать несколько репозиториев с разными пресетами) и одной командой устанавливать на сервер то, что описано в пресете.
А ещё уметь обновляться нужно. Например — обновляешь свой пресет, логинишься в консоли и утилита автоматически посмотрит в использованный ранее пресет и увидит, что что-то изменилось и предложит доустановить.
Если есть такое — дайте ссылку, буду очень благодарен.
Пока писал комментарий, понял — нужно написать утилиту «установщик»
Это называется Ansible/Chef/etc
На самом деле была утилита, которая скачивала и устанавливала подобные утилиты. Но я не помню.
А зачем велосипед то изобретать? Пишешь playbook со всеми нужными утилитами, кладёшь их в локальную репу, раскатываешь на все сервера. При изменении — повторяешь. Profit.
Нашел. https://github.com/devops-works/binenv
Попозже добавлю в пост.
Баловство, но зато интерактивное: up — the Ultimate Plumber.
ncdu — простой и удобный инструмент для просмотра размера каталогов и освобождения места на диске
htop — не понимаю, как его можно не упомянуть
А может кто посоветует… наверняка же есть утилита, чтобы в неё вбить десяток частых команд типа "systemctl restart httpd" и вызвать их через (псевдо)графическое меню или номер, вроде "shortcut 1"..?
Автокомплит по Ctrl+R?
Еще можно насоздавать скриптов в ~/.local/bin
В zsh
просто великолепнейший автокомплит (включая ключи и параметры), подсветка синтаксиса и вот это всё. Разумеется с плагинами, куда-ж без них. Ну а так, через fzf
можно что-то такое организовать. А ещё есть всякие странные менеджеры всего подряд...
По нарастанию гибкости использования: алиасы, шелл-функции, шелл-скрипты.
в .basrc алиасы и функции
alias sreht='systemctrl restart httpd'
но надоедает, а вот функции уже имеют смысл
sreht () {
nginx -t || echo "товарищь, смотри воба " && return 13
systecmctl restart httpd
moncho.github.io/dry
gh — утилита для работы с GitHub из консоли, например можно создать Pull Request
github.com/cli/cli
gitlab — аналогичная утилита для работы с GitLab (неофициальная)
github.com/NARKOZ/gitlab
watch — запуск любой команды каждые N секунд, позволяет на раз-два сделать реалтайм мониторинг в консоли
runnel — автоматический запуск туннелей SSH с переподключением при обрыве соединения
Для редких случаев работы с kernel ещё можно добавить kmon. Его уже упоминали в схожей публикации https://habr.com/ru/post/495882/
Полезные консольные Linux утилиты