Частина 2. Знайомимося з PowerShell (Термінал, консоль та командна оболонка)

24 липня 2023 2 хвилин Автор: Lady Liberty

PowerShell Pro: Майстерність термінала, консолі та командної оболонки

Термінал, консоль та командна оболонка – це важливі компоненти PowerShell, які дозволяють користувачам взаємодіяти з операційною системою Windows через команди та скрипти. PowerShell надає потужний інтерфейс для керування системою та виконання різних завдань, що допомагає збільшити продуктивність та ефективність роботи. Термінал – це текстовий інтерфейс, який дозволяє користувачеві вводити команди та отримувати відповіді від операційної системи. Він є початковою точкою для взаємодії з PowerShell, де користувач може виконувати команди та переглядати результати. Консоль – це вікно, в якому відображаються результати виконаних команд, повідомлення про помилки та інша важлива інформація. Вона надає зручний спосіб переглядати результати та здійснювати взаємодію з командною оболонкою.

Командна оболонка (командний інтерпретатор) – це програмне забезпечення, яке виконує команди та скрипти, введені користувачем в терміналі або консолі. PowerShell має свою командну оболонку, яка дозволяє виконувати різні завдання, такі як керування файлами, реєстрами, службами, мережею та багато іншого. У посібнику про термінал, консоль та командну оболонку у PowerShell, ми розглянемо основні команди та функції, які допоможуть вам зручно працювати з PowerShell. Ви дізнаєтесь про різні способи взаємодії з командною оболонкою, включаючи запуск скриптів, виконання команд у фоновому режимі та багато іншого. Наш посібник допоможе вам швидко освоїти основи PowerShell та стати більш впевненими у використанні цього потужного інструменту.

Оболонка терміналів, консолей і команд

У попередньому розділі ми говорили про режим командного рядка в Windows і двох різних командних оболонках цієї операційної системи, згаданих про роботу в терміналах і консольних додатках. Для ефективної і зручної роботи в командному рядку важливо правильно підібрати інструмент, а для цього потрібно чітко розуміти, що означають ці терміни.

Саме слово походить від дієслова terminate (завершувати, ставити крапку) і означає «термінальний пристрій», тобто пристрій, що знаходиться на одному кінці в процесі спілкування з іншим пристроєм (сервером). Завдання терміналу – відправляти введений з клавіатури текст на сервер і виводити текстові відповіді з сервера.

Перші термінали в 1950-х і 1960-х роках були підключені через телефонні лінії до великих комп’ютерів. Це були електричні друкарські машинки (телетайпрайтери, ТТ У). Телетайпи набирали команди і відповіді сервера друкувалися рядок за рядком на рулоні паперу (мал. 2.1 ).

Мал. 2.1. Клема у вигляді електромеханічного телетайпу

Надалі замість принтера в комп’ютерних терміналах стали використовувати Сам пристрій з вбудованою клавіатурою і монітором назвали консоллю. Слово console з’явилося задовго до винаходу комп’ютерів і означало кронштейн або підставку для чого-небудь Потім пультами стали називати пульти з кнопками і перемикачами для управління електричними пристроями (мал. 2.2).

Мал. 2.2. Термінал (консоль) DEC I 100 (1978)

Таким чином, консоль – це пристрій, а термінал – комунікаційна програма всередині консолі, яка виконує наступні завдання:

  1. Розпізнавання і прийняття символів, набраних користувачем на клавіатурі.

  2. Формування єдиного рядка з отриманих символів з урахуванням керуючих кодів (наприклад, переміщення курсору або видалення символу).

  3. Обмін текстом з комп’ютером за допомогою комунікаційного обладнання через пряме фізичне з’єднання або по лініях зв’язку.

  4. Відображає на дисплеї текст, отриманий від комп’ютера. Термінал повинен розпізнавати та обробляти так звані коди виходу ANSl для встановлення формату, кольору та інших параметрів виведення тексту (наприклад, переміщення курсору в довільне положення на екрані).

Цей механізм, коли термінал посилає символи програмі, запущеної на комп’ютері, і виводить на екран отриманий від цієї програми текст, до цього дня залишається базовою моделлю людино-комп’ютерної взаємодії через командний рядок.

З середини 1980-х років апаратні консолі і термінали були витіснені персональними комп’ютерами і тепер є терміналами і терміналами в операційних системах.

Консолями називають програмними аналогами ТТУ. Це програми, які дозволяють вводити команди символів, надсилати ці команди іншому процесу та відображати рядки тексту з цього процесу.

Команди, що надходять з терміналу, виконуються спеціальною програмою, яка називається командною оболонкою. Залежно від отриманої команди оболонка виконує певні дії і генерує рядки символів, які відправляються назад в термінал для відображення на екрані.

Для кожної операційної системи існують різні оболонки, що відрізняються набором команд. У  системах (Linux і macOS) вони найчастіше використовуються з оболонками bash, zsh, fsh, tsh. Windows 10, як ми бачили в розділі 1. Стандартних оболонок дві: cmd.exe (командний рядок) і Windows PowerShell.

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

Термінали в Windows

Термінал і командна оболонка – це два додатки, запущені на одному комп’ютері, яким необхідно обмінюватися текстом один з  одним. У таких випадках ця проблема вирішується за допомогою псевдо-терміналу (Pseudo TT U, RTU), який надає два віртуальних пристрої: підлеглий і майстер. До головного псевдопристрою підключається термінальний додаток. А до веденого – командну оболонку або інше консольне додаток. Коли додаток терміналу Відправляє символи на вхід головного пристрою, вони перенаправляються на вихід підлеглого пристрою. Рядки тексту, сформовані оболонкою (shell) або додатком (app), відправляються на вхід підлеглого пристрою і перенаправляються на вихід головного пристрою (мал. 2.3).

Мал. 2.3. Взаємодія терміналу

При цьому ведене пристрій емулює поведінку апаратного терміналу, виділяючи з вхідного потоку певні керуючі комбінації символів і відправляючи відповідні цим комбінаціям сигнали в підключене додаток.

Цей механізм використовується з 1980-х років, підтримуючи роботу термінологічних додатків (включаючи повноекранні консольні пристрої, що враховують контроль над

У Windows емуляція терміналу реалізована інакше. Нагадаємо, що всі сучасні версії Windows є нащадками оригінальної операційної системи Windows NT, розробленої компанією Microsoft на початку 990-х років. Робота в режимі командного рядка в Windows NT здійснювалася за допомогою плагіна Windows Console, пов’язаного з оболонкою cmd.exe (інтерпретатором команд). Ця стандартна консоль продовжує використовуватися в Windows вже майже 30 років.

Стандартна консоль Windows

За своїм функціоналом термінал консолі Windows (ConHost) схожий на традиційний, але  влаштований інакше, без використання псевдо-терміналу RTU. Якщо користувач хоче працювати з командним рядком в, він спочатку запускає термінал.  який встановлює з’єднання з командною оболонкою за замовчуванням. У Windows користувач запускає не сам термінал (починаючи з Windows 7, він представлений файлом conhost.exe), а виконуваний файл з оболонкою (cmd.e.xe або powershell.exe)  або інша консольна утиліта (мал. 2.4). При цьому операційна система автоматично підключає цю оболонку або утиліту до існуючої IЈII і новому екземпляру консолі ConHost.

Мал. 2.4. Командний рядок (cmd exe) в стандартній консолі Wlndows

При цьому процес ConHost взаємодіє з оболонкою за допомогою системних повідомлень (I/O Control messages, IOCTL messages) через спеціальний драйвер, а не за допомогою потоків тексту через псевдотермінал PTY, як у UNIX-системах.

Отже, механізм підтримки консольних програм у Windows має суттєві відмінності від підходу, прийнятого в UNIX-системах.

  • Для будь-якої командної оболонки або утиліти командного рядка, яка працює, операційна система Windows завжди призначає стандартну консоль ConHost (conhost.exe) як термінал.

  • Канали зв’язку між консоллю та утилітами створюються самою операційною системою.

  • Утиліти командного рядка взаємодіють з консоллю за допомогою викликів функцій з консольного API Win32, таких як встановлення кольору тексту та фону, переміщення курсору в потрібне положення тощо.

  • Ці архітектурні особливості консолі Windows з часом стали джерелом проблем.

  • Важко створити альтернативні програмні термінали для Windows. Розробники таких додатків (зверніть увагу тут емулятори терміналів SopEti, Cmder, Console2, Hyper) повинні були запустити стандартну консоль Windows у вікні поза полем зору монітора, відправити символи, які в неї ввів користувач, після чого прочитати повернуті оболонкою рядки з цього вікна і відобразити їх у власному вікні.

  • Про  API Win32 Mapsole, які використовують функції Win32 для роботи з консоллю, важко перенести на інші платформи, де консоль управляється через символьний Ця  неузгодженість в управлінні консоллю Tayuke ускладнює портування на Windows.

  • Windows 10 підтримує підсистему Windows для Linux (WSL), що дозволяє встановити один з дистрибутивів Linux всередині Windows і використовувати оболонки та стандартні утиліти з цієї операційної системи. При цьому керуючі повідомлення,  що надходять від цих утиліт, можуть оброблятися некоректно в консолі Windows.

  • У вас виникли проблеми з реалізацією підключень командного рядка Windows на сервері з віддалених терміналів на інших комп’ютерах. Адже в цьому випадку потрібно віддалено викликати функції Win32 Console API, а клієнтська машина може не працювати під управлінням Windows.

Для вирішення подібних завдань розробники Microsoft в 2018 році додали інфраструктуру псевдоконсолі SoptRTU в Windows, зберігши при цьому зворотну сумісність з традиційним  ConHost  . Тепер ConHost повністю підтримує утиліти, які використовують кодування UTF-8 і послідовності ANSI для управління терміналом (завдяки цьому, наприклад, в консолі Windows коректно відображаються повноекранні файли запустити в сеансі WSL). Крім того, тепер з’явилася можливість створювати альтернативні термінали для Windows, що працюють через SopRTU.

Windows Terminal

У 2019 році Microsoft представила новий і вдосконалений термінал для Windows, який називається Windows Terminal. Це програмне забезпечення з відкритим вихідним кодом (вихідний код, розміщений на GitHub: https://github.com/microsoft/terminal), яке активно розробляється і позиціонується компанією Microsoft як основний інструмент для роботи з різними оболонками і утилітами командного рядка в сучасних версіях Windows.

Перерахуємо основні можливості, реалізовані в Windows Terminal.

  1. Підтримка вкладок для відкриття декількох сеансів оболонки в одному вікні. Поділ вікна на кілька незалежних панелей, в яких можна відкривати різні раковини.

  2. Наявність панелі для введення або вибору команди для управління терміналом.

  3. Підтримка  управління відображенням тексту в терміналі.

  4. Повна підтримка кодування UTF-8.

  5. Використання 24-бітового кольору.

  6. Підтримка графічних тем і напівпрозорого фону в терміналі.

  7. Підтримка різних режимів відображення вікна терміналу.

  8. Виберіть гіперпосилання в тексті, що відображається в терміналі.

  9. Скопіюйте текст до системного буфера обміну у форматах HTML та RTF.

Установка і запуск

Найпростіше встановити Windows Terminal з Microsoft Store (відкрити його можна за допомогою ярлика в меню Пуск або в браузері за посиланням https://wyvw.microsoft.com/ru-ru/store/apps/windows) (мал.2.5). Інші варіанти установки описані в репозиторії терміналів на GitHub (https:// github.com/microsoft/terminal).

Мал. 2.5. Термінал Windows в магазині Microsoft Store

Після встановлення ярлик терміналу Windows з’явиться в меню «Пуск». Для запуску терміналу можна скористатися ярликом терміналу Windows в меню «Пуск» або натиснути комбінацію клавіш <Win> + <R> і ввести ім’я wt файлу запуску терміналу в вікно «Виконати». Відкриється нове вікно терміналу з Windows PowerShell (див. мал 2.6).

Мал. 2.6. Windows PowerShell у терміналі Windows

Давайте подивимося на нові можливості Windows Terminal, яких не було в попередньому терміналі.

Робота із вкладками

Для створення нової вкладки з оболонкою PowerShell потрібно натиснути на значку + або натиснути комбінацію клавіш  Ctrl+ Shift T

Якщо клацнути на значку v, відкриється список, де можна вибрати інший профіль (командну оболонку) для нової вкладки (рис. 2.7):

  • Стандартний командний рядок Command Prompt (інтерпретатор cmd.exe);

  • Windows PowerShell;

  • Оболонка bash операційної системи Linux (якщо підсистема WSL встановлена та налаштована).

Мал. 2.7. Вибір командної оболонки для нової вкладки терміналу

Розділення вікна на декілька панелей

Вікно в кожній вкладці можна розділити на кілька панелей, як по вертикалі, так і по горизонталі. Це дозволяє переглядати кілька сеансів командного рядка одночасно без необхідності перемикатися між вкладками (див. мал 2.8). Розділення по вертикалі відкриває нову панель праворуч від виділеної панелі та розділяє горизонтально під виділеною панеллю.

Мал. 2.8. Поділ вікна терміналу на незалежні панелі

Для поділу вікна на панелі можна використовувати поєднання клавіш

Таблиця 2.1. Розділення вікна на панелі

Якщо у вкладці відкрито кілька панелей, то перемикатися між ними можна або мишкою, або клавішами зі стрілками, утримуючи клавішу <Alt>. Ви можете змінювати розмір панелей, одночасно утримуючи клавіші <Alt>+<Shift> і використовуючи клавіші зі стрілками.

Використання палітри команд

Різні команди управління терміналом можуть не тільки виконуватися за допомогою комбінацій клавіш, але і вводитися або вибиратися в палітрі команд, яка викликається натисканням клавіш <Ctrl>+<Shift>+<p> (мал. 2.9).

Мал. 2.9. Палітра команд терміналу Windows

Запуск термінала з аргументами командного рядка

Щоб запустити новий екземпляр Windows Terminal з командного рядка, використовуйте команду wt. При цьому за допомогою додаткових командних аргументів можна Задати поточний каталог, в якому буде відкриватися термінал, автоматично створюйте нові вкладки або розбивайте вкладку на кілька панелей. Команди для терміналу розділяються крапкою з комою.

Наприклад, така команда:

wt -d С:\ ; split-pane -р ’’Windows PowerShell” ; split-pane -H wsl.exe

Запустить новий термінал з трьома панелями на вкладці:

  1. По-перше, в корені C:\ відкриває профіль за промовчанням, PowerShell (команда -d C: \).

  2. Потім панель розділяється вертикально і в правій половині відкривається PowerShell в домашньому каталозі користувача (команда split-pane -р “Windows PowerShell”)

  3. Нарешті, права панель розділена горизонтально, а нижня половина відкриває інтерпретатор bash підсистеми WSL (команда split-pane -н wsl.exe).

  4. Опис інших аргументів, які можна вказати при запуску терміналу, можна знайти в документації на сайті Microsoft (https://docs.microsoft.com/ruru/windows/terminal/command-line-arguments).

Підсумки

  • Апаратні термінали дозволяли спілкуватися між комп’ютерами через командний рядок на самому початку комп’ютерної ери. До появи персональних комп’ютерів для роботи з серверами в режимі командного рядка використовувалися консолі – пристрої з вбудованою клавіатурою і монітором, в яких запускався програмний аналог терміналу.

  • Термінальна програма дозволяє вводити команди символів, надсилає їх іншому процесу та відображає рядки тексту, що надходять із цього процесу.

  • Команди, що надходять з терміналу, виконуються командною оболонкою. Оболонки не мають власного призначеного для користувача інтерфейсу.

  • Для персонального комп’ютера термінал і командна оболонка – це дві програми, запущені на одному комп’ютері, яким потрібно обмінюватися текстом один з одним. Працювати з однією і тією ж оболонкою можна за допомогою різних терміналів, а різні оболонки можна запускати з одного терміналу.

  • Windows включає дві командні оболонки: стандартну командний рядок cmd і Windows PowerShell.

  • Windows використовує консоль ConHost як стандартний термінал, до якого операційна система автоматично підключає запущену оболонку або консольний додаток. Крім того, можна інсталювати вдосконалений термінал Windows у Windows. Це додаток з відкритим вихідним кодом, яке активно розвивається і позиціонується компанією Microsoft в якості основного інструменту для роботи з оболонками командного рядка в сучасних версіях Windows.

Дякуємо нашій команді волонтерів за надану інформацію з відкритих джерел.

Інші статті по темі
ОсвітаСамонавчання
Читати далі
Частина 4. Знайомимося з PowerShell (Робота в оболонці PowerShell)
Дізнайтесь основні концепції, синтаксис та приклади використання команд та сценаріїв для автоматизації рутинних завдань та захисту даних. Підвищуйте продуктивність та оптимізуйте роботу з системою завдяки PowerShell.
673
ОсвітаСамонавчання
Читати далі
Частина 5. Знайомимося з PowerShell (Робота з об’єктами)
Робота з об'єктами PowerShell - це повний посібник, призначений для навчання користувачів роботі з об'єктами в командній оболонці PowerShell. У цьому посібнику представлені основні концепції та техніки роботи з об'єктами, включаючи створення, зчитування, зміну та видалення даних.
602
ОсвітаСамонавчання
Читати далі
Частина 8. PowerShell як мова програмування (Оператори та керуючі інструкції)
PowerShell надає детальний огляд різних типів операторів і керуючих інструкцій, які дозволяють програмістам ефективно працювати зі скриптами та автоматизувати рутинні завдання в середовищі Windows.
684
ОсвітаСамонавчання
Читати далі
Частина 10. PowerShell як мова програмування (Обробка помилок при виконанні команд)
Обробка помилок у PowerShell: Забезпечення стабільності та безпеки виконання програм та скриптів. Дізнайтесь про конструкції try-catch та команду -ErrorAction для ефективної обробки помилок у PowerShell та забезпечення надійного функціонування ваших проектів.
566
Знайшли помилку?
Якщо ви знайшли помилку, зробіть скріншот і надішліть його боту.