Pull to refresh

Comments 48

Современные Unix-команды программы с консольным интерфейсом.

И обязательно цветным выводом! (хотя, сказать честно, я лично не считаю это плюсом)

И не просто цветным, а ещё и псевдографическим (см. Bottom). И начиная с некоторого момента подобный TUI становится даже хуже нормального GUI.

Современные Unix-программы с консольным интерфейсом.

ни одна из современных unix-команд не запустилась в современной unix-системе

```user@host:~$ gping 8.8.8.8

Traceback (most recent call last): File "/snap/gping/13/bin/gping", line 11, in load_entry_point('pinggraph==1.0', 'console_scripts', 'gping')() File "/snap/gping/13/lib/python3.5/site-packages/gping/pinger.py", line 313, in run _run() File "/snap/gping/13/lib/python3.5/site-packages/gping/pinger.py", line 338, in _run for line in it(options): File "/snap/gping/13/lib/python3.5/site-packages/gping/pinger.py", line 251, in _inner ping = subprocess.Popen(args, stdout=subprocess.PIPE) File "/snap/gping/13/usr/lib/python3.5/subprocess.py", line 947, in init restore_signals, start_new_session) File "/snap/gping/13/usr/lib/python3.5/subprocess.py", line 1551, in _execute_child raise child_exception_type(errno_num, err_msg) PermissionError: [Errno 13] Permission denied```

Установлена через snap и всё равно не работает. В этом вся сущность этих современных "команд".

так это не самодостаточные бинарники чтоли?

Пробовал dust и glances — первую не смог скомпилировать, вторую — запустить. не, поскольку «современное», там все на Go/Rust/Python, и тащит восемнадцать тыщ модулей. так что это тупо консольные утилиты, UNIX тут ни при чем (я согласен только на зависимость от libc/ncurses)
У dust зависимостей, кстати, нет.

В snap древняя версия от 2017 года и, видимо, там не прописаны разрешения.
Современная написана на Rust:
https://github.com/orf/gping
Там один бинарник на выходе (правда, крупноват из-за стандартной библиотеки).

ставить что-то из снап и надеяться что с этим не будет проблем.. ахах, позабавил

а как ещё правильно поставить тот же exa на CentOS 7? O:-)

для центоси же есть какие-то copr разве нет?

я не знаю, поэтому и спрашиваю. Про snap понятно, но его заругали, а вот альтернативы мне неизвестны.

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

"Новые" юникс-команды напрочь похоронили эту концепцию ради сомнительной раскраски в консоли.

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

Тоже подумалось, что улучшить старые команды — хорошая идея, но там такой зоопарк с параметрами… они уже совсем не однообразны. Короче, не всё так однозначно.
Из всего этого перечня я много пользовался только jq и эта крутая штука. Не просто раскраска старой тулзы, кроме того, написана утилита хорошо, она понимает в конвеере запускается или нет и красит выхлоп опционально.
Так что не раскраской единой, знаете ли. Постараюсь быть не предвзятым и попробовать, потом будем судить.

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

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

А также "старые" хороши тем, что они уже стоят на всех машинах и работают из-коробки.

Вот разве что jq - действительно полезная тулза.

Во FreeBSD добавляют именно так — libxo поддерживает вывод в нескольких форматах (JSON, XML, ...) и соответственном следующая в пайпе может парсить это как хочет, без дополнительных ключей.

По части оформления статьи есть вопрос. Я, конечно, понимаю, что сейчас пошла нехорошая мода разбавлять подобного рода статьи в сети ТОННАМИ воды, на этом фоне ваша лаконичность похвальна. Однако, она бы стала чуть более удобоваримой, если бы вы не набивший к концу статьи оскомину шаблон: "{cmdname} — это .....". Название уже есть в заголовке. Оно же может быть и ссылкой, или заверните в ссылку специальный символ (U+1F517​) рядом и всем будет понятно куда нажимать.

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

Цветной вывод и рамочки сводят к нулю философию UNIX. Придется искать ключи, чтобы отключить их. Иди они в одно место.

Ну тот же bat форматирует вывод только если stdout является терминалом. А duf имеет ключ для вывода в JSON, которого не имеет обычный df. Так что использование как минимум некоторых из указанных утилит в составе скриптов вполне возможно.

Использую ag и bat для поиска по кодовой базе ядра Linux.

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

Да, половину современных CI/CD систем можно заменить хорошим админом и набором скриптов на баше, но люди всё-равно выбирают почему-то поставить дженкинс и в графическом интерфейсе кликать кнопочки. Так и тут. Для автоматизации процесса лучше брать "старые" юникс команды, но средний пользователь сможем собрать из них пайплайн только по ответам на stackoverflow, и не факт что полученный франкенштейновский монстр будет работать нормально.

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

В результате всё идет к тому, что останется "Линукс от РедХат", появится "Линукс от Майкрософт" и будет небольшая выгребная ямка "Линукса для энтузиастов", куда ни один нормальный человек не сунется.

Это просто bloat, характерный именно для GNU/Linux, а не классических юниксов. Во FreeBSD вместо пачки ключей в стандартные утилиты добавляют libxo, которая поддерживает вывод в нескольких форматах (JSON, XML, ...) и соответственном следующая в пайпе может парсить это как хочет, без дополнительных ключей.

Ещё и библиотек накидать на сервер придёться;)

Это минимальная из проблем. Вот если серверов >10, да все под разными операционками — тащить везде этот зверинец будет интересно.
Например, в debian стандартный cat входит в пакет coreutils. Чтобы вместо cat использовать bat (предположим, они совместимы по ключам, и при использовании в скриптах bat не пытается ничего раскрашивать), нужно всего лишь сделать coreutils-color, в котором все 100 программ переписаны в new style output. И пока не найдется достаточно упорного new style евангелиста — новые программы так и останутся широко известными в узком кругу.

coreutils тоже бывают разные. Например, команда ls на Linux и на FreeBSD несовместимы друг с другом по флагам — одному подавай ls --color для раскрашивания вывода, другому — ls -G.
Ну и к слову, в указанных утилитах там не одним только цветом красивости ограничиваются, там всякие отступы, рамочки. Действительно довольно-таки приятно глазу при ручной работе.

Я не совсем понимаю(ещё юн), но в чём собственно проблема? Bat удобно юзать при работе в терминале, cat для скриптов, их и не нужно совмещать или пытаться подружить.

Лишние сущности же. Зачем учить 2 программы, которые делают одно и то же, но немного по разному? Если мне, к примеру, вздумается посмотреть на раскрашенный текст в консоли, я, пожалуй, открою его в vim.

Их собственно учить и не нужно, cat и bat, lsd/exa и ls и тд. работают одинакого и выдают одни и те же данные при одинаковых опциях, разница в цвете, формате и новых опциях.

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

Bat - Rust
Exa - Rust
Lsd - Rust
Delta - Rust
Dust - Rust
Duf - Go
Broot - Rust
Fd - Rust
Ripgrep - Rust
Ag - C
Fzf - Go
Mcfly - Rust
Choose - Rust
Jq - C
Sd - Rust
Cheat - Go
Tldr - JavaScript/Python
Bottom - Rust
Glances - Python
Gtop - JavaScript
Hyperfine - Rust
Gping - Rust
HTTPie - Python
Curlie - Go
Xh - Rust
Zoxide - Rust
Dog - Rust

Похоже Unix переписывается на Rust (:

Можно сделать и стандартными утиллитами нормальный вывод, и тащить .vimrc .bash_* *profile .screenrc .tmuxrc .muttrc на все свои машины, это как тащить в поход нож для суши, нож для хлеба, нож для мяса, нож для овощей... Вот никогда не куплю французскую машину. К ней не подходит купленный уже инструмент. Была шестерка, семерка, опель, фольц и инструмент спокойно кочевал из багажника в багажник, сохраняя нужность, привычки, ухватки и обрывки изоленты. Но если покупать первую француженку и нет вот этого хлама в багажнике и багаже, то почему бы и нет?

Какая то сложно понятная аналогия. У французов что, гайки 5 гранные? ;)

Да. Французскую муху можно убить только специальной мухобойкой. Газеткой или шлепком - ни.. :))

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

Ну если с ансиблом как то. Мне в итоге оказалось легче перепривыкнуть к дефолту.. "Дама сдавала в багаж. Диван, Чемодан, Саквояж, Картину, Корзину, Картонку И маленькую собачонку." И вдруг да, спасибо, путь дефолта - это Winway. Как то не подумалось и масть сменил. Видать анархисты "Сила Ночи, Сила Дня..." все таки в чем то правы.

Не совсем консольная утилита , но удобный редактор micro . Там можно курсором выставить курсор ( чего очень не хватает в nano ) и подсветка кода

Что значит "курсором курсор" ?

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

У нас есть "системные администраторы", которые "если нет в стандартном наборе, то зачем оно вообще нужно", у нас есть любители GUI, которые "красноглазие это все ваши команды, там ведь надо --help смотреть" и люди, которые просто недовольны цветом в выводе. Очень конструктивно конечно.

При этом fzf, rg и jq например - изумительный утилиты. Ими удобно пользоваться, они на порядок быстрее своих "дедушек", они куда интуитивнее (протестировано на джунах) и надеюсь со временем они проникнут в стандартные наборы, чтобы не приходилось ставить их на каждую новую машину (как люди живут с стандартным grep, ума не приложу). Но видимо пока основная реакция это какое-то снобское "нам эти ваши новоделы не нужны" придет этот момент не скоро.

──╼ #time grep -r 'log' /{etc,usr,var} 1>/dev/null 2>/dev/null 

real    1m3,988s
user    0m22,943s
sys     0m17,273s
──╼ #time rg 'log' /{etc,usr,var} 1>/dev/null 2>/dev/null 

real    0m20,908s
user    0m7,674s
sys     0m18,566s

Да, имеет смысл установить. В 5 раз быстрее. Остальное субъективно. --files-without-match не имеет сокращенной команды :-)). И опять alias rerg='rg --files-without-match', для совершенства.

Не знаю, 7-летней давности это современное или нет, но я жить не могу без закладок на директории:
BashMarks от Huy Nguyen или тут

Sign up to leave a comment.