Command-line shell (Русский)

Состояние перевода:
На этой странице представлен перевод статьи
Command-line shell
. Дата последней синхронизации: 15 октября 2023. Вы можете
помочь
синхронизировать перевод, если в английской версии произошли
изменения
.
Ссылки по теме
dotfiles
Основные утилиты
Из
Википедии
:
Кома́ндная оболо́чка 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
— 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
Совет
Скрипты 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 имеет простой синтаксис программирования и поток управления (подобно 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
полный-путь-до-оболочки
Если вы используете
systemd-homed
, выполните:
$ homectl update --shell=
полный-путь-до-оболочки
пользователь
Где
полный-путь-до-оболочки
— это путь, который вывела команда
chsh -l
.
Теперь, если вы выйдите из системы и войдёте снова, вас встретит установленная оболочка.
Совет
chsh берёт информацию об оболочках из файла
/etc/shells
. Если свежеустановленная оболочка не появилась в списке, вы можете добавить её вручную в этот файл.
Удаление оболочки
Важно
Несоблюдение описанной ниже процедуры может привести к тому, что пользователи лишатся доступа к рабочей оболочке.
Измените оболочку по умолчанию
на другую перед её удалением.
В качестве альтернативы измените
базу данных пользователей
.
Сделайте это для каждого пользователя, у которого удаляемая оболочка используется в качестве оболочки входа (не забудьте проверить пользователя 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 (Русский)#Файлы запуска/завершения
.
/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
паттерн
файл
.
Смотрите также
Evolution of shells in Linux
on the IBM developerWorks
terminal.sexy
— Конструктор цветовых схем терминала
Hyperpolyglot
— Сравнение синтаксиса разных оболочек
UNIX Power Tools
— General command-line tool usage
commandlinefu.com
— Command-line snippets sharing
List of applications/Utilities#Terminal emulators