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

Повʼязані статті
dotfiles
Core utilities
Командна оболонка Unix (англ. Unix shell, часто просто «шелл» або «sh») — інтерпретатор команд, що використовується в операційних системах сімейства Unix, який дозволяє користувачеві вводити команди поодинці або запускати скрипти, що складаються з набору команд. Під терміном shell зазвичай розуміються оболонки, сумісні з POSIX, що ведуть своє походження від Bourne shell (шелл Борна), який з’явився в Unix Version 7.
Список оболонок
Оболонки, більш-менш
сумісні з POSIX
, перераховані в розділі
#POSIX-сумісні
, а оболонки з іншим синтаксисом - у розділі
#Альтернативні оболонки
.
POSIX-сумісні
На ці оболонки може вести символічне посилання
/usr/bin/sh
. Коли
Bash
,
mksh
AUR
} і
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-git
AUR
Oil Shell
(OSH)
— Bash-сумісна оболонка командного рядка UNIX. OSH може бути запущена на більшості UNIX-подібних операційних систем, у тому числі GNU/Linux. Вона написана мовою Python (v2.7), але поставляється у вигляді нативного виконуваного файлу. Діалект Bash, розпізнаваний OSH, називається мовою OSH.
https://www.oilshell.org
||
oil
Yash
— Yet another shell, POSIX-сумісна оболонка командного рядка, написана мовою C99 (ISO/IEC 9899:1999). Yash прагне стати найбільшою POSIX-сумісною оболонкою у світі, підтримуючи при цьому функції для інтерактивного використання і для написання скриптів.
https://yash.osdn.jp
||
yash
AUR
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
||
closh
AUR
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-git
AUR
Murex
— Командна оболонка з розширеними можливостями та поліпшеним користувацьким інтерфейсом.
https://murex.rocks/
||
murex
AUR
nushell
— Nu черпає натхнення у функціональних мовах програмування та сучасних інструментах командного рядка. Замість того, щоб розглядати файли і сервіси як необроблені потоки тексту, Nu розглядає кожне введення як щось, що має структуру.
https://www.nushell.sh
||
nushell
Oh
— Unix-оболонка, написана на Go. Це оболонка в дусі Unix, але відрізняється в деталях. Oh розширює можливості мови програмування оболонки без шкоди для інтерактивних функцій оболонки.
https://github.com/michaelmacinnis/oh
||
oh-git
AUR
PowerShell
— Об'єктно-орієнтована мова програмування та інтерактивна оболонка командного рядка, спочатку написана для Windows. Пізніше PowerShell був відкритий і портований на macOS і Linux.
https://github.com/PowerShell/PowerShell
||
powershell
AUR
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