Почему в 2025 мы все еще используем CLI? Вокруг так много прекрасных pixel-perfect GUI на OLED-экранах, а интернет провели даже в часы, очки и кольца. Как проектировщик взаимодействия с серверной ОС я часто участвую в дискуссиях на тему ‭«GUI vs CLI». Это вдохновило меня поисследовать, почему CLI такой, какой есть, что подарила ему современность и почему GUI до сих пор не заменил его на серверах.

Используйте навигацию, если не хотите читать статью полностью:

Взгляд в историю

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

Перфокарты и ткацкие станки

Начнем с теста на возраст. Что вы видите на картинке?

  • Пустая перфокарта  — 1 балл.

  • Школьный бланк блиц-опроса по литературе — 0 баллов.

Источник.

Продолжаем тест. А что здесь?

  • Заполненная перфокарта — 1 балл.

  • Испорченный школьный бланк блиц-опроса по литературе — 0 баллов.

Источник.

Расшифровка результатов:

  • 0 баллов — вам до 40.

  • 1 балл — вам от 40 до 60.

  • 2 балла — вам от 60 до 220.

Первые перфокарты отсылают нас в 1804 год к Жаккардовым ткацким станкам. Станки использовали в качестве «задания»  тонкие карточки из картона, содержащие код узора. Код был реализован наличием или отсутствием отверстия в определенной позиции карты.

Применение перфокарт на ткацком станке. Источник.
Применение перфокарт на ткацком станке. Источник.

В 1832 году перфокарты применили в «интеллектуальных машинах» коллежского советника С. Н. Корсакова, механических устройствах для информационного поиска и классификации записей, а также в проекте «аналитической машины» Бэббиджа. В конце XIX века началось использование перфокарт для обработки результатов переписей населения в США. Обработка записей заняла восемь лет! По приблизительным подсчетам, гигабайт информации, представленной в виде перфокарт, имел бы массу примерно 22 тонны.

Табулятор. На входе он принимал перфокарты как источник ввода информации, 1947 год. Источник.
Табулятор. На входе он принимал перфокарты как источник ввода информации, 1947 год. Источник.

Время не стояло на месте. Постепенно перфокарты заменялись магнитными носителями, а табуляторы — мейнфреймами. Следовательно, в IT того времени начались массовые кадровые изменения. Перфораторщики и операторы табуляторов стали программистами, системным аналитиками и операторам ЭВМ. Их новыми интерфейсами взаимодействия с вычислительными мощностями стали телетайпы.

Телетайпы

Телетайпы получили свое название по имени компании Teletype Corporation, выпустившей одну из наиболее популярных коммерческих моделей этого устройства в 1963 году. Телетайпы были интерфейсами мейнфреймов своего времени: операторы вводили команды и получали распечатку результатов. Кроме того, телетайпы применялись для загрузки программ и  передачи информации — как аналог электронной почты.

Teletype Model 33. Источник.
Teletype Model 33. Источник.

Teletype Model 33 был одним из первых продуктов, использовавших ASCII-стандарт для кодирования символов.  Благодаря своей низкой цене и совместимости с ASCII модель 33 получила широкое распространение. Большое количество проданных телетайпов повлияло на разработку фактических стандартов в 1960-х годах.

ASCII

ASCII (American Standard Code for Information Interchange) — это способ кодирования латинских букв и дополнительных символов для передачи их по линиям связи. Стандарт впервые был опубликован в 1963 году как решение проблемы разнообразия существующих кодировок того времени. Кстати, в таблице ниже используются коды от 0x00 до 0x7F, то есть только половина байта. Почему так и куда делся восьмой бит, можете предположить в комментариях.

Кодовая таблица ASCII. Источник.
Кодовая таблица ASCII. Источник.

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

ANSI

Сейчас мы говорим «ANSI», когда имеем в виду расширенную кодировку с дополнительными возможностями. Но на самом деле ANSI (American national standards institute) — это целый институт стандартов.  Инженеры прошлого явно имели тягу к прекрасному и даже в таких ограниченных условиях нашли способ добавить цветов и графики в интерфейсы, а также управление курсором. Так появилась псевдографика.

В ней блочные символы (█, ▒, ░) применялись для рисования интерфейсов, а плоские элементы(─, │, ┌, ┐ и другие) —  для таблиц, меню и диалоговых окон. А еще псевдографика позволяла создавать цвета, звуки и позиционировать символы в любом месте.

Такие интерфейсы в наше время могут быть реализованы, например, с помощью ncurses — фреймворка для управления курсором и создания TUI (Text User Interface) или более современных типа Ratatui.

Сейчас в моду вошли ностальгические ANSI- и ASCII-арты. На их сравнении покажу отличия в кодировках. Вот пример ANSI-арта:

Ладно-ладно, это просто исходник арта, открытый текстовым редактором, который добавил дополнительные символы для управления цветом и спрятал некоторые непечатные знаки. В устройстве вывода эти символы интерпретируются в приветственный экран  SelectOS:

А изначально этот арт был мною отрисован в ASCII, и цвета мы назначили позже с помощью скрипта, который добавил к разным символам разные кодировки, отвечающие за цвет.

--------------------      YOU ARE WELCOME TO      --------------------
----------------------------------------------------------------------
 4444444            888                     44     8888888    8888888 
44     44  888888   888   888888   888888  444444 88     88  88     88
 4444     88    88  888  88    88 88    88 444444 88     88   8888   
    4444  8888888   888  8888888  88        44    88     88      8888
88     88 88        888  88       88    88  88    88     88  88     88
 8888888   888888   888   888888   888888   8888   8888888    8888888 
----------------------------------------------------------------------
----------------------------------------------------------------------
                                         
                                       ## ##                       ++ 
      ********   *******                   ########             +++++ 
    **        ***       **          ##                ##        ++  ++
   **         **          **       ###       ######## ###       +++++ 
   **        *            **       ###        ###########        ++   
 ** *                     ***       ##                ##              
*                          ***     ## # ##  ########                  
**                         **     ## ## ##  ########                  
 ******************** *****       #######      ###                    
                                 ## #####       ##                    
                                                                      
         ## ########            ## ## #         ########              
                    ##         #######                                
               #####  ########         ##                             
                #####  #######          ##########    ##              
                #####  #######          ## ######     ###             
                 ## ## #######         ## ########    ###             
                            ## #######                ##              
                                           ## #######                 
                             ## ###                                   
   ++                        ### ##         ## ###                    
 +++++                        ##  ##         ## ##                    
++  ++                         ## ##         ##  ##                   
+++++                            ##### ##    ### ##                   
 ++                                             #######

В общем, аплодируем стоя инженерам прошлого века, давшим тренд на ANSI- и ASCII-арты спустя 40 лет!

80 символов

Если вам доводилось играть со шрифтами в консоли, возможно, вы уже столкнулись с ограничениями ширины в 80 или 132 символа. Почему так? Потому что перфокарты IBM имели 80 колонок и стали стандартом для мейнфреймов IBM System/360. 

В телетайпах и пишуших машинках тоже использовали 72-80 символов в строке для удобства деловой переписки. Людей того времени можно понять! Современные десктопные мессенджеры тоже используют близкое количество символов для ширины баббла с текстом — около 56 символов.

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

Легенда терминалов VT100

Цитата из введения в User Guide:

«The VT100 terminal is designed to work very much like a typewriter. This guide will tell you everything you need to know to use your terminal».

Мой свободный перевод: «Терминал VT100 создан, чтобы  работать как  печатная машинка. Это руководство подскажет вам все, что необходимо знать при использовании вашего терминала».

VT-100. Источник.

Он не был первым и тем более последним, но стал одним из самых популярных. В клавиатуре VT100 уже использовались механические переключатели, которые стали прототипами Cherry MX. Это наследие, которое можно встретить в современных механических клавиатурах. И в целом формат клавиатуры был очень схож с тем, что мы используем сейчас.

Источник.

VT100 был сравнительно мал, но весьма тяжелым — монитор с клавиатурой весили под 16 кг согласно спецификации в техническом мануале. VT100 производился компанией DEC на основе микропроцессора Intel 8080. Вдобавок к основным своим возможностям терминал поддерживал работу с внешним принтером, обладал графическими возможностями и небольшой памятью.

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

Selectel Tech Day — 8 октября

Разберем реальный опыт IT-команд, технический бэкстейдж и ML без спецэффектов. 15 стендов и интерактивных зон, доклады, мастер-классы, вечерняя программа и нетворкинг. Участие бесплатное: нужна только регистрация.

Зарегистрироваться →

Современность

В середине XX  века произошел бум написания программ. Первые из них писались под конкретные ЭВМ и их было сложно переиспользовать на других устройствах. Когда появились операционные системы, они предоставили API для программ и несколько унифицировали разработку ПО под ОС, а не под модель устройства. Операционка могла работать со своим перечнем железа, запуская на нем нужный софт, который становился все более переиспользуемым и человекоориентированным. Так пришло время графических интерфейсов (GUI), упростивших  жизнь и работу пользователям ПК.

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

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

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

Командная строка (CLI, command line interface) — интерфейс взаимодействия с системой. Это скорее парадигма взаимодействия человека и системы, а не конкретная программа или компонент. CLI описывает набор правил и схему взаимодействия «команда–ответ».

Приглашение командной строки — это символы, которые выводятся перед тем, как передать управление пользователю. Это системный «префикс» перед пользовательским вводом. Он может выглядеть, например, так:

  • root@selectos: ~#

  • #

  • C:\Users\admin>

Командный интерпретатор (shell) —  программа, которая обрабатывает пользовательский ввод в командной строке. Примеры самых популярных интерпретаторов: sh, bash, zsh, fish. Оболочки отвечают за интерпретацию пользовательских команд и их запуск. Помимо этого интерпретаторы обладают фичами, улучшающими взаимодействие. Набор фичей может отличаться, но в основном это  история команд, автодополнение, алиасы, подсветка синтаксиса, кастомизация приглашения.

То, что мы видим на современных компьютерах и в быту называем то консолью, то терминалом, то командной строкой  — это эмуляторы терминала (хотя во многих ОС эти программы имеют название «терминал» или «командная строка»). Это графические приложения, которые предоставляют интерфейс, похожий на физические терминалы. Только теперь «терминал» — это просто окно на экране компьютера, а «мейнфрейм» — это операционная система компьютера.

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

Зачем это все

Аварийное восстановление системы

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

Автоматизация и скрипты

Массовые операции для специфичных непопулярных наборов действий вряд ли будут реализованы средствами GUI. Утилиты командной строки имеют более высокий порог входа, меньше проверок и зачастую позволяют эффективно и быстро выполнять действия, которые в GUI даже не делают — слишком сложно для пользователей, а количество кликов по кнопкам умножило бы на ноль все юзабилити по сравнению с текстовым вводом. Это как ввод даты: порой проще просто написать вручную, чем взаимодействовать с интерактивным календарем в поиске нужного года и месяца. 

Ограничение ресурсов

Это актуально для серверов: нужно отдать максимальный ресурс на вычисления, а не на графику. Графические библиотеки, позволяющие рендерить приятные интерфейсы с тенюшками и эффектом матового стекла, занимают вычислительный ресурс и память, а для сервера это не первостепенная задача. По этой причине серверный софт зачастую не поддерживает графический режим, а взаимодействие с серверными приложениями подразумевается через CLI. Конечно, можно привести в пример тот же Windows Server, но мои интервью с Windows-админами полны кейсов использования скриптов даже для такой банальной и популярной операции, как массовое создание пользователей. 

Критические обновления и откаты

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

Психологический фактор

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

 

Что уж говорить, я и сама прикипела к лаконичности CLI, и это с моей-то страстью к красивым шрифтам и кнопочкам. Вот вам недавний пример: мне нужно было установить утилиту «groff» на свой условный макбук (кто понял, о чем я, лучше не спрашивайте, зачем).  Вряд ли я бы нашла ее в AppStore — я просто запустила «Terminal», ввела «brew install groff» и ушла пить кофе.

Будущее, которое уже наступило

На мой взгляд современные эмуляторы терминалов — это довольно сложные графические интерфейсы, и спор «GUI или CLI» немного утратил свой смысл. Современные оболочки явно ушли очень далеко от своих предков, унаследовав лишь саму идею CLI.  Тот же эмулятор «Warp» со встроенным AI-помощником уже научился интерпретировать не просто команды, а бытовую человеческую речь.

Вместо заключения я бы хотела оставить место дискуссии. Как вы думаете, AI-терминалы улучшат или ухудшат жизнь администраторов? Может быть, вы хотели бы однажды  увидеть AI-помощника в SelectOS?

Комментарии (5)


  1. Zara6502
    03.09.2025 08:17

    потому что это гибко и удобно. CLI это базовая система взаимодействия с человеком, её очень просто реализовать, она проверена временем, GUI это надстройка, вы можете реализовать только GUI для какой-то системы, но вам неизбежно тогда придется придумывать некий костыль, который даст функционал CLI. Это можно сделать, но на мой взгляд не имеет смысла, только если вы не Джобс со своими тараканами. Да и то, CLI у яблока есть, хоть в 80-е и было желание всё сделать через GUI.


    1. Zara6502
      03.09.2025 08:17

      я бы еще дополнил, хотя в CLI и GUI последняя буква в обоих случаях обозначает - интерфейс, но сам подход разный. CLI оперирует базовым кодом символа, бывает и в 7 бит, и такие манипуляции легко позволяют заворачивать информацию от электроники в интерфейс для человека. Для этого требуется очень мало памяти и минимум деталей. Для многих микросхем (SoC например) такие конвертеры будут реализованы из коробки. Они дают базовый отладочный механизм взаимодействия с человеком, причем такие сигналы можно заворачивать куда угодно, парсить, реагировать. Например внутренний контроль работы SoC высыпает в терминал набор данных, а тестер коснувшийся контактов Rx/Tx читает логи и принимает решение о том куда этот SoC отправится. И эти сигналы одинаково могут обрабатываться как автоматикой, так и человеком на более высоком уровне. Для этого не требуется видеочип, поддержка разрешений, VGA/HDMI, АЦП/ЦАП и много чего еще, по сути это шина, на которую с определенной скоростью подаются коды символов. Например GUI реализованный через вэб у домашнего роутера может дублироваться через пины на плате в виде CLI.

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


  1. psynix
    03.09.2025 08:17

    а как же гибкость? я могу при помощи CLI прокинуть какую нибуть sed -i куда то туда где совсем не всходит солнце... ну и cli всетаки быстрее чем GUI ... а для некоторых вещей гуеф нет от слова совсем, ну может и есть но я не знаком и не горю желанием.


  1. evgenyk
    03.09.2025 08:17

    Еще аргументы в пользу CLI интерфейса:
    - Разработка CLI занимает меньше времени.
    - CLI более универсальный и переносимый
    - Выход утилит CLI легко обрабатывать и перенаправлять, можно составлять конвейеры команд CLI
    - Можно использовать на устройствах, вообще не имеющих клавиатуры, дисплея и мышки
    - Комбинации команд CLI легко преобразуются в скрипты


  1. jobless
    03.09.2025 08:17

    Вот за такой машинкой, без малого 40 лет назад я получил урок правки на ней исходников. И тут же воспользовался полученными знаниями. Командировка, ЕС-1022 нам отдавали по ночам и в одну ночь забыли оставить ключ от перфораторной. Терминалы отсутствовали. Только два источника ввода информации, читалка с перфокарт и консоль.

    p.s. с тех времён слово консоль у меня однозначно ассоциировано с consul.


    https://xlat.livejournal.com/699923.html?ysclid=mf2ms30ntv44518635