Каждый, кто привык работать в консоли, согласится — запускать команды из командной строки в большинстве случаев быстрее, чем из GUI. И выполняются они быстрее.
Почему так?
Во-первых, консоль потребляет меньше ресурсов. Поэтому быстрее реагирует на команды (меньше задержка на ввод), быстрее выполняет задачи (меньше циклов CPU). Во-вторых, запускать команды с клавиатуры можно практически вслепую, не глядя на экран, с мышечной памятью горячих клавиш и автодополнением. Ты практически сливаешься с компьютером в единое целое, когда вводишь команды одну за другой, ждёшь ответа от удалённого сервера, парсишь результаты или запускаешь скрипты с цепочками из программ, где следующая берёт результат выполнения предыдущей.
Преимущества текстового интерфейса
Лучше всего понять преимущества консоли, если посмотреть на примеры самых плохих UI. Это злоупотребления цветом, звуком, расположением элементов:
- несочетающиеся ядовитые цвета;
- непонятные кнопки;
- всплывающие окна;
- капчи с глупыми задачами;
- окна, развёрнутые на весь экран, которые невозможно свернуть;
- манипуляции поведением, когда нужный нам выбор спрятан маленьким шрифтом в углу, а ненужный выбор выделен по умолчанию;
- и многие другие...
Это далеко не полный список. Сделать хороший графический интерфейс непросто. Хотя в этой области есть заранее сложившиеся стандарты, но дизайнеры интерфейсов часто пытаются выразить свою индивидуальность и придумать какие-то инновации, которые не всегда понятны. Или они ориентируются на широкую аудиторию юзеров, так что профессионалу пользоваться их продуктом просто противно.
В общем, есть миллион способов испортить GUI. Если же устранить все ошибки дизайна, то в итоге получится что-то минималистичное… вроде текстовой консоли.
Преимущества консоли и текстового интерфейса:
- Скорость и эффективность. Это особенно полезно при работе с большими объёмами данных и выполнении задач, которые нагружают CPU и память.
- Гибкость. Консоль позволяет выполнять сложные операции с помощью команд и скриптов, в том числе программировать сложные последовательности команд, принципиально недоступные через GUI.
- Управляемость. Консоль даёт прямой и точный контроль над ОС и приложениями. Может детально контролировать каждую команду и её параметры, получать подробные отчёты об ошибках и статусе выполнения.
- Универсальность. Это универсальный интерфейс, доступный на практически на всех ОС, при этом многие команды выполняются стандартным образом на всех системах без необходимости изучать различные GUI.
- Удобство удалённого доступа. Текстовая консоль легко доступна через удалённое соединение по SSH (Secure Shell). Это позволяет администраторам удалённо управлять серверами и компьютерами, даже если они находятся в другой локации.
- Автоматизация Как мы уже отмечали, для консоли можно создавать скрипты и автоматизировать задачи. Это особенно полезно для повторяющихся операций и пакетной обработки. А в жизни обычного человека почти все задачи — повторяющиеся, как это ни печально...
Современные консоли
Поскольку текстовый интерфейс намного эффективнее GUI, многие профессионалы и разработчики выбирают именно его для повседневных задач. А если инструмент такой важный, то наверняка будут попытки его улучшить. Так и есть, в последние десятилетия в обычную консоль добавили:
- цвет;
- вкладки (табы);
- ASCII-графику для вывода картинок и интерактивных элементов, например, графиков, диаграмм, индикаторов выполнения и др.;
- встроенный браузер;
- встроенный медиаплеер;
- и многие другие фичи.
Посмотрим на некоторые из современных консолей.
Например, Tabby — «бесконечно» расширяемая консоль с поддержкой вкладок.
Из других особенностей:
- Работает под Windows, Mac и Linux.
- Встроенный SSH-клиент с менеджером соединений, передачей файлов через SFTP и Zmodem.
- Серийный терминал.
- Поддержка PowerShell, PS Core, WSL, Git-Bash, Cygwin, Cmder и CMD, все оболочки поддерживаются в одном окне.
- Полная поддержка Юникода, включая символы двойной ширины.
- Вкладки на любой стороне окна.
- Запоминание вкладок и панелей.
- Индикаторы прогресса и уведомления об активности на вкладках.
- Правильная работа с оболочкой в Windows, включая завершение вкладок.
- Встроенный зашифрованный контейнер для секретов SSH и конфигурации.
- Оформление и цветовые схемы.
- Полностью настраиваемые ярлыки и многоаккордные ярлыки.
- Дополнительный режим
quake
(консоль прикреплена к одной из сторон экрана).
- Дополнительная глобальная горячая клавиша для фокусировки/скрытия консоли.
Ещё один пример продвинутой консоли — Magit, но это специализированная консоль конкретно для работы с Git, то есть текстовый клиент для Git в Emacs.
Хотя это довольно старая программа (с 2008 года), но она показывает, насколько мощной и удобной бывает специализированная консоль «на стероидах». Насколько быстрее в ней запускаются те же команды Git, по сравнению с многочисленными GUI, а также по сравнению с обычной консолью.
На macOS из альтернативных терминалов можно назвать iTerm2 и Warp, под Windows и Linux — PuTTY, KiTTY, WezTerm и многие другие.
В качестве бонуса: небольшой список продвинутых инструментов командной строки для macOS.
Браузеры без GUI
Вообще, текстовые браузеры появились на заре веба до GUI, но потом про них забыли как про древний анахронизм. Однако сейчас эти образцы минимализма как будто переживают второе рождение.
Например, headless Chrome без графического интерфейса повсеместно используется для автоматизации скрапинга и ботов. Его же можно использовать в программах для автоматизации различных действий в интернете.
Браузер без GUI запускается командой
chrome —headless=new
.В последних версиях разработчики Chrome установили по умолчанию новый режим работы Headless, который раньше назывался Native Headless. Он значительно усложняет распознавание headless Chrome по отпечатку, по отсутствию плагинов или объекта
window.chrome
. Из юзер-агента убрали подстроку HeadlessChrome
.Было:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/111.0.5555.0 Safari/537.36
Стало:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
Впрочем, headless Chrome по-прежнему распознаётся с помощью JS-фингерпринтинга, хотя и сложнее, чем раньше.
Добавлены и новые флаги типа
--dump-dom
Например, такая команда отправляет DOM целевой страницы в stdout (после парсинга HTML и выполнения скриптов):chrome --headless=new --dump-dom https://habr.com/
Скриншот целевой страницы:
chrome --headless=new --screenshot --window-size=412,892 https://habr.com/
Сохранение страницы в PDF (по умолчанию создаётся файл
output.pdf
в текущей рабочей директории) по таймеру через 5000 миллисекунд:chrome --headless=new --print-to-pdf --timeout=5000 https://developer.chrome.com/
В новом режиме можно даже использовать удалённое инспектирование, если транслировать WebSocket URL в stdout:
chrome --headless=new --remote-debugging-port=0 https://developer.chrome.com/
… и удалённо подключиться к нему:
DevTools listening on ws://127.0.0.1:60926/devtools/browser/b4bd6eaa-b7c8-4319-8212-225097472fd9
Есть даже опция просмотра страницы в реальном времени:
▍ Kristall
В наше время редко появляются новые браузеры. Поэтому стоит сказать пару слов о Kristall, принципиально новом кросс-платформенном браузере, работающем только в текстовом режиме по новому интернет-протоколу Gemini, который легче и безопаснее обычного HTTP/HTTPS (для обратной совместимости оставлена поддержка старых интернет-протоколов HTTP, HTTPS, Gopher, Finger).
Да, формально у Kristall есть графический интерфейс и по ссылкам можно щёлкать мышкой, но этот браузер не поддерживает CSS/JS/WASM и графические сайты в принципе.
Репозиторий, официальный сайт со ссылками на стабильные релизы версии 0.3, а также на бета-версии под Windows и macOS.
Операционки
Благодаря набору Distrobox у нас есть доступ из консоли ко всем популярным дистрибутивам Linux с прямой и обратной совместимостью для любого софта.
Как можно догадаться, дистрибутивы запускаются из контейнеров Podman/Docker (по образцу Toolbox) и излишне потребляют память, но если проблем с производительностью нет, то выглядит это очень удобно. Контейнер тесно интегрируется с хостом, делит с ним пользовательскую папку
HOME
, внешние накопители, USB-устройства, окна (X11/Wayland) и аудиоканал.Демо:
Веб-сервисы
Многими веб-сервисами и приложениями можно пользоваться без всякого браузера, напрямую обращаясь к API и запуская команды из консоли. Например, программа ffsend для отправки файлов через сервис Send:
Поддерживается отправка файлов до 1 ГБ. Все файлы шифруются на стороне клиента, можно установить пароль. Время жизни файла в онлайне — до 20 загрузок или 24 часа с момента публикации.
Загрузка файла:
$ ffsend upload my-file.txt
https://send.vis.ee/#sample-share-url
Скачивание:
$ ffsend download https://send.vis.ee/#sample-share-url
Получение информации о файле:
$ ffsend info https://send.vis.ee/#sample-share-url
ID: b087066715
Name: my-file.txt
Size: 12 KiB
MIME: text/plain
Downloads: 0 of 10
Expiry: 18h2m (64928s)
Итог
Таким образом, из консоли можно загружать веб-страницы и любые файлы из интернета, торренты, инициировать чат, редактировать фотографии и видео, просматривать файлы разных форматов, читать эхо-конференции, получать и отправлять почту, управлять удалённым сервером, публиковать документы в открытом доступе, запускать любые программы и т. д.
В целом, консоль предлагает больше контроля, гибкости и эффективности, особенно для опытных пользователей, сисадминов и разработчиков.
Выиграй телескоп и другие призы в космическом квизе от RUVDS. Поехали? ?