Последний срач в Google Buzz заставил меня задуматься и поразмыслить насчёт консоли в современных никсах и о больших системах.
Противопоставление разных подходов к интерфейсам и специализация интерфейсов на определенных подходах не дает ничего хорошего. В UNIX эта беда заметнее чем во многих других системах.
Я перепробовал множество минималистичных плиточных оконных менеджеров. Среди них были очень толковые, но ни один из них меня не устроил: все они были слишком зациклены на клавиатуре — большинство из них просто игнорировало мышь как таковую. Это глупость со стороны авторов этих программ — от плиточных оконных менеджеров толку больше всего в связке с мышью, что продемонстрировал iPad, тем более, что основная программа на десктопе современного пользователя — браузер, целиком и полностью ориентирована на мышь.
В результате я использую гном. Он достаточно хорош для всего — он просто работает достаточно хорошо.
С консолью та же беда. Это может прозвучать глупо, вроде как консоль — она на то и консоль, чтобы быть текстовой, и мышь тут не при делах. Но нет — даже в консоли поддержка мыши очень важна. Трудно отказаться от убойной фичи копирования выделением мыши и вставки по щелчку двумя кнопками. В древней операционке Open Genera для лисп машин в консоли была полная поддержка мыши, графики и гипертекста. Но это было больше 20-ти лет назад.
Консоль в UNIX, в том виде в котором она есть сейчас мало того что практически бесполезна для пользователя (простого пользователя), в большинстве случаев она просто вредна.
Я пользуюсь консолью в Ubuntu 10.04 в пяти случаях:
- Запуск mplayer с субтитрами. Это долго и нудно, но smplayer тормозной, а стандартный проигрыватель не поддерживает FullHD.
- Перезапуск сбойного pulseaudio. Здесь даже и говорить нечего.
- Установка софта через apt. Установка софта через консоль — это очень удобно, тут уж ничего не скажешь.
- Работа с git (в большинстве случаев консоли я предпочитаю Emacs, но порой проще через консоль), пакетными менеджерами, системами сборки, etc. Профессиональный софт удобно использовать в консоли, на то он и профессиональный.
-
Правки из-под sudo в труднодоступных местах. Это уже из области
техобслуживания, простой пользователь во внутренности системы не
полезет, а игры с sudo опасны. Неосторожный
rm -Rf /
или даный добрым другом «скрипт для оптимизации системы» может иметь очень нехорошие последствия.
В остальном — от консоли толку нет.
Путь UNIX
А как же классический UNIX-way: скрипты, pipe'ы, и т.п? Только если вы сисадмин или упоротый сисадминистый пользователь, которому настолько нечего делать, что он использует все эти навороченые классические консольные инструменты (за пределами элементарных rm, mkdir, cp, chmod, конечно — эти достаточно просты, чтобы быть полезными).
У меня есть книжка в формате PDF. Я хочу её почитать. Как я сделаю это через интерфейс консоли и через интерфейс командной строки поиска Google в Chrome?
Zsh
- Надо почитать книжку, для этого надо открыть её.
- Вот только я не помню где она лежит — надо найти её.
-
Я читал в учебнике для системных администраторов что для этого
используется команда
find
. - Чтобы узнать (или вспомнить, потому что правила использования такого навороченого механизма полностью стираются из памяти после использования) надо прочесть мануал.
-
Открываю терминал, набираю:
man find
-
Проходит 5 минут. Как все сложно! Открываем вторую
консоль и уже в ней продолжаем:
find -name "SICP*" -type f -exec evince find: отсутствует аргумент у `-exec'
Результат нулевой — команда набрана неправильно. (Ах, да, пользователю нужно еще знать регулярные выражения).
-
Еще разок:
find -name "SICP*" -type f -exec evince '{}' \;
Заработало, только вот команду надо запускать всегда 2 раза: если в первый раз найдется 2000 файлов, то это будет кромешный ужас. Опечатки в команде приведут к еще более кромешному — можно тупо просрать все свои файлы. Откатить будет невозможно — в UNIX нет корзины.
Find
ищет по всей домашней директории, и если у меня 2 Тб всякого говна на винте я представляю, сколько времени она будет искать.
Итого, прошло около 12 минут. 12 минут чтобы почитать книжку — это нечто запредельное (боюсь, не освоившийся в консоли пользователь потратит на это куда больше времени). И это с учетом того, что нужно знать иностранный язык, чтобы прочесть мануал. И разбираться в тонкостях запуска команд в консоли.
Google Chrome
Как эта задача решается в хроме.
- Открываем хром.
- Открываем новую вкладку.
- Печатаем «SICP». Хром выдает список с вариантом «SICP PDF». Дважды вниз, один Enter.
- Похоже, 4-ый результат — это то, что надо.
- Тык.
Наслаждаемся.
Окей, это заняло около 20 секунд. Никаких чтений мануалов. Пишешь что хочешь — получаешь что хочешь. Это — командный интерфейс для людей.
А теперь у меня возникает вопрос. Если и адресная строка хрома и юниксовая консоль — командные интерфейсы, то почему я должен тратить столько времени, пользуясь юниксовой консолью, чтобы почитать книжку? Если я в десятки раз быстрее сделаю то же самое в хроме.
Консоль, в том виде в котором она есть в Linux не так хороша как могла бы быть. Более чем реально сделать её в разы более удобной, полезной, простой, понятной и безопасной. Не стоит зацикливаться на древних, как говно мамонта, методах (классический UNIX-вэй) — будущее за интегрированными системами, совмещающими в себе плюсы всех подходов.
Интегрированные системы
Людям, сведущим в технике, нравятся интегрированные системы (оставим в стороне тех, кому нравится интегрировать системы — привет, пользователи Gentoo (или, прости хосподи, LFS)). Им нравятся минималистичные системы (оставим в стороне программистов на C++ под Windows).
Я могу назвать несколько таких систем.
- Chrome
- Образцово-показательная минималистичная интегрированная система. Будущая Chrome OS тому подтверждение.
- Лисп
- Простой, минималистичный язык программирования, в который с завидной легкостью интегрируются любой другой язык программирования. Его любят за это. И ненавидят за скобочки.
- Emacs
-
Emacs — минималистичный? Не смеши меня! — Скажут мне
некоторые. Ну или почти все.
Нет, на самом деле Emacs — минималистичный. У него (относительно) небольшое ядро, а все его модули расширения (тысячи их) написаны на лиспе. Другое дело, что Эмакс используется уже несколько десятилетий, и область его применения столь широка, что сравнить её можно, разве что с Chrome OS — потому он довольно большой. Интегрированности эмакса может позавидовать любая другая система, кроме, разве что
- Лисп Машина
- Emacs некогда был лишь частью лисп-машины, наверное, самой интегрированной системы за всю компьютерную историю. Что и говорить, лисп-машины нравились программистам. И определенно больше, чем им нравится сейчас UNIX.