Страшная командная строка
Повторение: когда имеет и когда не имеет смысл углубляться в устройство рабочего стола
- + Если планируете пользоваться именно этим рабочим столом и меняться вместе с ним
- ± Если хотите повысить эффективность / комфортность повседневной работы
- - Если хотите изучить устройство операционной системы (и вообще, и конкретно этой)
- - Если хотите что-то улучшить (как в ОС, так и в самом РС)
- Если не хотите изучать и / или улучшать, но приходится
Немного «дикой психофизиологии»
Графический интерфейс использует визуальный поиск, под который у человека есть много готовых когнитивных инструментов как с физиологической, так и с психологической стороны.
- + Сверхбыстрая обработка
- ± Ориентация на нормотипичность
- ± Проблема «готовых решений»
- Проблема «дурацкой иконографики»
- Проблема классификации готовых решений
Сравнимый (наверное) по мощности аппарат — речь. Задачу классификации можно решить, выстраивая дерево текстовых меток — меню.
- + Объём хранимой информации сильно увеличивается
- ± Требуется «быстрое чтение» терминологии
± Визуальный поиск работает — но только на позицию
- - Предметная область, как правило, не поддаётся строгой категоризации в виде дерева
- - Проблема «готовых решений» более актуальна
Организация пользовательского интерфейса в виде тегов?
Структура командного интерфейса
Интерфейс командной строки — самый старый
Принципы:
Текст: формализованное деление на «слова» и команды-«предложения»
Диалог: человек и машина обмениваются текстами, анализируя их
⇒ Построение решения задачи вместо (помимо) выбора готового решения
Совмещение интерфейса данных и управления
- ⇒ текстовые ограничения на то и другое
Очевидно, что интерфейс командной строки ещё сильнее эксплуатирует именно речевые способности человека. Главный недостаток — задача не решается простым поиском (разве что поиском в интернете, но и то без гарантии).
Примеры современной командной строки — Python, консоль Firefox, ChatGPT…
Главный интерфейс командной строки Linux — шелл.
Терминал vs консоль vs шелл
Терминал — это (исторически) аппаратное устройство. Передаёт символы с клавиатуры (в компьютер), принимает их (с компьтера) и отображает. Деннис Ритчи сидит за одним из двух терминалов с выводом на АЦПУ (телетайпов); Классический терминал с выводом на ЭЛТ-дисплей. В дикой природе терминалы вымерли, остались только в зоопарках.
Шелл (shell, «оболочка») — это программа, которая организует интерфейс командной строки для управления системой. Популярных примерно три — bash, zsh и, возможно, fish; а вообще их десятки.
Консоль — (исторически) подключённый к компьютеру терминал, дабы на нём происходил ввод-вывод шелла.
Эмулятор терминала — программа с графическим интерфейсом, которая делает то же, что и терминал: передаёт вводимые символы и отображает выводимые. Эмулятор терминала, организуемый ядром Linux в обход рабочего стола, тоже часто называют консолью. Эмуляторов терминала тоже десятки.
Но шелл в них один и тот же! Поэтому их часто путают…
Коротко про шелл
- Шелл — это интерпретатор командной строки. Своих собственных команд у шелла мало, 90% команд — это просто имена программ. Большинство программ в дистрибутиве Linux поддерживают запуск из командной строки с параметрами — «ключами».
Шелл — это редактор командной строки. Командную строку надо уметь быстро и безошибочно вводить / изменять. Чудесный инструмент — достраивание (completion, как в поиске браузера).
- Шелл — это язык программирования, т. н. «язык склейки». Актуально алгоритмически полный, очень эффективно заточенный для работы с основными компонентами управления системой — файлами, программами и текстами.
Существует ли «список всех команд в Linux»?
Поскольку большинство программ — это команды shell (некоторые только для этого и используются), существует (неформальная) дисциплина оформления параметров, передаваемых через командную строку. В современных ЯП эта дисциплина очень активно поддерживается (например, в Python).
Коротко про команды-программы
Находятся в системном каталоге /usr/bin/
Строго говоря — в каталогах из $PATH
- Могут быть как бинарными программами, так и сценариями
- Главное — атрибут «eXecute»
- Понятие shebang, пример
- Если явно указать каталог, где лежит программа, можно запустить из любого места
Договорённости относительно командной строки (просто параметры и ключи)
- Однобуквенные / полнословные ключи
- Параметрические ключи
- Исключения из правил
«Маны»
Пример совмещения потока данных и потока управления в терминале — получение справочной информации.
- достраивание от шелла aka таб-таб
--help
man … / apropos …
это просто содержимое /usr/share/man/*
info … / info -k
это просто содержимое /usr/share/info
ESC-последовательности
После отмирания аппаратных терминалов, чуть менее чем все эмуляторы поддерживают стандартные Управляющие последовательности ANSI. Некоторые символы при выводе на терминал не отображаются как символы, а управляют дальнейшим выводом; перемещают курсор по экрану, перекрашивают (будущий) фон и заливку, очищают часть экрана и т. п.
В древности вокруг очень разных управляющих последовательностей была наверчена целая библиотека (в Linux она называется NCurses), однако сейчас можно ограничиться ANSI, буквально ручками.
Это позволяет:
Организовывать TUI (в последнее время снова набирает популярность)
Вот например, dialog (от автора NCurses, кстати)
- Размечать вывод цветом (здравствуй, визуальный поиск!)
ESC-последовательности и несовместимость терминалов (если вдруг!), пример.
Эмодзи? Зачем эмодзи?
