Незважаючи на те, що командному рядку вже близько півстоліття, він зовсім не втратив своєї актуальності. Текстові термінали залишаються надзвичайно ефективним інструментом для виконання різноманітних задач, навіть у нашу епоху графічних інтерфейсів і сенсорних екранів.
Ба більше, командний рядок набуває все більшої популярності, зокрема завдяки розробці Microsoft нового потужного інструменту Windows Terminal. PowerShell у Windows 10 є доволі потужним середовищем, проте Microsoft доклала значних зусиль для інтеграції практично повноцінного середовища командного рядка Linux у Windows 10.
Колись командний рядок був єдиним способом взаємодії
У минулому, для того, щоб взаємодіяти з комп’ютером, потрібно було вводити текст. Це був єдиний спосіб. Звісно, це може здаватися обмеженим і архаїчним, але на той час, порівняно з використанням перфокарт або перфорованих паперових стрічок, текстовий ввід був революційним кроком. Перехід від телетайпів з рулонами паперу до терміналів з екранами на основі електронно-променевої трубки (ЕПТ) став ще одним значним стрибком у сфері взаємодії людини і комп’ютера.
Цей крок дав поштовх до розвитку інтерактивної оболонки. Тепер користувачі могли надсилати інструкції комп’ютеру та майже миттєво отримувати відповіді на екрані. Не потрібно було більше чекати, поки друкарський пристрій роздрукує інформацію.
Звичайно, це вже історія. Сучасні комп’ютери – це зовсім інша річ. За виключенням ситуацій, коли використовується комп’ютер без графічного інтерфейсу, віддалене підключення через SSH з обмеженою пропускною здатністю або управління безголовою або вбудованою системою, виникає питання: навіщо використовувати командний рядок замість графічного інтерфейсу?
Роз’яснення термінології
Часто терміни “командний рядок”, “вікно термінала” і “оболонка” використовуються як синоніми, що є некоректним. Це різні, хоча й пов’язані між собою поняття.
Вікно термінала — це вікно в графічному середовищі робочого столу, що емулює термінал телетайпу.
Оболонка — це програма, що працює у вікні термінала. Вона обробляє введений користувачем текст, намагається інтерпретувати його та виконувати відповідні інструкції, передавати їх іншим системним утилітам, або запускати скрипти чи програми, що відповідають введеним командам.
Командний рядок – це місце, де користувач вводить текст. Це підказка, яку відображає оболонка, очікуючи на введення інструкцій. Термін “командний рядок” також може стосуватися фактичного тексту, що вводиться користувачем. Наприклад, при обговоренні проблем із запуском програми, можуть запитати: “Який командний рядок ви використовували?”, маючи на увазі не оболонку, а саме введений текст команди.
Всі ці елементи разом утворюють інтерфейс командного рядка (CLI).
Навіщо використовувати командний рядок у 2024 році?
CLI може здаватися застарілим і незрозумілим для новачків. Чи є місце для такого способу взаємодії з комп’ютером у сучасних операційних системах? Чи не відмовилися ми від нього, коли з’явилися вікна, іконки, миші та графічні інтерфейси користувача (GUI)?
GUI дійсно існує вже декілька десятиліть. Перша версія Microsoft Windows була випущена в 1985 році, а з Windows 3.0 (1990 рік) вона стала стандартом для настільних комп’ютерів.
Система X Window, що використовується в Unix і Linux, була представлена у 1984 році, принісши графічні інтерфейси робочого столу в Unix та його численні похідні.
Проте Unix з’явився більш ніж на десятиліття раніше цих подій. Оскільки іншого вибору не було, все мало виконуватися через командний рядок. Вся взаємодія з комп’ютером, усі налаштування, всі операції здійснювалися за допомогою клавіатури.
Тому CLI може робити все. GUI досі не може виконувати всі завдання, доступні CLI. Навіть у тих випадках, де GUI може щось робити, CLI зазвичай є швидшим, більш гнучким і може бути автоматизований за допомогою сценаріїв.
Існує також стандарт.
Стандартизація завдяки POSIX
POSIX – це стандарт для Unix-подібних операційних систем, тобто практично для всього, крім Windows. Однак, навіть у Windows є підсистема Windows для Linux (WSL). Відкрийте вікно термінала у будь-якій операційній системі, сумісній з POSIX (або близькій до неї), і ви опинитеся в оболонці. Навіть якщо оболонка або дистрибутив пропонують свої розширення, якщо вони підтримують основні функції POSIX, ви зможете одразу почати працювати. І ваші скрипти також будуть працювати.
Командний рядок є спільним знаменником. Навчившись його використовувати, ви зможете виконувати потрібні завдання незалежно від дистрибутива Linux чи графічного середовища робочого столу. Різні робочі столи мають свої способи виконання дій. Різні дистрибутиви Linux використовують різні утиліти та програми.
Але відкрийте вікно термінала, і ви відчуєте себе як вдома.
Команди розроблені для спільної роботи
Кожна команда Linux призначена для виконання конкретного завдання і виконання його добре. Основна ідея полягає у розширенні можливостей шляхом додавання нових утиліт, які можна об’єднати з існуючими для досягнення бажаного результату.
Це настільки ефективно, що Microsoft доклала значних зусиль для інтеграції повноцінної підтримки командного рядка Linux у Windows 10!
Наприклад, команда `sort` використовується іншими командами для сортування тексту за алфавітом. Не потрібно вбудовувати можливості сортування в кожну окрему команду Linux. Програми з GUI, як правило, не підтримують такої взаємодії.
Розглянемо наступний приклад. Команда `ls` використовується для виведення списку файлів у поточному каталозі. Результати передаються команді `sort`, яка сортує їх за п’ятим стовпцем (розміром файлу). Відсортований список передається команді `head`, яка виводить на екран перші десять рядків результату.
ls -l | sort -nk5,5 | head
Таким чином ми отримуємо список десяти найменших файлів у поточному каталозі.
Змінивши одну команду — замінивши `head` на `tail` — ми отримаємо список десяти найбільших файлів у поточному каталозі.
ls -l | sort -nk5,5 | tail
Отримуємо бажаний список десяти найбільших файлів.
Результати команд можуть перенаправлятися та записуватися у файли. Стандартний вивід (stdout) та повідомлення про помилки (stderr) можна записувати окремо.
Команди можуть використовувати змінні середовища. Наступна команда покаже вміст вашого домашнього каталогу:
ls $HOME
Це працює з будь-якого місця в структурі каталогів.
Якщо ідея постійного введення тексту вас турбує, то такі прийоми, як автодоповнення за допомогою клавіші Tab, допоможуть вам скоротити обсяг набору тексту.
Скрипти для автоматизації та повторюваності
Люди схильні до помилок.
Скрипти дозволяють стандартизувати набір інструкцій, який виконується однаково кожного разу під час запуску. Це забезпечує послідовність в обслуговуванні системи. Перевірки безпеки можуть бути вбудовані в скрипти, дозволяючи їм визначати, чи потрібно продовжувати виконання. Це знімає з користувача необхідність мати достатньо знань для самостійного прийняття рішень.
Завдяки можливості автоматизації задач за допомогою cron в Linux та інших Unix-подібних системах, довгі, складні й повторювані завдання можуть бути спрощені або принаймні налаштовані один раз для подальшого автоматизованого виконання.
Скрипти PowerShell пропонують аналогічні можливості в Windows, і ви можете запланувати їх запуск через Планувальник завдань. Навіщо клацати 50 різних налаштувань кожного разу, коли ви налаштовуєте комп’ютер, якщо можна запустити команду, яка автоматично все змінить?
Поєднання переваг обох світів
Щоб отримати максимальну користь від Linux або будь-якої іншої операційної системи, досвідченим користувачам варто використовувати як командний рядок, так і графічний інтерфейс.
GUI є неперевершеним для використання програм. Навіть затяті прихильники командного рядка іноді змушені виходити з вікна термінала для роботи з офісними програмами, середовищами розробки та графічними редакторами.
Прихильники командного рядка не ненавидять GUI. Вони просто вважають за краще використовувати CLI для відповідних задач. Для адміністрування CLI є поза конкуренцією. Ви можете використовувати CLI для внесення змін в один файл, каталог, вибрані файли та каталоги або вносити глобальні зміни, докладаючи при цьому однакові зусилля. Спроба зробити те ж саме за допомогою графічного інтерфейсу часто вимагає повторюваних дій із клавіатурою та мишею, особливо коли кількість об’єктів збільшується.
Командний рядок забезпечує максимальну точність. Вам доступні всі параметри кожної команди. І багато команд Linux мають безліч варіантів. Розглянемо команду `lsof` як приклад. Перегляньте її сторінку man і подумайте, як можна реалізувати це в графічному інтерфейсі.
Є занадто багато опцій, щоб їх можна було ефективно представити користувачеві в графічному інтерфейсі. Це було б перевантажено, непривабливо і незручно у використанні. А це суперечить головній меті графічного інтерфейсу.
Кожній задачі – свій інструмент. Не ігноруйте командний рядок. Він часто виявляється більш швидким і спритним. Освоюйте його можливості, і ви не пошкодуєте про це.