
Я хочу сделать признание. Когда дело доходит до моего компьютера, я оставляю все в значительной степени сыром виде. Конечно, у меня есть любимые маленькие инструменты. Я использую плагины Chrome, такие как Wappalyzer, и множество расширений VS Code, таких как Chrome Debugger и Live Server. Но я сознательно не использую темы, шрифты, средства форматирования и другие приятные для глаз настройки. В далеком прошлом, когда я только начинал программировать, я тратил слишком много времени на перестройку своей индивидуальной настройки на разных компьютерах и на новом оборудовании. Постоянные настройки устарели, поэтому я решил по возможности сократить до стокового.
Это мое оправдание, почему я провел много месяцев, по большей части игнорируя продукт Microsoft Windows Terminal. В конце концов, время, которое я провожу в командной строке, ограничено и ничем не примечательно. Я настраиваю свое приложение, устанавливаю пакеты npm или Nuget и двигаюсь дальше. Проводить время в окне терминала означает заходить в темный угол операционной системы и делать то, что нужно.
Но теперь я вынужден признать, что был неправ. Или, по крайней мере, есть еще один инструмент, для которого мне нужно освободить место. Поскольку Windows Terminal не просто заменяет скрипучую часть программного обеспечения ОС с кодовой базой 30-летней давности, он также добавляет некоторые действительно практичные функции.
«Кодовой базе Windows Console 30 лет… на самом деле она старше, чем разработчики, которые сейчас над ней работают». - Рич Тернер, менеджер по Microsoft
Терминал открыт
Прежде чем продолжить, стоит сделать краткий обзор того, что такое терминал на самом деле. Это потому, что мы, разработчики, работающие в Windows, привыкли объединять терминалы и программы оболочки в одну расплывчатую идею. Например, вы можете подумать, что когда Windows перешла со старой командной строки на объектно-ориентированную оболочку PowerShell, она заменила программу терминала. Но на самом деле это неправда.
Терминал - это часть программного обеспечения, которое обрабатывает текстовый ввод и отображение. Вы вводите текст в командной строке терминала. Вы смотрите в окно терминала. Но за кулисами ваш терминал взаимодействует с программой оболочки, которая действительно выполняет эту работу. В современной Windows стандартная программа терминала - ConHost.exe, и, черт возьми, она старая.

Вы думаете, что запускаете PowerShell, но на самом деле вы запускаете интерфейс ConHost, который взаимодействует с PowerShell.
Microsoft очень не хочет что-либо менять в работе ConHost, потому что это стержень вековой обратной совместимости. Фактически, основной принцип дизайна ConHost - не нарушать обратной совместимости любой ценой. Даже исправление ошибок рискует уничтожить век сценариев и инструментов, которые каким-то образом все еще работают в режиме совместимости в современной Windows.
Вместо этого Microsoft начала создавать новый терминал под названием Windows Terminal. Он существует уже почти год, но еще не дошел до включения в ОС Windows. Это означает, что если вам нужен Терминал Windows, вы должны установить его из Windows Store. (Или вы можете загрузить его с GitHub и собрать самостоятельно, потому что новый терминал, естественно, имеет открытый исходный код.)
Почему терминал Windows?
Из-за того, как работают терминалы, в них не так много очевидного волшебства. Фактически, «выполнение работы» выполняется любой программой оболочки, которую вы используете. Но оказывается, что новый терминал Windows содержит множество практических удобств, которые могут сделать вас более продуктивным (или, по крайней мере, менее раздражающим) при выполнении повседневной работы. Вот несколько причин полюбить Windows Terminal:
Несколько вкладок. Помните, когда в веб-браузерах была только одна вкладка? Как мы это ненавидели! Но мы терпели это в ConHost уже целое поколение. К счастью, Windows Terminal позволяет открывать столько вкладок, сколько нужно в одном окне.
Иногда мелочи - это большие дела Несколько панелей. Это похоже на несколько вкладок, но вы можете видеть разные экземпляры терминала в аккуратном порядке бок о бок или сверху и снизу. И вы управляете всем этим с помощью удобных нажатий клавиш. Удерживая
Alt + Shift
, нажмите+
, чтобы открыть новую панель справа, или-
, чтобы открыть новую панель внизу. Затем вы можете переходить с панели на панель, удерживаяAlt
и нажимая клавиши со стрелками. Круто!Одновременное использование нескольких оболочек. Терминал Windows поддерживает любую стандартную программу оболочки. Вы можете использовать старую добрую PowerShell, почти устаревшую командную строку, Azure Cloud Shell (для управления онлайн-ресурсами Azure) и даже bash, если вы включили Windows Linux Subsystem. И вы можете запускать их все рядом, на разных вкладках или панелях одного и того же окна Терминала Windows.
Оболочки сошли с ума Масштабирование, которое работает. Мое любимое сочетание клавиш масштабирования - удерживать
Ctrl
и вращать колесико мыши. Это работает и в ConHost, но при этом неудобно изменяет размер окна. Терминал Windows масштабирует более разумно, и он распознает удобное сочетание клавишCtrl + 0
, чтобы вернуть все в нормальное состояние. И не повредит, что Windows Terminal поставляется с новым элегантным шрифтом Cascadia Code, который отлично смотрится при любом размере.Современный курсор. Что это за блочная штука в ConHost? Он показывает вашу текущую позицию, а не точку вставки, поэтому легко забыть, вставляет ли нажатие клавиши до или после текущего символа.
Изобилие настроек. Все они управляются через немного непонятный файл настроек JSON. Освойте его, чтобы управлять внешним видом окна терминала (размером, цветами, настройкой «всегда поверх») и добавьте свои собственные сочетания клавиш.
Пользователи Linux скажут вам, что многие из этих функций у них были в течение многих лет. Опытные разработчики Windows скажут вам то же самое, потому что они уже используют какую-то альтернативу терминалу с открытым исходным кодом. В основном они правы, но теперь вам не нужно игнорировать их в тихом смущении.
Терминал Windows также имеет графическое оформление, которое мне кажется изящным и почти бесполезным. Мне было интересно поиграть с этими функциями около 90 секунд, а потом забыть на всю оставшуюся жизнь:
Настраиваемая прозрачность с размытием фона. Вы даже можете настроить его на лету, удерживая
Ctrl + Shift
и вращая кнопку мыши. Но зачем?Цветовые схемы и пользовательские фоновые изображения.
Анимированные фоны в формате GIF. (Привет, Windows Plus примерно из 1998 года.)
Конечно, если вы решите использовать эти функции, я не буду судить.
Краткое примечание о терминале VS Code
Если вы используете Visual Studio Code, вы, вероятно, знакомы с его интегрированным терминалом. Вы можете выбрать, какую оболочку использовать (например, PowerShell или bash), но вы всегда используете терминал VS Code, а не ConHost.
Тем не менее, терминал VS Code довольно прост. Терминал Windows не может заменить встроенный терминал. Однако вы можете настроить Windows Terminal так, чтобы он работал как внешний терминал для VS Code. Таким образом, когда вы запускаете терминал из VS Code, вы откроете отдельное окно Windows Terminal, что даст вам больше места для передышки и современные функции, которые вам действительно нужны.
Последнее слово
Терминал Windows неуклонно продвигается к версии 2.0, которая ожидается этой весной, и в конечном итоге включение в Windows. Планируется длинный список новых функций, включая возможность отрывать вкладки и перемещать их из одного окна терминала к другому, бесконечная прокрутка и приятный пользовательский интерфейс для управления настройками. Будет ли он вызывать безумную любовь, как VS Code или язык C #? Нет. Но иногда достаточно сделать жизнь менее болезненной.
Скачать Windows Terminal можно здесь.
Sanctuary_s
Раз пошла такая пьянка, вот вам папочка с кодом, как автоматизировать настройку Windows Terminal: github.com/farag2/Utilities/tree/master/Windows%20Terminal
И в довесок, как можно закрепить его ярлык на начальном экране, чтобы запускать от имени администратора по умолчанию.
maksasila
Я не думаю, что это хороший совет…
Sanctuary_s
А вы консоль запускаете только по праздникам от админ? :)
maksasila
Да. И это совсем не часто. Я в основнов работаю в Линукс/WSL. И в WSL 99.9% времени не под root.
Sanctuary_s
Я — 100 % времени.
fshp
Можно переиначить известную поговорку.
Есть 2 типа людей:
Те кто не сидит под рутом, и те кто ещё сидит под рутом.
Sanctuary_s
Знаю и помню)
DrPass
Ну то такое. Если вся ваша инфраструктура — ваш рабочий/домашний компьютер, один и тот же набор софта и один и тот же набор сайтов, причин усложнять себе жизнь постоянным вводом sudo как бы и нет.
DirectoriX
Ну то такое… Если ваш холодильник — домашний/дачный, один и тот же набор продуктов и напитков, причин усложнять себе жизнь постоянным закрытием двери как бы и нет.
DrPass
Неудачная аналогия, она подобна котёнку с дверцей, знаете ли.
Вирусы, эксплойты и прочие радости, к вашему сведению, на компьютеры приносит не святой дух, а пользователи. Если пользователи их не приносят, то вашему компьютеру ничего не угрожает.
Aldrog
Ну и интересно всё-таки услышать, что у вас за юзкейсы такие, что постоянно рут нужен.
saboteur_kiev
1. А зачем???
DrPass
Хм. Честно? Вообще никогда, и не могу даже придумать, зачем бы мне это понадобилось (ну ладно, насчёт «вообще никогда» вру, лет семь назад скачивал утилитку для вытягивания музыки из вк). Что там может понадобиться? Средства разработки? Все нужные мне — известные и многократно проверенные, чего-то странненького мне не требуется. Малоизвестные библиотеки, делающие нужные мне вещи? Отказался от этой идеи много лет назад, многократно убедившись, что библиотеки без комьюнити — это и без всяких вирусов баг на баге и проблема на проблеме. Что ещё?
Нечаянно что-то сделать и скачать зловреда? Как по мне, защита от подобных угроз — это уже следующая стадия после ношения шапочки из фольги. Я пока ещё даже до шапочки не дошёл.
Мне, например, процессы рестартить часто приходится после внесения изменений. Да, я знаю, можно в sudoers прописать конкретно эти действия, но см. выше, ИТ-гигиена, как по мне, должна быть разумной, а не параноидальной. И действия по обеспечению безопасности данных не должны занимать больше времени, чем восстановление этих данных в случае потери/утечки :)
Aldrog
Я в первую очередь имел в виду какой-нибудь необычный инструмент для решения нетипичной одноразовой задачи. Но и просто новую версию старой программы можно в какой-то степени считать непроверенной (помнится была история с какой-то софтиной, которая после очередного обновления из-за бага запускала
rm -rf /
).Запустить какую-нибудь команду, перезаписывающую файлы, в системной директории вместо нужной. Или в аргументах опечататься.
Понятно, что оба кейса довольно редко случаются, но на мой взгляд отказ от повседневного использования root-сессии — это мера с околонулевой стоимостью.
А этим процессам обязательно под рутом работать?
DrPass
А у вас такое было, например? Какой-то необычный инструмент, из недоверенного источника?
Ну отож, это надо постараться. Тем более что я крайне-крайне редко что-то там удаляю из консоли, с файлами я всегда работаю через mc или FAR, в зависимости от операционки.
Не обязательно, но настраивать для них пермишены для доступа к нужным им ресурсам на домашнем компе — это вообще последнее, на что я хотел бы тратить своё время.
Aldrog
Я не говорил про недоверенные источники, просто инструмент, не имеющий широкой аудитории и хорошей репутации, и не проверенный лично.
Если их тоже запускать всегда из-под root, то тоже есть некоторый шанс рано или поздно случайно удалить какой-нибудь системный файл.
А вообще в консоли очень удобно выполнять операции над группами файлов, плюс вряд ли будешь работая в консоли переключаться на файловый менеджер чтобы удалить какой-нибудь временный файлик или папку.
Как-то в моей практике очень редко было необходимо давать отлаживаемым процессам права выше пользовательских, но наверное от задач зависит. Если вы используете консоль в основном именно для управления такими процессами, то ваша позиция понятна. Просто для меня консоль — это универсальный инструмент для кучи самых разных повседневных задач, поэтому идея всегда использовать root-сессию звучит диковато.
DrPass
Ну ок, это не принципиально. У вас такое было? Что вот надо что-то сделать, а единственный инструмент для этого не имеет сколь-нибудь широкой аудитории и хорошей репутации.
Да. Но как я уже и говорил, защищаться от этого надо уже после того, как дошёл до ношения шапочки из фольги. Мне ещё рано :)
Ну да, это от задач зависит. Например, я не админ, я программист. Причём выросший в своё время не на командной строке, а на C++ Builder и иже с ним. Соответственно, у меня в принципе нет никаких повседневных задач в консоли, кроме «изредка дёрнуть какую-то команду npm», все мои рабочие задачи делаются в IDE и прикладном софте, ну а за пределами работы, собственно, в консоли тоже мне делать нечего.
saboteur_kiev
1. Пишешь скрипт на привычных инструментах.
2. Непроверенный софт это какой, мне кажется вы путаете софт из непроверенных источников, и софт, которые лично не облизал, в исходниках не поковырялся, всеми антивирусами не проверил. Не надо настолько впадать в заблуждение. Проверенный софт — это из проверенного источника, которым может быть и линукс репозиторий, и домашний сайт программы, которую давно используешь. И да, могут бэкдор внедрить, так от такого на 100% защититься сложно, для этого и существуют бэкапы и базовые вещи, типа не работать под админом.
Для Линукса — это отличный, просто мегаправильный способ с высокой стоимостью, ибо поломать систему от юзера проблематично, а рутовые права практически никогда не нужны, если ты не конфигурируешь именно систему.
В виндовс с этим чуть сложнее, они только с Vista начали идти в эту сторону, и явно страдают от необходимости и обратную совместимость наладить и права урезать.
Разные процессы и службы могут быть запущены под разными юзерами, и перезапускать их проще под рутом, зарегав как демоны, чем логиниться под этими юзерами и перезапускать сами процессы в консоли
Aldrog
Так мы же ровно это и обсуждаем :)
В общем-то да, я тут с позиции линукс-юзера рассуждаю.
Ну не знаю, обычно когда я пишу / отлаживаю демонов, то не парюсь и запускаю от одного (своего) пользователя.
tzlom
Ну, это пока вы себе npm(подставить свой вариант) пакет с вирусом не установите
DrPass
Да это крайне маловероятно. Я никогда не ставлю неизвестные библиотеки, а задач, которые решаются чем-то неизвестным и непроверенным, и не существует более популярного аналога, я за два десятка лет не встречал, и не думаю, что встречу. Разве что кого-то из вендоров хакнут, но даже в данном случае я переживу. Мне проще, знаете ли, комп почистить раз в десять лет :)
Temtaime
Аналогично.
Во-первых, удобство и скорость работы. Если я работаю в терминале — 80% моего времени занимают команды, которые без sudo не работают.
Во-вторых, я достаточно внимателен и ещё не удалил ни один прод, а админил я 400+ серверов.
В-третьих — на всё есть бекапы, так зачем же усложнять себе работу постоянными su/sudo?
Кстати, под Windows использую уже многие года msys2 — классная вещь, была до WSL, да и сейчас для себя не вижу смысла переходить.
Пишу и использую много bash скриптов вместо powershell — дико удобно.
acidhouse
80% моего времени занимают команды, которые без sudo не работают
Может в этом проблема? Чем это вы таким занимаетесь.
Ahen
Администрированием?
tzlom
что же можно администрировать из под локального рута?
Aldrog
Тоже очень интересно. Я стабильно провожу в терминале по несколько часов в сутки, при этом sudo использую наверное раз в неделю, если не реже (рутовыми сессиями вовсе не пользуюсь).
amelekhin
А зачем, если не секрет? Я ограничился тем, что поставил пакет
gsudo
из choco, который может поднять права до админских на запуск одной команды или на всю терминальную сессию. Эдакий sudo/su в одном флаконе.Sanctuary_s
Ну, типа по старинке. Удобнее мне так. Я знаю, что я ввожу в консоль.