"Графические кнопки
нужны только идиотам" /usr/src/usr.bin/mg/theo.c |
Тео де Раадт, OpenBSD
Давайте сегодня немножко поговорим на тему популярной "священной войны" (holywar), что же лучше - графический интерфейс (Graphical User Interface, GUI) или всё-таки идеология консоли, или командной строки (Console Line Interface, CLI). Тем более проще это будет сделать, потому что совсем недавно, на сайте IT-издания InfoWorld Пол Венеция (Paul Venezia) поднял горячую тему оптимального создания интерфейсов для конфигурирования системы и выполнения административных задач, выступив с острой критикой GUI-интерфейсов, подобных YaST. По мнению Пола, GUI-интерфейс должен быть лишь надстройкой над проработанным интерфейсом командной строки и текстовых файлов конфигурации, но не заменой. В своей статье "Возьми этот GUI и выкинь" Пол, в частности, пишет: "Этот мой выбор CLI не является техно-чудачеством, это основано на реальном ежедневном опыте администрировании серверов и сетей. Вспомните четыре самых крупных производителя роутеров и свитчей за 15 последних лет: Cisco, 3Com, Nortel и Cabletron. Из них только Cisco постоянно разрабатывала интерфейс управления, основанный на командной строке, в то время как все остальные предпочитали модные текстовые и графические меню для настройки оборудования. Некоторые также включали убогий CLI-шелл, который давался в довесок, но все они, такие простые и выразительные в использовании, были вытеснены сравнительно запутанным и навороченным CLI от Cisco. Из этих четырёх компаний только Cisco процветает, когда остальные полностью провалились и были беспощадно задавлены.
Позвольте мне привести пример. У меня недавно была задача создать сложную сеть, используя средства безопасности Cisco ASA. Используя CLI, я настроил всё, что мне требуется, в одном ASA: это IP-адреса, маршруты, настройка туннелирования OSPF, параметры VPN-канала, набор правил QoS, списки доступа, правила для удалённых и локальных администраторов, строки SNMP, логи, новая версия прошивки - всё запустил и всё работает. Затем можно просто скопировать все настроенные текстовые конфигурационные файлы и при помощи sed заменить все IP-адреса и параметры сети и получить (за минуту или две) полную конфигурацию для другого узла ASA. Всё, что для этого требуется, залогиниться на него, скопировать нужную прошивку и конфиги, ну и затем перезагрузиться. Как ни смотри, это крайне просто и эффективно, что является одной из сторон простоты CLI и текстовых конфигурационных файлов. Но затем я перешёл на Cisco SA520. В SA520 нету CLI или, вообще, даже обычной консоли. Зато у него есть замечательный дружелюбный к пользователю WebUI (графический интерфейс управления через web). Раньше я мог настроить это устройство за минуту или две (я это делал с его старшими братьями), здесь мне пришлось буквально пробираться через каскад меню WebUI для каждой отдельной опции, чтобы сделать практически такую же конфигурацию, как у других ASA, с отличиями для этого сайта. Этот процесс настройки одного узла занял больше времени, чем я тратил для настройки всех других ASA с CLI вместе взятых. Номинально вам кажется, что настройка через WebUI будет легче и приятнее, чем через CLI, но в реальной жизни это не так. И речь идёт не только о затрате усилий - также учитывайте точность. Если вы запускаете скрипт, то можете быть уверенным, что выполненные изменения будут идентичными на каждой машине. Если же вы делаете всё вручную, как обезьяна, настраивая пару сотен таких узлов, повторяя в припадке по тысячу раз одни и те же осточертевшие действия, то уверенности в этом быть уже не может".
Пол приводит и множество других правильных и практических примеров из своей жизни в статье, но давайте не будем кидаться в крайности, всё же в некоторых случаях GUI также весьма полезен и по возможностям превосходит CLI по уровню своего удобства. Давайте для противовеса позиции Пола приведем пару примеров этого навскидку. Первое, что приходит мне в голову, - администрировать, например, каталоги, наверное, более удобно в графическом интерфейсе, чем, скажем, через команды ldapadd(1), ldapdelete(1), ldapmodify(1), ldapmodrdn(1), ldapsearch(1). Командная строка - это, конечно, круто и профессионально, но ситуация, когда изучение настройки очередной программы-утилиты приближается по сложности к изучению нового скриптового языка, тоже не совсем удобна. Например, часто админы бьются над тем, чтобы "настроить маршрутизацию", при том, что 90% этих людей хотят довольно-таки тривиальных вещей, а не "фильтрование и прибивание пакетов по тысячам условий", и с такой простой задачей GUI справился бы лучше. Бывают ещё случаи, когда нет дефолтного конфига, и тогда создание нового конфига "с нуля" для неизвестной ранее утилиты может здорово подпортить нервы даже самым большим фанатам командной строки. Другое, что приходит на ум из "приятных воспоминаний", это ситуация, когда одновременно открыты окна с конфигами, например, Apache, Squid, Samba, ftp, ldap и т.д. - и первое, что бросается в глаза, - у них всех синтаксис совершенно разный. Тут невольно крыша поедет, когда переходишь в процессе настройки от одного конфига к другому и снова наоборот. А ещё, кстати, есть Gnome, прогрессивно хранящий все свои настройки в xml. Кроме того, учтите, бардак усугубляет то, что синтаксис консольных команд в разных дистрибутивах Linux/*BSD бывает разный, и конфиги могут покоиться в разных файлах и даже каталогах. Взять сравнить те же SUSE, Debian или Slackware.
Поэтому хочется привести вывод статьи Пола Венеции, с которым я полностью согласен: "Мораль моей личной истории такова: графические интерфейсы замечательны и необходимы во многих случаях. Но они должны быть тогда, когда уже есть нормальный CLI, только дополняя его. В противных же случаях это позволяет делать за счет GUI простые вещи просто, а сложные - значительно более сложно". Хотелось бы, чтобы GUI и CLI действительно дополняли друг друга, а не развивались независимо и параллельно, как это получилось в 2009 году, когда Microsoft изобрела и защитила в патенте под номером 7617530 "метод запуска команд с правами администратора". Тогда эта заявка вызвала волну возмущений в ИТ-сообществе, фактически, после стольких лет своего развития и упорных исследований Microsoft, наконец, "изобрела" для себя команду sudo из мира Unix, назвав её runas и сразу ревностно защитив её патентом. Если с такой скоростью Microsoft будет продвигаться и дальше, то к году этак 2050-му она постепенно запатентует половину всех существующих команд Unix. Шутки шутками, но справедливости ради добавлю, что у Microsoft появился PowerShell, который способен эмулировать много чего - от обычного интерпретатора cmd.exe до юниксового bash, да и сам по себе весьма продвинут и сами знаете как ориентирован (я имею в виду технологию .Net, а не то, что вы подумали).
И, кстати, о будущем той же командной строки. Пока в Windows GUI "прогрессирует" от версии к версии, прирастая в своем развитии всё новыми наворотами в так нам всем жизненно необходимом Aero, то с командной строкой тоже не всё так гладко. Например, кто даст гарантии, что лет эдак через пять путь /bin/sh не станет всего лишь ссылкой на usr/bin/python, тогда, кстати, все эти grep, findutils, coreutils, sed, gawk и прочие можно будет просто выкинуть из системы за ненадобностью. Другая интересная тенденция, это когда не только идеология GUI, но и методики CLI начинают успешно проникать в Web. Первое, что приходит на ум, это сервис типа goosh.org - командная строка для работы с сервисами Google. Несмотря на свой простенький вид, Google Shell, используя Ajax, поможет вам добраться почти до всего, что есть у Google. Или отринув стандартные подходы прошлого века, можно перейти сразу к CLI v.2.0 - социальной командной строке yubnub.org, где сообщество добровольцев постепенно воссоздает всю мощь командной строки, но уже в Web. Для большего погружения в командную среду можно поставить в свой Firefox-плагин Vimperator, чтобы ощутить себя в старом добром редакторе vim, или вообще использовать Taskfox, который позволяет управлять браузером через ввод управляющих команд в поле ввода URL. Кстати, о последнем варианте... Некоторые пошли ещё дальше и утверждают, что командная строка уже давно переселилась в сам браузер и реинкарнировалась там в адресную строку. Не верите, что оттуда также можно выполнять команды? Тогда наберите, например, javascript:alert('Привет, CLI!'). И не забудьте, каждая команда в настоящей командной строке должна подтверждаться нажатием клавиши "Ввод". Удачных вам экспериментов!
Игорь САВЧУК,
blogerator.ru
![Версия для печати Версия для печати](https://www.kv.by/sites/all/modules/print/icons/print_icon.png)
Комментарии