Command-line shell (Українська) - ArchWiki

Jump to content

# Command-line shell (Українська)

From ArchWiki

Повʼязані статті

- dotfiles
- Core utilities

Командна оболонка Unix (англ. Unix shell, часто просто «шелл» або «sh») — інтерпретатор команд, що використовується в операційних системах сімейства Unix, який дозволяє користувачеві вводити команди поодинці або запускати скрипти, що складаються з набору команд. Під терміном shell зазвичай розуміються оболонки, сумісні з POSIX, що ведуть своє походження від Bourne shell (шелл Борна), який з’явився в Unix Version 7.

## Список оболонок

Оболонки, більш-менш сумісні з POSIX, перераховані в розділі #POSIX-сумісні, а оболонки з іншим синтаксисом - у розділі #Альтернативні оболонки.

### POSIX-сумісні

На ці оболонки може вести символічне посилання `/usr/bin/sh`. Коли Bash, mkshAUR} і zsh запускаються через виконуваний файл з іменем `sh`, вони автоматично стають більш сумісними з POSIX.

- Bash — розширює оболонку Bourne shell, додаючи історію та автодоповнення, індексовані та асоціативні масиви, цілочисельну арифметику, підстановку процесів, here strings, регулярні вирази та розширення дужок.

  https://www.gnu.org/software/bash/ || bash

- Dash — Потомок NetBSD-версії Almquist SHell (ash). Швидка POSIX-сумісна оболонка, яка прагне бути настільки маленькою, наскільки це можливо.

  http://gondor.apana.org.au/~herbert/dash/ || dash

- Korn shell (ksh) — Мова KornShell - це повна, потужна мова програмування високого рівня для написання додатків, найчастіше легша і швидша, ніж на інших мовах високого рівня. Це робить її особливо придатною для прототипування. ksh поєднує в собі найкращі риси оболонки Bourne і C, плюс безліч самостійних можливостей. Таким чином Ksh може зробити багато чого, щоб підвищити продуктивність і якість вашої роботи під час взаємодії з системою і в програмуванні. Програми на ksh легше писати, вони коротші та читабельніші, ніж програми, написані мовою нижчого рівня, такою як C.

  http://www.kornshell.com || ksh

- nsh — Командна оболонка, схожа на fish, але POSIX-сумісна.

  https://github.com/nuta/nsh || nsh-gitAUR

- Oil Shell (OSH) — Bash-сумісна оболонка командного рядка UNIX. OSH може бути запущена на більшості UNIX-подібних операційних систем, у тому числі GNU/Linux. Вона написана мовою Python (v2.7), але поставляється у вигляді нативного виконуваного файлу. Діалект Bash, розпізнаваний OSH, називається мовою OSH.

  https://www.oilshell.org || oil[пакет відсутній: replaced by oils-for-unix]

- Yash — Yet another shell, POSIX-сумісна оболонка командного рядка, написана мовою C99 (ISO/IEC 9899:1999). Yash прагне стати найбільшою POSIX-сумісною оболонкою у світі, підтримуючи при цьому функції для інтерактивного використання і для написання скриптів.

  https://yash.osdn.jp || yashAUR

- Zsh — Оболонка, призначена для інтерактивного використання, хоча це також потужна скриптова мова. Багато з корисних особливостей Bash, ksh і tcsh були включені в Zsh; було додано багато оригінальних рис. У вступі перераховані деякі з унікальних особливостей Zsh.

  https://www.zsh.org/ || zsh

Tip Скрипти POSIX та Bash можна перевірити на наявність помилок за допомогою shellcheck.

### Альтернативні оболонки

- C shell (tcsh) — Командний інтерпретатор, що використовується як інтерактивна оболонка входу в систему та командний процесор скриптів. Він має редактор командного рядка, програмоване автодоповнення слів, перевірку орфографії, механізм історії, керування завданнями та C-подібний синтаксис.

  https://www.tcsh.org || tcsh

- Closh — Bash-подібна командна оболонка на Clojure.

  https://github.com/dundalek/closh || closhAUR

- Elvish — Сучасна та виразна оболонка, яка може переносити внутрішні структуровані значення через конвеєри. Ця можливість дозволяє уникнути великої кількості складного коду для обробки тексту. Це виразна мова програмування з такими можливостями, як винятки, простори імен та анонімні функції. Також є потужний readline, який перевіряє синтаксис при наборі тексту, і підсвічування синтаксису за замовчуванням.

  https://elv.sh || elvish

- fish — Розумна і зручна командна оболонка. Fish робить повнокольорове підсвічування синтаксису командного рядка, а також підсвічування і автодоповнення команд та їхніх аргументів, наявних файлів та історії. Підтримується функція завершення в міру введення для історії та команд. Fish здатний аналізувати man-сторінки системи для визначення допустимих аргументів команд, що дає йому змогу підсвічувати і доповнювати команди. Легкий перегляд останніх команд може бути зроблений за допомогою `Alt+Up`. Демон Fish (fishd) полегшує синхронізацію історії всіх екземплярів fish, а також універсальних і постійних змінних оточення. Крім того, fish має простий синтаксис програмування та потік управління (подібно до ruby). Для отримання додаткової інформації читайте документацію.

  https://fishshell.com/ || fish

- ion — Сучасна системна оболонка з простим, але потужним синтаксисом. Вона повністю написана на Rust, що значно підвищує загальну якість і безпеку оболонки, усуваючи можливість появи вразливостей на кшталт ShellShock і спрощуючи розробку. Вона також забезпечує рівень продуктивності, що перевершує Dash, при використанні можливостей Ion. Хоча він розробляється поряд із RedoxOS і насамперед для неї, він цілком придатний і для інших *nix-платформ. Для отримання більш докладної інформації дивіться керівництво.

  https://gitlab.redox-os.org/redox-os/ion/ || ion-gitAUR

- Murex — Командна оболонка з розширеними можливостями та поліпшеним користувацьким інтерфейсом.

  https://murex.rocks/ || murexAUR

- nushell — Nu черпає натхнення у функціональних мовах програмування та сучасних інструментах командного рядка. Замість того, щоб розглядати файли і сервіси як необроблені потоки тексту, Nu розглядає кожне введення як щось, що має структуру.

  https://www.nushell.sh || nushell

- Oh — Unix-оболонка, написана на Go. Це оболонка в дусі Unix, але відрізняється в деталях. Oh розширює можливості мови програмування оболонки без шкоди для інтерактивних функцій оболонки.

  https://github.com/michaelmacinnis/oh || oh-gitAUR

- PowerShell — Об'єктно-орієнтована мова програмування та інтерактивна оболонка командного рядка, спочатку написана для Windows. Пізніше PowerShell був відкритий і портований на macOS і Linux.

  https://github.com/PowerShell/PowerShell || powershellAUR

- rc — Командний інтерпретатор для Plan 9, що надає можливості, схожі на Bourne shell, з невеликими доповненнями та менш своєрідним синтаксисом.

  https://doc.cat-v.org/plan_9/4th_edition/papers/rc || 9base

- xonsh — Оболонка на Python з додатковими примітивами, до яких ви звикли з Bash і IPython.

  https://xon.sh/ || xonsh

## Вибір усталеної оболонки

Після встановлення будь якої з раніше перерахованих оболонок ви можете запустити обрану оболонку всередині поточної оболонки,запустивши виконуваний файл. Якщо ви хочете використовувати тільки що встановлену оболонку, потрібно замінити стандартну оболону.

Огляньте встановлені оболонки:

    $ chsh -l

Та оберіть одну з них, що використовуватиметься для вашого користувача:

    $ chsh -s повний-шлях-до-оболонки

Tip Якщо ви використовуєте systemd-homed, виконайте:

    $ homectl update --shell=повний-шлях-до-оболонки користувач

Де повний-шлях-до-оболонки — шлях який вивела команда `chsh -l`.

Тепер, якщо ви вийдете і увійдете знову в систему, вас зустрічатиме обрана оболонка.

Tip chsh використовує інформацію про оболонки з файлу `/etc/shells`. Якщо свіжовстановлена оболонка не з'явилася в списку, ви можете додати її вручну в цей файл.

## Видалення оболонки

Warning Недотримання описаної нижче процедури може призвести до того, що користувачі втратять доступ до робочої оболонки.

Змініть усталену оболонку на іншу перед її видаленням. В якості альтернативи змініть базу даних користувачів, зробіть це для кожного користувача у якого обрана оболонка використовується в якості оболонки входу (також варто перевірити root користувача). Після завершення пакет можна видаляти.

## Оболонка входу

Оболонка входу (login shell) - це режим запуску оболонки, в якому вона читає файли, призначені для одноразової ініціалізації, такі як загальносистемний `/etc/profile` або користувацький `~/.profile` або інші специфічні для оболонки файли. Ці файли задають початкове оточення, яке успадковується всіма іншими процесами, запущеними з оболонки (зокрема, іншими оболонками, не пов'язаними із входом у систему, або графічними додатками). Отже, вони читаються тільки один раз на початку сеансу, тобто, наприклад, коли користувач входить у консоль або через SSH, змінює користувача за допомогою sudo або su з параметром `--login` або коли користувач вручну запускає оболонку входу (наприклад, командою `bash --login`}).

Огляд різних файлів ініціалізації дивіться в розділі #Файли налаштувань і за посиланнями в ньому. Для отримання додаткової інформації про оболонку входу дивіться також Difference between Login Shell and Non-Login Shell? і Why a «login» shell over a «non-login» shell? на Stack Exchange.

## Файли налаштувань

Щоб зробити автозапуск програм у консолі або при вході в систему, можна використовувати файли/каталоги, які оболонка виконує під час запуску. Дивіться документацію до вашої оболонки або відповідну статтю в ArchWiki: наприклад, Bash (Українська)#Конфігураційні файли або Zsh#Startup/Shutdown files.

### /etc/profile

Під час входу в систему всі Bourne-сумісні оболонки виконують source файлу `/etc/profile`, який, своєю чергою, виконує source всіх читабельних файлів `*.sh` в каталозі `/etc/profile.d/`: у цих скриптах не потрібно вказувати директиву інтерпретатора (шебанг) і їх не потрібно робити виконуваними. Вони використовуються для налаштування оточення і визначення параметрів, специфічних для додатків.

### Стандартизація

Можна змусити файли налаштувань (деяких) оболонок слідувати одній і тій самій угоді про іменування, а також підтримувати деякі загальні налаштування між оболонками.

Дивіться статтю про це і відповідний репозиторій. Дивіться також xsh.

## Введення та виведення

Дивіться також GregsWiki і I/O Redirection.

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

      $ команда файл > файл

  то це не спрацює, а вміст файлу буде втрачено. Хоча в деяких командах (наприклад sed) є опція для редагування файлів на місці, багато команд такої опції не мають. У такому разі можна використовувати команду sponge(1) з пакета moreutils.
- Оскільки cat не є вбудованою в оболонку командою, може бути краще використовувати замість неї переспрямування, наприклад, у скриптах, або якщо вам важлива продуктивність. Фактично, `< файл` робить те ж саме, що і `cat файл`.
- POSIX-сумісні оболонки підтримують Here Documents:

      $ cat << EOF
      раз
      два
      три
      EOF

- Конвеєри (труби, pipelines) за замовчуванням працюють зі стандартним виводом (stdout). Щоб працювати зі стандартним виведенням помилок (stderr(3)), можна переспрямувати stderr у stdout за допомогою конструкції вигляду `команда 2>&1 | інша-команда`, або, в Bash 4, `команда |& інша-команда`.
- Пам'ятайте, що багато основних утиліт GNU приймають файли як аргументи, тож, наприклад, замість `grep паттерн < файл` можна написати `grep паттерн файл` .

## Дивіться також

- Еволюція оболонок у Linux на IBM developerWorks
- terminal.sexy - Конструктор колірних схем терміналу
- Hyperpolyglot - Порівняння синтаксису різних оболонок
- UNIX Power Tools - Загальне використання інструментів командної лінії
- commandlinefu.com - Обмін фрагментами командного рядка
- List of applications/Utilities#Terminal emulators

Categories:

- Command-line shells (Українська)
- Lists of software (Українська)

Hidden category:

- Pages with broken package links

Command-line shell (Українська)
Add topic